From 9c93be78be2739f82440f7dfdc9edc2e37a5af7a Mon Sep 17 00:00:00 2001 From: PR Replica Date: Sat, 1 Jan 2000 00:00:00 +0000 Subject: [PATCH] Allow JavaScript property named await in async functions Source PR: https://github.com/github/codeql/pull/22500 Source head: 365727c445c8f0d60e078809a590c84279ac1e7e --- javascript/extractor/src/com/semmle/jcorn/Parser.java | 4 ++-- .../AwaitPropertyName/AwaitPropertyName.expected | 0 .../AwaitPropertyName/AwaitPropertyName.ql | 4 ++++ .../ql/test/library-tests/AwaitPropertyName/options | 1 + .../ql/test/library-tests/AwaitPropertyName/tst.js | 10 ++++++++++ 5 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 javascript/ql/test/library-tests/AwaitPropertyName/AwaitPropertyName.expected create mode 100644 javascript/ql/test/library-tests/AwaitPropertyName/AwaitPropertyName.ql create mode 100644 javascript/ql/test/library-tests/AwaitPropertyName/options create mode 100644 javascript/ql/test/library-tests/AwaitPropertyName/tst.js diff --git a/javascript/extractor/src/com/semmle/jcorn/Parser.java b/javascript/extractor/src/com/semmle/jcorn/Parser.java index a248a82dd140..cb9af6c6822c 100644 --- a/javascript/extractor/src/com/semmle/jcorn/Parser.java +++ b/javascript/extractor/src/com/semmle/jcorn/Parser.java @@ -2296,9 +2296,9 @@ protected Identifier parseIdent(boolean liberal) { && (this.options.ecmaVersion() >= 6 || inputSubstring(this.start, this.end).indexOf("\\") == -1)) this.raiseRecoverable(this.start, "The keyword '" + this.value + "' is reserved"); - if (!isPrivateField && this.inGenerator && this.value.equals("yield")) + if (!liberal && !isPrivateField && this.inGenerator && this.value.equals("yield")) this.raiseRecoverable(this.start, "Can not use 'yield' as identifier inside a generator"); - if (!isPrivateField && this.inAsync && this.value.equals("await")) + if (!liberal && !isPrivateField && this.inAsync && this.value.equals("await")) this.raiseRecoverable( this.start, "Can not use 'await' as identifier inside an async function"); name = String.valueOf(this.value); diff --git a/javascript/ql/test/library-tests/AwaitPropertyName/AwaitPropertyName.expected b/javascript/ql/test/library-tests/AwaitPropertyName/AwaitPropertyName.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/javascript/ql/test/library-tests/AwaitPropertyName/AwaitPropertyName.ql b/javascript/ql/test/library-tests/AwaitPropertyName/AwaitPropertyName.ql new file mode 100644 index 000000000000..939784b52eab --- /dev/null +++ b/javascript/ql/test/library-tests/AwaitPropertyName/AwaitPropertyName.ql @@ -0,0 +1,4 @@ +import javascript + +from JSParseError err +select err diff --git a/javascript/ql/test/library-tests/AwaitPropertyName/options b/javascript/ql/test/library-tests/AwaitPropertyName/options new file mode 100644 index 000000000000..13f987b19caf --- /dev/null +++ b/javascript/ql/test/library-tests/AwaitPropertyName/options @@ -0,0 +1 @@ +semmle-extractor-options: --tolerate-parse-errors diff --git a/javascript/ql/test/library-tests/AwaitPropertyName/tst.js b/javascript/ql/test/library-tests/AwaitPropertyName/tst.js new file mode 100644 index 000000000000..4edc377402c0 --- /dev/null +++ b/javascript/ql/test/library-tests/AwaitPropertyName/tst.js @@ -0,0 +1,10 @@ +const pool = { await() { return 42; } }; +const generator = { yield() { return 42; } }; + +async function issue22499() { + return await pool.await(); +} + +function* yieldPropertyName() { + return generator.yield(); +}