Previously, the call to va_end() would be skipped when this procedure was given invalid arguments (and continued to `barf` a result). --- runtime.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/runtime.c b/runtime.c index 78f2f9b6..40fd368f 100644 --- a/runtime.c +++ b/runtime.c @@ -4863,14 +4863,16 @@ C_word C_a_i_string(C_word **a, int c, ...) p = (char *)C_data_pointer(s); va_start(v, c); - while(c--) { + for(; c; c--) { x = va_arg(v, C_word); if((x & C_IMMEDIATE_TYPE_BITS) == C_CHARACTER_BITS) *(p++) = C_character_code(x); - else barf(C_BAD_ARGUMENT_TYPE_ERROR, "string", x); + else break; } + va_end(v); + if (c) barf(C_BAD_ARGUMENT_TYPE_ERROR, "string", x); return s; } -- 2.11.0 _______________________________________________ Chicken-hackers mailing list Chicken-hackers@nongnu.org https://lists.nongnu.org/mailman/listinfo/chicken-hackers