]> git.kaiwu.me - quickjs.git/commitdiff
future reserved keywords are forbidden in function name and arguments when the functi...
authorFabrice Bellard <fabrice@bellard.org>
Tue, 22 Apr 2025 16:51:54 +0000 (18:51 +0200)
committerFabrice Bellard <fabrice@bellard.org>
Tue, 22 Apr 2025 16:51:54 +0000 (18:51 +0200)
quickjs.c

index dffc3d6a02b1dbb4793750a45f00e5ce59170bb4..ba021b769b67bde2e792d3d54cf6e9faadf09d52 100644 (file)
--- a/quickjs.c
+++ b/quickjs.c
@@ -33822,6 +33822,12 @@ static __exception int js_parse_directives(JSParseState *s)
     return js_parse_seek_token(s, &pos);
 }
 
+/* return TRUE if the keyword is forbidden only in strict mode */
+static BOOL is_strict_future_keyword(JSAtom atom)
+{
+    return (atom >= JS_ATOM_LAST_KEYWORD + 1 && atom <= JS_ATOM_LAST_STRICT_KEYWORD);
+}
+
 static int js_parse_function_check_names(JSParseState *s, JSFunctionDef *fd,
                                          JSAtom func_name)
 {
@@ -33832,13 +33838,15 @@ static int js_parse_function_check_names(JSParseState *s, JSFunctionDef *fd,
         if (!fd->has_simple_parameter_list && fd->has_use_strict) {
             return js_parse_error(s, "\"use strict\" not allowed in function with default or destructuring parameter");
         }
-        if (func_name == JS_ATOM_eval || func_name == JS_ATOM_arguments) {
+        if (func_name == JS_ATOM_eval || func_name == JS_ATOM_arguments ||
+            is_strict_future_keyword(func_name)) {
             return js_parse_error(s, "invalid function name in strict code");
         }
         for (idx = 0; idx < fd->arg_count; idx++) {
             name = fd->args[idx].var_name;
 
-            if (name == JS_ATOM_eval || name == JS_ATOM_arguments) {
+            if (name == JS_ATOM_eval || name == JS_ATOM_arguments ||
+                is_strict_future_keyword(name)) {
                 return js_parse_error(s, "invalid argument name in strict code");
             }
         }