From 00f5c92149a4e015bfb2dbdfbcd890aa2e65e801 Mon Sep 17 00:00:00 2001 From: dearblue Date: Wed, 1 Jan 2020 14:53:59 +0900 Subject: Call `va_end()` before return The behavior when returning from a function without `va_end()` is undefined. --- src/class.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/class.c b/src/class.c index efe4b8a92..a7d9ebf37 100644 --- a/src/class.c +++ b/src/class.c @@ -897,7 +897,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) } break; case '|': - if (opt_skip && i == argc) return argc; + if (opt_skip && i == argc) goto finish; opt = TRUE; break; case '?': @@ -1004,6 +1004,8 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) if (!c && argc > i) { mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments"); } + +finish: va_end(ap); return i; } -- cgit v1.2.3