| Index: src/conversions.cc
|
| ===================================================================
|
| --- src/conversions.cc (revision 293)
|
| +++ src/conversions.cc (working copy)
|
| @@ -269,18 +269,27 @@
|
| // Skip leading spaces.
|
| while ((index < len) && IsSpace(str, index)) index++;
|
|
|
| - // Compute sign of result.
|
| + // Is the string empty?
|
| + if (index >= len) return empty_string_val;
|
| +
|
| + // Get the first character.
|
| + uint16_t fst = GetChar(str, index);
|
| +
|
| + // Numbers can only start with '-', '+', '.', 'I' (Infinity), or a digit.
|
| + if (fst != '-' && fst != '+' && fst != '.' && fst != 'I' &&
|
| + (fst > '9' || fst < '0')) {
|
| + return JUNK_STRING_VALUE;
|
| + }
|
| +
|
| + // Compute sign of result based on first character.
|
| int sign = 1;
|
| - if (index < len && GetChar(str, index) == '-') {
|
| + if (fst == '-') {
|
| sign = -1;
|
| index++;
|
| // String only containing a '-' are junk chars.
|
| if (index == len) return JUNK_STRING_VALUE;
|
| }
|
|
|
| - // string is empty?
|
| - if (index >= len) return empty_string_val;
|
| -
|
| // do we have a hex number?
|
| // (since the string is 0-terminated, it's ok to look one char beyond the end)
|
| if ((flags & ALLOW_HEX) != 0 &&
|
|
|