From 311d867deb27591210321b9407a7095799f552f8 Mon Sep 17 00:00:00 2001 From: dearblue Date: Sun, 8 Sep 2019 20:31:35 +0900 Subject: Fix `mrb_vformat()` crashes with `MRB_INT16` If `MRB_INT16` is specified, the variable length argument `mrb_int` is converted to `int`. --- src/error.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/error.c') diff --git a/src/error.c b/src/error.c index bb8a0ba98..2bb505d85 100644 --- a/src/error.c +++ b/src/error.c @@ -326,7 +326,11 @@ mrb_vformat(mrb_state *mrb, const char *format, va_list ap) len = 1; goto L_cat; case 'd': case 'i': +#if MRB_INT_MAX < INT_MAX + i = (mrb_int)va_arg(ap, int); +#else i = *p == 'd' ? (mrb_int)va_arg(ap, int) : va_arg(ap, mrb_int); +#endif obj = mrb_fixnum_value(i); goto L_cat_obj; #ifndef MRB_WITHOUT_FLOAT -- cgit v1.2.3