Fix builtin string to number conversion for overflow digits.

This commit is contained in:
Mike Pall 2013-04-29 14:28:10 +02:00
parent 895a8bc91f
commit 09aeca6abf

View File

@ -187,7 +187,7 @@ static StrScanFmt strscan_dec(const uint8_t *p, TValue *o,
if (dig) { if (dig) {
uint32_t i = dig; uint32_t i = dig;
if (i > STRSCAN_MAXDIG) { if (i > STRSCAN_MAXDIG) {
ex10 -= (int32_t)(i - STRSCAN_MAXDIG); ex10 += (int32_t)(i - STRSCAN_MAXDIG);
i = STRSCAN_MAXDIG; i = STRSCAN_MAXDIG;
} }
/* Scan unaligned leading digit. */ /* Scan unaligned leading digit. */
@ -280,9 +280,10 @@ static StrScanFmt strscan_dec(const uint8_t *p, TValue *o,
if (d == 0 && i == DPREV(lo)) lo = i; if (d == 0 && i == DPREV(lo)) lo = i;
} }
if (cy) { if (cy) {
hi = DPREV(hi);
if (xi[DPREV(lo)] == 0) lo = DPREV(lo); if (xi[DPREV(lo)] == 0) lo = DPREV(lo);
else if (hi == lo) { lo = DPREV(lo); xi[DPREV(lo)] |= xi[lo]; } else if (hi == lo) { lo = DPREV(lo); xi[DPREV(lo)] |= xi[lo]; }
hi = DPREV(hi); xi[hi] = (uint8_t)cy; idig++; xi[hi] = (uint8_t)cy; idig++;
} }
} }