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 && |