mirror of
https://github.com/nodejs/node.git
synced 2025-08-15 13:48:44 +02:00
lib: refactor to avoid unsafe regex primordials
PR-URL: https://github.com/nodejs/node/pull/43475 Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com> Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
This commit is contained in:
parent
411fb21723
commit
a055337a02
39 changed files with 206 additions and 208 deletions
|
@ -35,7 +35,8 @@ const {
|
|||
ObjectKeys,
|
||||
ObjectPrototypeIsPrototypeOf,
|
||||
ReflectApply,
|
||||
RegExpPrototypeTest,
|
||||
RegExpPrototypeExec,
|
||||
RegExpPrototypeSymbolReplace,
|
||||
SafeMap,
|
||||
String,
|
||||
StringPrototypeCharCodeAt,
|
||||
|
@ -345,7 +346,7 @@ function getErrMessage(message, fn) {
|
|||
// Always normalize indentation, otherwise the message could look weird.
|
||||
if (StringPrototypeIncludes(message, '\n')) {
|
||||
if (EOL === '\r\n') {
|
||||
message = StringPrototypeReplace(message, /\r\n/g, '\n');
|
||||
message = RegExpPrototypeSymbolReplace(/\r\n/g, message, '\n');
|
||||
}
|
||||
const frames = StringPrototypeSplit(message, '\n');
|
||||
message = ArrayPrototypeShift(frames);
|
||||
|
@ -606,7 +607,7 @@ class Comparison {
|
|||
if (actual !== undefined &&
|
||||
typeof actual[key] === 'string' &&
|
||||
isRegExp(obj[key]) &&
|
||||
RegExpPrototypeTest(obj[key], actual[key])) {
|
||||
RegExpPrototypeExec(obj[key], actual[key]) !== null) {
|
||||
this[key] = actual[key];
|
||||
} else {
|
||||
this[key] = obj[key];
|
||||
|
@ -652,7 +653,7 @@ function expectedException(actual, expected, message, fn) {
|
|||
// Handle regular expressions.
|
||||
if (isRegExp(expected)) {
|
||||
const str = String(actual);
|
||||
if (RegExpPrototypeTest(expected, str))
|
||||
if (RegExpPrototypeExec(expected, str) !== null)
|
||||
return;
|
||||
|
||||
if (!message) {
|
||||
|
@ -687,7 +688,7 @@ function expectedException(actual, expected, message, fn) {
|
|||
for (const key of keys) {
|
||||
if (typeof actual[key] === 'string' &&
|
||||
isRegExp(expected[key]) &&
|
||||
RegExpPrototypeTest(expected[key], actual[key])) {
|
||||
RegExpPrototypeExec(expected[key], actual[key]) !== null) {
|
||||
continue;
|
||||
}
|
||||
compareExceptionKey(actual, expected, key, message, keys, fn);
|
||||
|
@ -851,7 +852,7 @@ function hasMatchingError(actual, expected) {
|
|||
if (typeof expected !== 'function') {
|
||||
if (isRegExp(expected)) {
|
||||
const str = String(actual);
|
||||
return RegExpPrototypeTest(expected, str);
|
||||
return RegExpPrototypeExec(expected, str) !== null;
|
||||
}
|
||||
throw new ERR_INVALID_ARG_TYPE(
|
||||
'expected', ['Function', 'RegExp'], expected
|
||||
|
@ -1000,7 +1001,7 @@ function internalMatch(string, regexp, message, fn) {
|
|||
}
|
||||
const match = fn === assert.match;
|
||||
if (typeof string !== 'string' ||
|
||||
RegExpPrototypeTest(regexp, string) !== match) {
|
||||
RegExpPrototypeExec(regexp, string) !== null !== match) {
|
||||
if (message instanceof Error) {
|
||||
throw message;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue