Processed length should include no trailing junk (#63)
diff --git a/double-conversion/double-conversion.cc b/double-conversion/double-conversion.cc
index a65fd4d..feabe1f 100644
--- a/double-conversion/double-conversion.cc
+++ b/double-conversion/double-conversion.cc
@@ -887,9 +887,11 @@
if (*current == 'e' || *current == 'E') {
if (octal && !allow_trailing_junk) return junk_string_value_;
if (octal) goto parsing_done;
+ Iterator junk_begin = current;
++current;
if (current == end) {
if (allow_trailing_junk) {
+ current = junk_begin;
goto parsing_done;
} else {
return junk_string_value_;
@@ -901,6 +903,7 @@
++current;
if (current == end) {
if (allow_trailing_junk) {
+ current = junk_begin;
goto parsing_done;
} else {
return junk_string_value_;
@@ -910,6 +913,7 @@
if (current == end || *current < '0' || *current > '9') {
if (allow_trailing_junk) {
+ current = junk_begin;
goto parsing_done;
} else {
return junk_string_value_;
diff --git a/test/cctest/test-conversions.cc b/test/cctest/test-conversions.cc
index 6b709ed..aa8ae39 100644
--- a/test/cctest/test-conversions.cc
+++ b/test/cctest/test-conversions.cc
@@ -1804,6 +1804,18 @@
CHECK_EQ(0, processed);
+ flags = StringToDoubleConverter::ALLOW_TRAILING_JUNK;
+
+ CHECK_EQ(123.0, StrToD("123e", flags, 0.0, &processed, &all_used));
+ CHECK_EQ(processed, 3);
+
+ CHECK_EQ(123.0, StrToD("123e-", flags, 0.0, &processed, &all_used));
+ CHECK_EQ(processed, 3);
+
+ CHECK_EQ(123.0, StrToD("123e-a", flags, 0.0, &processed, &all_used));
+ CHECK_EQ(processed, 3);
+
+
flags = StringToDoubleConverter::ALLOW_LEADING_SPACES |
StringToDoubleConverter::ALLOW_SPACES_AFTER_SIGN |
StringToDoubleConverter::ALLOW_TRAILING_SPACES |
@@ -3184,10 +3196,10 @@
CHECK(all_used);
CHECK_EQ(123.0, StrToD("123e", flags, 0.0, &processed, &all_used));
- CHECK(all_used);
+ CHECK_EQ(processed, 3);
CHECK_EQ(123.0, StrToD("123e-", flags, 0.0, &processed, &all_used));
- CHECK(all_used);
+ CHECK_EQ(processed, 3);
{
StringToDoubleConverter converter(flags, 0.0, 1.0, "infinity", "NaN");