From 5800fc97b32778f72c5a95b970e38102ab866eaf Mon Sep 17 00:00:00 2001 From: piotr Date: Thu, 17 Oct 2019 00:01:22 +0200 Subject: [PATCH] [parser] Exception to 8 and 9 in tagged template (#10567) --- packages/babel-parser/src/tokenizer/index.js | 8 ++++++++ .../core/escape-template/non-octal/eight/input.js | 1 + .../core/escape-template/non-octal/eight/options.json | 3 +++ .../fixtures/core/escape-template/non-octal/nine/input.js | 1 + .../core/escape-template/non-octal/nine/options.json | 3 +++ 5 files changed, 16 insertions(+) create mode 100644 packages/babel-parser/test/fixtures/core/escape-template/non-octal/eight/input.js create mode 100644 packages/babel-parser/test/fixtures/core/escape-template/non-octal/eight/options.json create mode 100644 packages/babel-parser/test/fixtures/core/escape-template/non-octal/nine/input.js create mode 100644 packages/babel-parser/test/fixtures/core/escape-template/non-octal/nine/options.json diff --git a/packages/babel-parser/src/tokenizer/index.js b/packages/babel-parser/src/tokenizer/index.js index 1d2ea02212..ab0dbe5b92 100644 --- a/packages/babel-parser/src/tokenizer/index.js +++ b/packages/babel-parser/src/tokenizer/index.js @@ -1239,6 +1239,14 @@ export default class Tokenizer extends LocationParser { case charCodes.lineSeparator: case charCodes.paragraphSeparator: return ""; + case charCodes.digit8: + case charCodes.digit9: + if (inTemplate) { + const codePos = this.state.pos - 1; + + this.state.invalidTemplateEscapePosition = codePos; + return null; + } default: if (ch >= charCodes.digit0 && ch <= charCodes.digit7) { const codePos = this.state.pos - 1; diff --git a/packages/babel-parser/test/fixtures/core/escape-template/non-octal/eight/input.js b/packages/babel-parser/test/fixtures/core/escape-template/non-octal/eight/input.js new file mode 100644 index 0000000000..adc52b823a --- /dev/null +++ b/packages/babel-parser/test/fixtures/core/escape-template/non-octal/eight/input.js @@ -0,0 +1 @@ +`\8`; diff --git a/packages/babel-parser/test/fixtures/core/escape-template/non-octal/eight/options.json b/packages/babel-parser/test/fixtures/core/escape-template/non-octal/eight/options.json new file mode 100644 index 0000000000..3ae5cb6c96 --- /dev/null +++ b/packages/babel-parser/test/fixtures/core/escape-template/non-octal/eight/options.json @@ -0,0 +1,3 @@ +{ + "throws": "Invalid escape sequence in template (1:2)" +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/core/escape-template/non-octal/nine/input.js b/packages/babel-parser/test/fixtures/core/escape-template/non-octal/nine/input.js new file mode 100644 index 0000000000..b5435620b9 --- /dev/null +++ b/packages/babel-parser/test/fixtures/core/escape-template/non-octal/nine/input.js @@ -0,0 +1 @@ +`\9`; diff --git a/packages/babel-parser/test/fixtures/core/escape-template/non-octal/nine/options.json b/packages/babel-parser/test/fixtures/core/escape-template/non-octal/nine/options.json new file mode 100644 index 0000000000..3ae5cb6c96 --- /dev/null +++ b/packages/babel-parser/test/fixtures/core/escape-template/non-octal/nine/options.json @@ -0,0 +1,3 @@ +{ + "throws": "Invalid escape sequence in template (1:2)" +} \ No newline at end of file