Explorar o código

fix(jsonl): reject negative-zero timestamps

Hypatia May hai 2 meses
pai
achega
352934b9ec

+ 1 - 0
packages/session-persistence/session-persistence-jsonl/src/format.ts

@@ -86,6 +86,7 @@ function isHeaderLine(value: unknown): value is HeaderLine {
     && typeof (value as { createdAt?: unknown }).createdAt === 'number'
     && Number.isSafeInteger((value as { createdAt: number }).createdAt)
     && (value as { createdAt: number }).createdAt >= 0
+    && !Object.is((value as { createdAt: number }).createdAt, -0)
     && typeof (value as { delegationDepth?: unknown }).delegationDepth === 'number'
     && Number.isSafeInteger((value as { delegationDepth: number }).delegationDepth)
     && (value as { delegationDepth: number }).delegationDepth >= 0

+ 5 - 0
packages/session-persistence/session-persistence-jsonl/tests/jsonl.spec.ts

@@ -574,6 +574,11 @@ describe('SessionPersistenceJsonl: scanLog unit', () => {
     expect(() => scanLog(Buffer.from(log))).toThrow(/session header/)
   })
 
+  it('rejects a session header with negative-zero createdAt', () => {
+    const log = '{"type":"session","version":0,"id":"invalid-created-at","createdAt":-0,"delegationDepth":0}\n'
+    expect(() => scanLog(Buffer.from(log))).toThrow(/session header/)
+  })
+
   it.each([
     ['missing', undefined],
     ['a string', '1'],