From 703deedb66e8c345fc1cb5148adae60a36fc64d3 Mon Sep 17 00:00:00 2001 From: Paulo Matos Date: Wed, 17 Oct 2018 15:47:41 +0200 Subject: [PATCH] Avoid integer overflow A runtime error was detecting and overflow on e which this fixes. Fixes part of #2314. --- racket/src/racket/src/numstr.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/racket/src/racket/src/numstr.c b/racket/src/racket/src/numstr.c index dacf640da0..6ae1e383d8 100644 --- a/racket/src/racket/src/numstr.c +++ b/racket/src/racket/src/numstr.c @@ -445,7 +445,10 @@ static double STRTOD(const char *orig_c, char **f) if (!isdigit(ch)) return 0; /* not a digit - bad! */ else { - e = (e * 10) + (ch - '0'); + /* only increment e until we know if it is + infinity or zero to avoid overflow on e */ + if (!is_zero && !is_infinity) + e = (e * 10) + (ch - '0'); if (e > CHECK_INF_EXP_THRESHOLD(0)) { if (neg_exp || !is_nonzero) is_zero = 1;