From 1b774d9da38686532c1da623819fedf7b261f607 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Sat, 27 Dec 2014 05:46:51 +0100 Subject: [PATCH] Fix corner case in string to number conversion. --- src/lj_strscan.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lj_strscan.c b/src/lj_strscan.c index a21c414a..0fddd43b 100644 --- a/src/lj_strscan.c +++ b/src/lj_strscan.c @@ -289,14 +289,15 @@ static StrScanFmt strscan_dec(const uint8_t *p, TValue *o, /* Scale down until no more than 17 or 18 integer part digits remain. */ while (idig > 9) { - uint32_t i, cy = 0; + uint32_t i = hi, cy = 0; ex2 += 6; - for (i = hi; i != lo; i = DNEXT(i)) { + do { cy += xi[i]; xi[i] = (cy >> 6); cy = 100 * (cy & 0x3f); if (xi[i] == 0 && i == hi) hi = DNEXT(hi), idig--; - } + i = DNEXT(i); + } while (i != lo); while (cy) { if (hi == lo) { xi[DPREV(lo)] |= 1; break; } xi[lo] = (cy >> 6); lo = DNEXT(lo);