Skip to content

Commit b22b281

Browse files
author
Sahar Shemesh
committed
fix: ignore invalid json messages only
1 parent c5226d8 commit b22b281

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

src/shared/stdio.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { ZodError } from 'zod';
21
import { JSONRPCMessage, JSONRPCMessageSchema } from '../types.js';
32

43
/**
@@ -35,8 +34,8 @@ export function deserializeMessage(line: string): JSONRPCMessage | null {
3534
try {
3635
return JSONRPCMessageSchema.parse(JSON.parse(line));
3736
} catch (error: unknown) {
38-
// When Non JSONRPC message is received (parsing error or schema validation error), return null
39-
if (error instanceof ZodError || error instanceof SyntaxError) {
37+
// When non-JSON messages are received, we simply ignore them.
38+
if (error instanceof SyntaxError) {
4039
return null;
4140
}
4241
throw error;

test/shared/stdio.test.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { JSONRPCMessage } from '../../src/types.js';
22
import { ReadBuffer } from '../../src/shared/stdio.js';
3+
import { ZodError } from 'zod/v4';
34

45
const testMessage: JSONRPCMessage = {
56
jsonrpc: '2.0',
@@ -34,9 +35,16 @@ test('should be reusable after clearing', () => {
3435
expect(readBuffer.readMessage()).toEqual(testMessage);
3536
});
3637

37-
test('should override invalid messages and return null', () => {
38+
test('should override invalid json message and return null', () => {
3839
const readBuffer = new ReadBuffer();
3940

4041
readBuffer.append(Buffer.from('invalid message\n'));
4142
expect(readBuffer.readMessage()).toBeNull();
4243
});
44+
45+
test('should throw validation error on invalid JSON-RPC message', () => {
46+
const readBuffer = new ReadBuffer();
47+
const invalidJsonRpcMessage = '{"jsonrpc":"2.0","method":123}\n';
48+
readBuffer.append(Buffer.from(invalidJsonRpcMessage));
49+
expect(() => readBuffer.readMessage()).toThrowError(ZodError);
50+
});

0 commit comments

Comments
 (0)