Index: src/scanner-base.cc |
diff --git a/src/scanner-base.cc b/src/scanner-base.cc |
index e141d0eb70726bddab28d09c3540767cf0ef754d..91ea9e5133afa54905f2e7e71d45d792bd95fbe5 100644 |
--- a/src/scanner-base.cc |
+++ b/src/scanner-base.cc |
@@ -99,9 +99,9 @@ uc32 Scanner::ScanHexEscape(uc32 c, int length) { |
// Octal escapes of the forms '\0xx' and '\xxx' are not a part of |
// ECMA-262. Other JS VMs support them. |
Lasse Reichstein
2011/01/31 06:05:19
Add comment here (or, preferably, at the declarati
Martin Maly
2011/01/31 22:44:06
Done.
|
uc32 Scanner::ScanOctalEscape(uc32 c, int length) { |
- octal_pos_ = source_pos() - 1; // Already advanced |
uc32 x = c - '0'; |
- for (int i = 0; i < length; i++) { |
+ int i = 0; |
+ for (; i < length; i++) { |
int d = c0_ - '0'; |
if (d < 0 || d > 7) break; |
int nx = x * 8 + d; |
@@ -109,6 +109,10 @@ uc32 Scanner::ScanOctalEscape(uc32 c, int length) { |
x = nx; |
Advance(); |
} |
+ // Allow \0 only. Rest are octal escapes, illegal in strict mode. |
Lasse Reichstein
2011/01/31 06:05:19
We "allow" everything (we don't reject anything he
Martin Maly
2011/01/31 22:44:06
Done.
|
+ if (c != '\0' || i > 0) { |
+ octal_pos_ = source_pos() - i - 1; // Already advanced |
+ } |
return x; |
} |