From 34e0486478811ef2213dd309cecd313e0161dfc4 Mon Sep 17 00:00:00 2001 From: Josh Larson Date: Mon, 29 Sep 2025 13:54:13 -0500 Subject: [PATCH] Check for undefined peekCommand queue entry --- packages/memcache-client/src/lib/connection.ts | 18 ++++++++++-------- .../src/test/spec/connection.spec.ts | 12 ++++++++++++ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/packages/memcache-client/src/lib/connection.ts b/packages/memcache-client/src/lib/connection.ts index a3588bd..b8a0e74 100644 --- a/packages/memcache-client/src/lib/connection.ts +++ b/packages/memcache-client/src/lib/connection.ts @@ -225,14 +225,16 @@ export class MemcacheConnection extends MemcacheParser { receiveResult(pending: ParserPendingData): void { if (this.isReady()) { const retrieve = this.peekCommand(); - try { - retrieve.results[pending.cmdTokens[1]] = { - tokens: pending.cmdTokens, - casUniq: pending.cmdTokens[4], - value: this.client?._unpackValue(pending as unknown as PackedData), - }; - } catch (err) { - retrieve.error = err as Error; + if (retrieve) { + try { + retrieve.results[pending.cmdTokens[1]] = { + tokens: pending.cmdTokens, + casUniq: pending.cmdTokens[4], + value: this.client?._unpackValue(pending as unknown as PackedData), + }; + } catch (err) { + retrieve.error = err as Error; + } } } delete pending.data; diff --git a/packages/memcache-client/src/test/spec/connection.spec.ts b/packages/memcache-client/src/test/spec/connection.spec.ts index 3ff77c8..6013158 100644 --- a/packages/memcache-client/src/test/spec/connection.spec.ts +++ b/packages/memcache-client/src/test/spec/connection.spec.ts @@ -119,4 +119,16 @@ describe.only("MemcacheConnection", function () { ); x._shutdown("test"); }); + + it("receiveResult should not crash when peekCommand returns undefined", () => { + const x = new MemcacheConnection({ socketID: 1 } as unknown as MemcacheClient); + x._status = Status.READY; + x.peekCommand = () => undefined as any; + expect(() => { + x.receiveResult({ + cmdTokens: ["VALUE", "testkey", "0", "5"], + key: "testkey", + }); + }).not.toThrow(); + }); });