From 574ea39f7e427332ecc1fc647cd9bd5ef0dcadf7 Mon Sep 17 00:00:00 2001 From: neverland Date: Thu, 22 Oct 2026 12:01:23 +0800 Subject: [PATCH] fix: remove unbounded Range parsing cache --- src/middleware.js | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/middleware.js b/src/middleware.js index 0823973..ee94635 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -137,19 +137,14 @@ const statuses = { 500: "Internal Server Error", }; -const parseRangeHeaders = memorize( - /** - * @param {string} value value - * @returns {import("range-parser").Result | import("range-parser").Ranges} ranges - */ - (value) => { - const [len, rangeHeader] = value.split("|"); - - return rangeParser(Number(len), rangeHeader, { - combine: true, - }); - }, -); +/** + * @param {number} size file size + * @param {string} rangeHeader Range header + * @returns {import("range-parser").Result | import("range-parser").Ranges} ranges + */ +function parseRangeHeaders(size, rangeHeader) { + return rangeParser(size, rangeHeader, { combine: true }); +} const getETag = memorize(() => etag); const getEscapeHtml = memorize(() => escapeHtml); @@ -692,7 +687,7 @@ function wrapper(context) { if (rangeHeader) { const parsedRanges = /** @type {import("range-parser").Ranges | import("range-parser").Result} */ - (parseRangeHeaders(`${size}|${rangeHeader}`)); + (parseRangeHeaders(size, rangeHeader)); if ( parsedRanges !== -2 && @@ -795,7 +790,7 @@ function wrapper(context) { if (rangeHeader) { let parsedRanges = /** @type {import("range-parser").Ranges | import("range-parser").Result | []} */ - (parseRangeHeaders(`${size}|${rangeHeader}`)); + (parseRangeHeaders(size, rangeHeader)); // If-Range support if (!isRangeFresh()) {