diff options
author | wolfbeast <mcwerewolf@wolfbeast.com> | 2019-11-30 00:46:07 +0100 |
---|---|---|
committer | wolfbeast <mcwerewolf@wolfbeast.com> | 2019-11-30 00:46:07 +0100 |
commit | d88f471cbcf9f6c8682b6a0c152622b66708ac5b (patch) | |
tree | 69fc7c4c11a26dff3f813fd13b5205fb3b765e11 | |
parent | 6ea8e51aaa192d920ffd6b8a7d4cc4e998d7222a (diff) | |
download | UXP-d88f471cbcf9f6c8682b6a0c152622b66708ac5b.tar UXP-d88f471cbcf9f6c8682b6a0c152622b66708ac5b.tar.gz UXP-d88f471cbcf9f6c8682b6a0c152622b66708ac5b.tar.lz UXP-d88f471cbcf9f6c8682b6a0c152622b66708ac5b.tar.xz UXP-d88f471cbcf9f6c8682b6a0c152622b66708ac5b.zip |
Issue #1302 followup - Add spec-compliance checks/errors
- Check for undefined/null regex flags (because...)
- Make it throw a typeerror instead of syntax error on non-global
- Generalize JS error messages for these checks.
-rw-r--r-- | js/src/builtin/RegExp.js | 7 | ||||
-rw-r--r-- | js/src/js.msg | 2 |
2 files changed, 7 insertions, 2 deletions
diff --git a/js/src/builtin/RegExp.js b/js/src/builtin/RegExp.js index 25827743e..91212066c 100644 --- a/js/src/builtin/RegExp.js +++ b/js/src/builtin/RegExp.js @@ -1042,6 +1042,9 @@ function RegExpMatchAll(string) { // Step 2. if (!IsObject(rx)) ThrowTypeError(JSMSG_NOT_NONNULL_OBJECT, rx === null ? "null" : typeof rx); + + if (rx.flags === undefined || rx.flags === null) + ThrowTypeError(JSMSG_FLAGS_UNDEFINED_OR_NULL); // Step 3. var str = ToString(string); @@ -1052,9 +1055,9 @@ function RegExpMatchAll(string) { // Step 5. var flags = ToString(rx.flags); - // Step 2.b.iii; located here because it needs |flags|. + // Step 2.b.iii; located here because it needs to check |flags|. if (!callFunction(std_String_includes, flags, "g")) { - ThrowTypeError(JSMSG_BAD_REGEXP_FLAG, "- matchAll requires g"); + ThrowTypeError(JSMSG_REQUIRES_GLOBAL_REGEXP, "matchAll"); } // Step 6. diff --git a/js/src/js.msg b/js/src/js.msg index 1612c831d..e2d923bc4 100644 --- a/js/src/js.msg +++ b/js/src/js.msg @@ -132,6 +132,8 @@ MSG_DEF(JSMSG_INVALID_NORMALIZE_FORM, 0, JSEXN_RANGEERR, "form must be one of ' MSG_DEF(JSMSG_NEGATIVE_REPETITION_COUNT, 0, JSEXN_RANGEERR, "repeat count must be non-negative") MSG_DEF(JSMSG_NOT_A_CODEPOINT, 1, JSEXN_RANGEERR, "{0} is not a valid code point") MSG_DEF(JSMSG_RESULTING_STRING_TOO_LARGE, 0, JSEXN_RANGEERR, "repeat count must be less than infinity and not overflow maximum string size") +MSG_DEF(JSMSG_FLAGS_UNDEFINED_OR_NULL, 0, JSEXN_TYPEERR, "'flags' property must neither be undefined nor null") +MSG_DEF(JSMSG_REQUIRES_GLOBAL_REGEXP, 1, JSEXN_TYPEERR, "{0} must be called with a global RegExp") // Number MSG_DEF(JSMSG_BAD_RADIX, 0, JSEXN_RANGEERR, "radix must be an integer at least 2 and no greater than 36") |