1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-23 15:49:44 -05:00

perf(fetch/headers): optimize appendHeader (#12234)

Use a single regex to check for `\0`, `\n`, `\r` instead of 3 `String.includes(...)` calls
This commit is contained in:
Aaron O'Mullan 2021-09-26 20:19:02 +02:00 committed by GitHub
parent b095157c1d
commit 6c007aa5ab
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -37,7 +37,6 @@
SymbolFor,
SymbolIterator,
StringPrototypeReplaceAll,
StringPrototypeIncludes,
TypeError,
} = window.__bootstrap.primordials;
@ -94,6 +93,10 @@
}
}
// Regex matching illegal chars in a header value
// deno-lint-ignore no-control-regex
const ILLEGAL_VALUE_CHARS = /[\x00\x0A\x0D]/;
/**
* https://fetch.spec.whatwg.org/#concept-headers-append
* @param {Headers} headers
@ -108,11 +111,7 @@
if (!RegExpPrototypeTest(HTTP_TOKEN_CODE_POINT_RE, name)) {
throw new TypeError("Header name is not valid.");
}
if (
StringPrototypeIncludes(value, "\x00") ||
StringPrototypeIncludes(value, "\x0A") ||
StringPrototypeIncludes(value, "\x0D")
) {
if (RegExpPrototypeTest(ILLEGAL_VALUE_CHARS, value)) {
throw new TypeError("Header value is not valid.");
}
@ -372,11 +371,7 @@
if (!RegExpPrototypeTest(HTTP_TOKEN_CODE_POINT_RE, name)) {
throw new TypeError("Header name is not valid.");
}
if (
StringPrototypeIncludes(value, "\x00") ||
StringPrototypeIncludes(value, "\x0A") ||
StringPrototypeIncludes(value, "\x0D")
) {
if (RegExpPrototypeTest(ILLEGAL_VALUE_CHARS, value)) {
throw new TypeError("Header value is not valid.");
}