From 721ad842141f941648c0b19296663cdc9d21c52f Mon Sep 17 00:00:00 2001 From: Bob Burden III Date: Sat, 11 Oct 2025 13:12:19 -0400 Subject: [PATCH 1/2] add tests for multi-byte character buffer --- packages/client/lib/RESP/decoder.spec.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/client/lib/RESP/decoder.spec.ts b/packages/client/lib/RESP/decoder.spec.ts index c034815c9cd..43b08e35662 100644 --- a/packages/client/lib/RESP/decoder.spec.ts +++ b/packages/client/lib/RESP/decoder.spec.ts @@ -226,6 +226,11 @@ describe('RESP Decoder', () => { toWrite: Buffer.from('+OK\r\n'), replies: [Buffer.from('OK')] }); + + test("'é'", { + toWrite: Buffer.from('+é\r\n'), + replies: ['é'] + }); }); describe('BlobString', () => { @@ -251,6 +256,11 @@ describe('RESP Decoder', () => { toWrite: Buffer.from('$2\r\nOK\r\n'), replies: [Buffer.from('OK')] }); + + test("'é'", { + toWrite: Buffer.from('$2\r\né\r\n'), + replies: ['é'] + }); }); describe('VerbatimString', () => { @@ -279,6 +289,11 @@ describe('RESP Decoder', () => { toWrite: Buffer.from('=6\r\ntxt:OK\r\n'), replies: [Buffer.from('OK')] }); + + test("'é'", { + toWrite: Buffer.from('=6\r\ntxt:é\r\n'), + replies: ['é'] + }); }); test('SimpleError', { From 59fcd78b4515450c4bcbb145454cc5dcdbc3d46b Mon Sep 17 00:00:00 2001 From: Bob Burden III Date: Sat, 11 Oct 2025 13:13:18 -0400 Subject: [PATCH 2/2] support multi-byte characters when decoding buffers --- packages/client/lib/RESP/decoder.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/client/lib/RESP/decoder.ts b/packages/client/lib/RESP/decoder.ts index 2485ea23b37..3fb9a2af162 100644 --- a/packages/client/lib/RESP/decoder.ts +++ b/packages/client/lib/RESP/decoder.ts @@ -506,9 +506,8 @@ export class Decoder { } chunks.push(chunk.subarray(start, crlfIndex)); - return type === Buffer ? - Buffer.concat(chunks) : - chunks.join(''); + const buffer = Buffer.concat(chunks); + return type === Buffer ? buffer : buffer.toString(); } #decodeBlobString(type, chunk) { @@ -578,9 +577,8 @@ export class Decoder { chunks.push(chunk.subarray(this.#cursor, end)); this.#cursor = end + skip; - return type === Buffer ? - Buffer.concat(chunks) : - chunks.join(''); + const buffer = Buffer.concat(chunks); + return type === Buffer ? buffer : buffer.toString(); } #decodeBlobStringWithLength(length, type, chunk) {