Skip to content

File tree

3 files changed

+171
-99
lines changed

3 files changed

+171
-99
lines changed

dist/main.cjs

+85-49
Original file line numberDiff line numberDiff line change
@@ -13168,8 +13168,6 @@ var require_util = __commonJS({
1316813168
return tree.lookup(value) ?? value.toString("latin1").toLowerCase();
1316913169
}
1317013170
function parseHeaders(headers, obj) {
13171-
if (!Array.isArray(headers))
13172-
return headers;
1317313171
if (obj === void 0)
1317413172
obj = {};
1317513173
for (let i = 0; i < headers.length; i += 2) {
@@ -14962,9 +14960,9 @@ var require_data_url = __commonJS({
1496214960
var assert = require("node:assert");
1496314961
var encoder = new TextEncoder();
1496414962
var HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+-.^_|~A-Za-z0-9]+$/;
14965-
var HTTP_WHITESPACE_REGEX = /[\u000A|\u000D|\u0009|\u0020]/;
14963+
var HTTP_WHITESPACE_REGEX = /[\u000A\u000D\u0009\u0020]/;
1496614964
var ASCII_WHITESPACE_REPLACE_REGEX = /[\u0009\u000A\u000C\u000D\u0020]/g;
14967-
var HTTP_QUOTED_STRING_TOKENS = /[\u0009|\u0020-\u007E|\u0080-\u00FF]/;
14965+
var HTTP_QUOTED_STRING_TOKENS = /[\u0009\u0020-\u007E\u0080-\u00FF]/;
1496814966
function dataURLProcessor(dataURL) {
1496914967
assert(dataURL.protocol === "data:");
1497014968
let input = URLSerializer(dataURL, true);
@@ -15726,9 +15724,12 @@ var require_util2 = __commonJS({
1572615724
var assert = require("node:assert");
1572715725
var { isUint8Array } = require("node:util/types");
1572815726
var { webidl } = require_webidl();
15727+
var supportedHashes = [];
1572915728
var crypto4;
1573015729
try {
1573115730
crypto4 = require("node:crypto");
15731+
const possibleRelevantHashes = ["sha256", "sha384", "sha512"];
15732+
supportedHashes = crypto4.getHashes().filter((hash) => possibleRelevantHashes.includes(hash));
1573215733
} catch {
1573315734
}
1573415735
function responseURL(response) {
@@ -16009,45 +16010,37 @@ var require_util2 = __commonJS({
1600916010
if (parsedMetadata.length === 0) {
1601016011
return true;
1601116012
}
16012-
const list = parsedMetadata.sort((c, d) => d.algo.localeCompare(c.algo));
16013-
const strongest = list[0].algo;
16014-
const metadata = list.filter((item) => item.algo === strongest);
16013+
const strongest = getStrongestMetadata(parsedMetadata);
16014+
const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest);
1601516015
for (const item of metadata) {
1601616016
const algorithm = item.algo;
16017-
let expectedValue = item.hash;
16018-
if (expectedValue.endsWith("==")) {
16019-
expectedValue = expectedValue.slice(0, -2);
16020-
}
16017+
const expectedValue = item.hash;
1602116018
let actualValue = crypto4.createHash(algorithm).update(bytes).digest("base64");
16022-
if (actualValue.endsWith("==")) {
16023-
actualValue = actualValue.slice(0, -2);
16024-
}
16025-
if (actualValue === expectedValue) {
16026-
return true;
16027-
}
16028-
let actualBase64URL = crypto4.createHash(algorithm).update(bytes).digest("base64url");
16029-
if (actualBase64URL.endsWith("==")) {
16030-
actualBase64URL = actualBase64URL.slice(0, -2);
16019+
if (actualValue[actualValue.length - 1] === "=") {
16020+
if (actualValue[actualValue.length - 2] === "=") {
16021+
actualValue = actualValue.slice(0, -2);
16022+
} else {
16023+
actualValue = actualValue.slice(0, -1);
16024+
}
1603116025
}
16032-
if (actualBase64URL === expectedValue) {
16026+
if (compareBase64Mixed(actualValue, expectedValue)) {
1603316027
return true;
1603416028
}
1603516029
}
1603616030
return false;
1603716031
}
16038-
var parseHashWithOptions = /(?<algo>sha256|sha384|sha512)-(?<hash>[A-Za-z0-9+/]+={0,2}(?=\s|$))( +[!-~]*)?/i;
16032+
var parseHashWithOptions = /(?<algo>sha256|sha384|sha512)-((?<hash>[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;
1603916033
function parseMetadata(metadata) {
1604016034
const result = [];
1604116035
let empty = true;
16042-
const supportedHashes = crypto4.getHashes();
1604316036
for (const token of metadata.split(" ")) {
1604416037
empty = false;
1604516038
const parsedToken = parseHashWithOptions.exec(token);
16046-
if (parsedToken === null || parsedToken.groups === void 0) {
16039+
if (parsedToken === null || parsedToken.groups === void 0 || parsedToken.groups.algo === void 0) {
1604716040
continue;
1604816041
}
16049-
const algorithm = parsedToken.groups.algo;
16050-
if (supportedHashes.includes(algorithm.toLowerCase())) {
16042+
const algorithm = parsedToken.groups.algo.toLowerCase();
16043+
if (supportedHashes.includes(algorithm)) {
1605116044
result.push(parsedToken.groups);
1605216045
}
1605316046
}
@@ -16056,6 +16049,51 @@ var require_util2 = __commonJS({
1605616049
}
1605716050
return result;
1605816051
}
16052+
function getStrongestMetadata(metadataList) {
16053+
let algorithm = metadataList[0].algo;
16054+
if (algorithm[3] === "5") {
16055+
return algorithm;
16056+
}
16057+
for (let i = 1; i < metadataList.length; ++i) {
16058+
const metadata = metadataList[i];
16059+
if (metadata.algo[3] === "5") {
16060+
algorithm = "sha512";
16061+
break;
16062+
} else if (algorithm[3] === "3") {
16063+
continue;
16064+
} else if (metadata.algo[3] === "3") {
16065+
algorithm = "sha384";
16066+
}
16067+
}
16068+
return algorithm;
16069+
}
16070+
function filterMetadataListByAlgorithm(metadataList, algorithm) {
16071+
if (metadataList.length === 1) {
16072+
return metadataList;
16073+
}
16074+
let pos = 0;
16075+
for (let i = 0; i < metadataList.length; ++i) {
16076+
if (metadataList[i].algo === algorithm) {
16077+
metadataList[pos++] = metadataList[i];
16078+
}
16079+
}
16080+
metadataList.length = pos;
16081+
return metadataList;
16082+
}
16083+
function compareBase64Mixed(actualValue, expectedValue) {
16084+
if (actualValue.length !== expectedValue.length) {
16085+
return false;
16086+
}
16087+
for (let i = 0; i < actualValue.length; ++i) {
16088+
if (actualValue[i] !== expectedValue[i]) {
16089+
if (actualValue[i] === "+" && expectedValue[i] === "-" || actualValue[i] === "/" && expectedValue[i] === "_") {
16090+
continue;
16091+
}
16092+
return false;
16093+
}
16094+
}
16095+
return true;
16096+
}
1605916097
function tryUpgradeRequestToAPotentiallyTrustworthyURL(request2) {
1606016098
}
1606116099
function sameOrigin(A, B) {
@@ -18499,6 +18537,14 @@ var require_client_h2 = __commonJS({
1849918537
HTTP2_HEADER_STATUS
1850018538
}
1850118539
} = http2;
18540+
function parseH2Headers(headers) {
18541+
headers = Object.entries(headers).flat(2);
18542+
const result = [];
18543+
for (const header of headers) {
18544+
result.push(Buffer.from(header));
18545+
}
18546+
return result;
18547+
}
1850218548
async function connectH2(client, socket) {
1850318549
client[kSocket] = socket;
1850418550
if (!h2ExperimentalWarned) {
@@ -18734,7 +18780,13 @@ var require_client_h2 = __commonJS({
1873418780
stream.once("response", (headers2) => {
1873518781
const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers2;
1873618782
request2.onResponseStarted();
18737-
if (request2.onHeaders(Number(statusCode), realHeaders, stream.resume.bind(stream), "") === false) {
18783+
if (request2.aborted || request2.completed) {
18784+
const err = new RequestAbortedError();
18785+
errorRequest(client, request2, err);
18786+
util.destroy(stream, err);
18787+
return;
18788+
}
18789+
if (request2.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), "") === false) {
1873818790
stream.pause();
1873918791
}
1874018792
stream.on("data", (chunk) => {
@@ -19054,9 +19106,9 @@ var require_redirect_handler = __commonJS({
1905419106
if (removeContent && util.headerNameToString(header).startsWith("content-")) {
1905519107
return true;
1905619108
}
19057-
if (unknownOrigin && (header.length === 13 || header.length === 6)) {
19109+
if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) {
1905819110
const name = util.headerNameToString(header);
19059-
return name === "authorization" || name === "cookie";
19111+
return name === "authorization" || name === "cookie" || name === "proxy-authorization";
1906019112
}
1906119113
return false;
1906219114
}
@@ -22379,6 +22431,8 @@ var require_pending_interceptors_formatter = __commonJS({
2237922431
"use strict";
2238022432
var { Transform } = require("node:stream");
2238122433
var { Console } = require("node:console");
22434+
var PERSISTENT = process.versions.icu ? "\u2705" : "Y ";
22435+
var NOT_PERSISTENT = process.versions.icu ? "\u274C" : "N ";
2238222436
module2.exports = class PendingInterceptorsFormatter {
2238322437
constructor({ disableColors } = {}) {
2238422438
this.transform = new Transform({
@@ -22400,7 +22454,7 @@ var require_pending_interceptors_formatter = __commonJS({
2240022454
Origin: origin,
2240122455
Path: path,
2240222456
"Status code": statusCode,
22403-
Persistent: persist ? "\u2705" : "\u274C",
22457+
Persistent: persist ? PERSISTENT : NOT_PERSISTENT,
2240422458
Invocations: timesInvoked,
2240522459
Remaining: persist ? Infinity : times - timesInvoked
2240622460
})
@@ -22670,7 +22724,7 @@ var require_headers = __commonJS({
2267022724
} = require_util2();
2267122725
var { webidl } = require_webidl();
2267222726
var assert = require("node:assert");
22673-
var util = require("util");
22727+
var util = require("node:util");
2267422728
var kHeadersMap = Symbol("headers map");
2267522729
var kHeadersSortedMap = Symbol("headers map sorted");
2267622730
function isHTTPWhiteSpaceCharCode(code) {
@@ -25161,24 +25215,6 @@ var require_fetch = __commonJS({
2516125215
codings = contentEncoding.toLowerCase().split(",").map((x) => x.trim());
2516225216
}
2516325217
location = headersList.get("location", true);
25164-
} else {
25165-
const keys = Object.keys(rawHeaders);
25166-
for (let i = 0; i < keys.length; ++i) {
25167-
const key = keys[i];
25168-
const value = rawHeaders[key];
25169-
if (key === "set-cookie") {
25170-
for (let j = 0; j < value.length; ++j) {
25171-
headersList.append(key, value[j], true);
25172-
}
25173-
} else {
25174-
headersList.append(key, value, true);
25175-
}
25176-
}
25177-
const contentEncoding = rawHeaders["content-encoding"];
25178-
if (contentEncoding) {
25179-
codings = contentEncoding.toLowerCase().split(",").map((x) => x.trim()).reverse();
25180-
}
25181-
location = rawHeaders.location;
2518225218
}
2518325219
this.body = new Readable({ read: resume });
2518425220
const decoders = [];

0 commit comments

Comments
 (0)