From 4c346a42a4ad888329ca3f48fc3ffe3cefa44789 Mon Sep 17 00:00:00 2001 From: samsamtrum Date: Sun, 31 May 2026 18:00:20 +0700 Subject: [PATCH] Fix base64url character replacement --- packages/uint8arrays/src/lib/uint8arrays.spec.ts | 8 ++++++++ packages/uint8arrays/src/lib/uint8arrays.ts | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/uint8arrays/src/lib/uint8arrays.spec.ts b/packages/uint8arrays/src/lib/uint8arrays.spec.ts index f00907917d..329c9c169f 100644 --- a/packages/uint8arrays/src/lib/uint8arrays.spec.ts +++ b/packages/uint8arrays/src/lib/uint8arrays.spec.ts @@ -187,4 +187,12 @@ describe('turn to base64urlpad', () => { expect(base64).toBe('SGVsbG8sIFdvcmxkIQ'); }); + + it('should replace every base64url character when encoding and decoding', () => { + const bytes = new Uint8Array([251, 239, 255, 251, 239, 255]); + const encoded = uint8arrayToString(bytes, 'base64urlpad'); + + expect(encoded).toBe('--__--__'); + expect(uint8arrayFromString(encoded, 'base64urlpad')).toEqual(bytes); + }); }); diff --git a/packages/uint8arrays/src/lib/uint8arrays.ts b/packages/uint8arrays/src/lib/uint8arrays.ts index 186111648d..3b755d4965 100644 --- a/packages/uint8arrays/src/lib/uint8arrays.ts +++ b/packages/uint8arrays/src/lib/uint8arrays.ts @@ -121,13 +121,13 @@ export function uint8ArrayToBase64(uint8Array: Uint8Array): string { function base64UrlPadToBase64(base64UrlPadStr: string): string { return ( - base64UrlPadStr.replace('-', '+').replace('_', '/') + + base64UrlPadStr.replace(/-/g, '+').replace(/_/g, '/') + '='.repeat((4 - (base64UrlPadStr.length % 4)) % 4) ); } function base64ToBase64UrlPad(base64Str: string): string { - return base64Str.replace('+', '-').replace('/', '_').replace(/=+$/, ''); + return base64Str.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); } export function uint8arrayFromString(