From 47ce8a968844eeb061d95eb4533e2dbf807ec079 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gordan=20Neki=C4=87?= <48327736+gnekich@users.noreply.github.com> Date: Mon, 22 Dec 2025 19:50:36 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20:bug:=20fix=20the=20utf8ToBase64=5F=20im?= =?UTF-8?q?plementation=20to=20mitigate=20maximum=20s=E2=80=A6=20(#32817)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: :bug: fix the utf8ToBase64_ implementation to mitigate maximum stack error for big scriptlets, resolves issue 51448 * docs: :memo: update comment --- .../brave_adblock_browser_proxy.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/browser/resources/settings/default_brave_shields_page/brave_adblock_browser_proxy.ts b/browser/resources/settings/default_brave_shields_page/brave_adblock_browser_proxy.ts index 7922cfe6234..7fab1fe0d7f 100644 --- a/browser/resources/settings/default_brave_shields_page/brave_adblock_browser_proxy.ts +++ b/browser/resources/settings/default_brave_shields_page/brave_adblock_browser_proxy.ts @@ -146,7 +146,15 @@ export class BraveAdblockBrowserProxyImpl implements BraveAdblockBrowserProxy { private utf8ToBase64_ (str: string) { const uint8Array = new TextEncoder().encode(str) - const base64String = btoa(String.fromCharCode(...uint8Array)) + let binaryString = '' + const chunkSize = 1024 + for (let i = 0; i < uint8Array.length; i += chunkSize) { + const chunk = uint8Array.slice(i, i + chunkSize) + binaryString += String.fromCharCode(...chunk) + } + const base64String = btoa(binaryString) + // Replace with uint8Array.toBase64() when TypeScript adds support for + // toBase64 method. return base64String }