LibJS: Disallow '\8' and '\9' in strict mode due to being octal escapes

This commit is contained in:
davidot 2021-11-26 23:26:42 +01:00 committed by Linus Groh
parent c57721cf83
commit 7624c3de0e
Notes: sideshowbarker 2024-07-18 00:41:35 +09:00
2 changed files with 13 additions and 0 deletions

View file

@ -62,4 +62,11 @@ describe("octal escapes", () => {
// Because of the non string statement in the middle strict mode is not enabled.
expect("'\\123'; somethingElse; 'use strict'").toEval();
});
test("invalid octal escapes fail in strict mode", () => {
expect("'use strict'; '\\8'").not.toEval();
expect("'use strict'; '\\800'").not.toEval();
expect("'use strict'; '\\9'").not.toEval();
expect("'use strict'; '\\912'").not.toEval();
});
});

View file

@ -198,6 +198,12 @@ String Token::string_value(StringValueStatus& status) const
continue;
}
if (lexer.next_is('8') || lexer.next_is('9')) {
status = StringValueStatus::LegacyOctalEscapeSequence;
builder.append(lexer.consume());
continue;
}
lexer.retreat();
builder.append(lexer.consume_escaped_character('\\', "b\bf\fn\nr\rt\tv\v"));
}