tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 6985ed7b2bc849460ff5d99ff3e6633aaf7f9eae
parent b13071d0706a2e1bb3dbc4c221d5c38a791e7845
Author: Debadree Chatterjee <debadree333@gmail.com>
Date:   Fri, 14 Nov 2025 18:29:44 +0000

Bug 2000156: Throw error if binding patterns are observed in using decls. r=arai

Differential Revision: https://phabricator.services.mozilla.com/D272602

Diffstat:
Mjs/public/friend/ErrorNumbers.msg | 1+
Mjs/src/frontend/Parser.cpp | 6++++++
Mjs/src/tests/jstests.list | 4----
3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/js/public/friend/ErrorNumbers.msg b/js/public/friend/ErrorNumbers.msg @@ -229,6 +229,7 @@ MSG_DEF(JSMSG_BAD_CLASS_MEMBER_DEF, 0, JSEXN_SYNTAXERR, "bad class member def MSG_DEF(JSMSG_BAD_COALESCE_MIXING, 0, JSEXN_SYNTAXERR, "cannot use `??` unparenthesized within `||` and `&&` expressions") MSG_DEF(JSMSG_BAD_CONST_DECL, 0, JSEXN_SYNTAXERR, "missing = in const declaration") MSG_DEF(JSMSG_BAD_USING_DECL, 0, JSEXN_SYNTAXERR, "missing = in using declaration") +MSG_DEF(JSMSG_NO_DESTRUCT_IN_USING, 0, JSEXN_SYNTAXERR, "destructuring patterns are not allowed in using declarations") MSG_DEF(JSMSG_BAD_CONSTRUCTOR_DEF, 0, JSEXN_SYNTAXERR, "a class constructor definition must be a plain public method") MSG_DEF(JSMSG_BAD_CONTINUE, 0, JSEXN_SYNTAXERR, "continue must be inside loop") MSG_DEF(JSMSG_BAD_DESTRUCT_ASS, 0, JSEXN_SYNTAXERR, "invalid destructuring assignment operator") diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp @@ -4868,6 +4868,12 @@ GeneralParser<ParseHandler, Unit>::declarationList( Node binding; if (tt == TokenKind::LeftBracket || tt == TokenKind::LeftCurly) { + if (declKind == DeclarationKind::Using || + declKind == DeclarationKind::AwaitUsing) { + MOZ_ASSERT(!initialDeclaration); + error(JSMSG_NO_DESTRUCT_IN_USING); + return errorResult(); + } binding = MOZ_TRY(declarationPattern(declKind, tt, initialDeclaration, yieldHandling, forHeadKind, forInOrOfExpression)); diff --git a/js/src/tests/jstests.list b/js/src/tests/jstests.list @@ -702,16 +702,12 @@ skip script test262/intl402/PluralRules/notation.js skip script test262/staging/top-level-await/tla-hang-entry.js # https://bugzilla.mozilla.org/show_bug.cgi?id=1998671 -skip script test262/language/statements/await-using/syntax/await-using-invalid-arraybindingpattern-after-bindingidentifier.js skip script test262/language/statements/await-using/syntax/await-using-invalid-assignment-statement-body-for-of.js -skip script test262/language/statements/await-using/syntax/await-using-invalid-objectbindingpattern-after-bindingidentifier.js skip script test262/language/statements/await-using/syntax/await-using-invalid-assignment-next-expression-for.js skip script test262/language/statements/using/syntax/using-invalid-assignment-statement-body-for-of.js -skip script test262/language/statements/using/syntax/using-invalid-arraybindingpattern-after-bindingidentifier.js skip script test262/language/statements/using/syntax/with-initializer-default-statement-list.js skip script test262/language/statements/using/syntax/using-invalid-assignment-next-expression-for.js skip script test262/language/statements/using/syntax/using-not-allowed-at-top-level-of-eval.js -skip script test262/language/statements/using/syntax/using-invalid-objectbindingpattern-after-bindingidentifier.js skip script test262/language/statements/using/syntax/using-for-using-of-of.js