This change updates the MCP client stdio JSON decoder to correctly handle both Unix (`\n`) and Windows (`\r\n`) line endings. Fixes #664 Co-authored-by: qysz <i_zf@qq.com>
This commit is contained in:
parent
2ce44d45e9
commit
1bec3c60a0
2 changed files with 7 additions and 1 deletions
|
|
@ -380,7 +380,8 @@ func newIOConn(rwc io.ReadWriteCloser) *ioConn {
|
||||||
var tr [1]byte
|
var tr [1]byte
|
||||||
if n, readErr := dec.Buffered().Read(tr[:]); n > 0 {
|
if n, readErr := dec.Buffered().Read(tr[:]); n > 0 {
|
||||||
// If read byte is not a newline, it is an error.
|
// If read byte is not a newline, it is an error.
|
||||||
if tr[0] != '\n' {
|
// Support both Unix (\n) and Windows (\r\n) line endings.
|
||||||
|
if tr[0] != '\n' && tr[0] != '\r' {
|
||||||
err = fmt.Errorf("invalid trailing data at the end of stream")
|
err = fmt.Errorf("invalid trailing data at the end of stream")
|
||||||
}
|
}
|
||||||
} else if readErr != nil && readErr != io.EOF {
|
} else if readErr != nil && readErr != io.EOF {
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,11 @@ func TestIOConnRead(t *testing.T) {
|
||||||
want: "",
|
want: "",
|
||||||
protocolVersion: "",
|
protocolVersion: "",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "windows newline at the end of first valid json input",
|
||||||
|
input: "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"test\",\"params\":{}}\r\n",
|
||||||
|
want: "",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "batching old protocol",
|
name: "batching old protocol",
|
||||||
input: `[{"jsonrpc":"2.0","id":1,"method":"test1"},{"jsonrpc":"2.0","id":2,"method":"test2"}]`,
|
input: `[{"jsonrpc":"2.0","id":1,"method":"test1"},{"jsonrpc":"2.0","id":2,"method":"test2"}]`,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue