diff options
author | Fabrice Bellard <fabrice@bellard.org> | 2025-04-22 18:51:54 +0200 |
---|---|---|
committer | Fabrice Bellard <fabrice@bellard.org> | 2025-04-22 18:51:54 +0200 |
commit | 99a855f2c76d0b94ede87ef0c1ff416903203313 (patch) | |
tree | ae0a079556e7dde452748a93b787602bad42d8bd | |
parent | e5e724829a21bc507414a7b30dcd987158f1cc5e (diff) | |
download | quickjs-99a855f2c76d0b94ede87ef0c1ff416903203313.tar.gz quickjs-99a855f2c76d0b94ede87ef0c1ff416903203313.zip |
future reserved keywords are forbidden in function name and arguments when the function body is in strict mode
-rw-r--r-- | quickjs.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -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"); } } |