From b4bc39568060d365829d2ace0f84f0ba382bfeb1 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 17 Feb 2014 09:27:53 +0900 Subject: fdigit may be negative due to error if mrb_float is 32bit (e.g. 10**36 on 32bit arch); ref #1713 #1714 --- src/numeric.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/numeric.c') diff --git a/src/numeric.c b/src/numeric.c index 9fc604547..41c559cee 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -159,6 +159,8 @@ mrb_flo_to_str(mrb_state *mrb, mrb_value flo, int max_digit) while (max_digit >= 0) { mrb_float weight = pow(10.0, m); mrb_float fdigit = n / weight; + + if (fdigit < 0) fdigit = n = 0; if (m < -1 && fdigit < FLT_EPSILON) { if (e || exp > 0 || m <= -abs(exp)) { break; -- cgit v1.2.3