Skip to content

Commit bc72835

Browse files
authored
mcp: fix potential nil-pointer dereference on message send (#1115)
1 parent cc4db25 commit bc72835

2 files changed

Lines changed: 12 additions & 7 deletions

File tree

mcp/streamable.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2403,13 +2403,12 @@ func (c *streamableClientConn) setMCPHeaders(req *http.Request, msg jsonrpc.Mess
24032403
}
24042404
}
24052405
}
2406-
switch {
2407-
case protocolVersionFromMessage(msg) != "":
2408-
req.Header.Set(protocolVersionHeader, protocolVersionFromMessage(msg))
2409-
case c.initializedResult != nil:
2406+
if pv := protocolVersionFromMessage(msg); pv != "" {
2407+
req.Header.Set(protocolVersionHeader, pv)
2408+
} else if pv := protocolVersionFromContext(req.Context()); pv != "" {
2409+
req.Header.Set(protocolVersionHeader, pv)
2410+
} else if c.initializedResult != nil {
24102411
req.Header.Set(protocolVersionHeader, c.initializedResult.ProtocolVersion)
2411-
case protocolVersionFromContext(req.Context()) != "":
2412-
req.Header.Set(protocolVersionHeader, protocolVersionFromContext(req.Context()))
24132412
}
24142413
if c.sessionID != "" {
24152414
req.Header.Set(sessionIDHeader, c.sessionID)
@@ -2424,7 +2423,7 @@ func (c *streamableClientConn) setMCPHeaders(req *http.Request, msg jsonrpc.Mess
24242423
// nil msg.
24252424
func protocolVersionFromMessage(msg jsonrpc.Message) string {
24262425
req, ok := msg.(*jsonrpc.Request)
2427-
if !ok {
2426+
if !ok || req == nil {
24282427
return ""
24292428
}
24302429
meta := extractRequestMeta(req.Params)

mcp/streamable_client_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1386,6 +1386,12 @@ func TestStreamableClientConnSetMCPHeaders_ProtocolVersion(t *testing.T) {
13861386
msg jsonrpc.Message
13871387
want string
13881388
}{
1389+
{
1390+
name: "nil checked",
1391+
initializedResult: nil,
1392+
msg: (*jsonrpc.Request)(nil),
1393+
want: "",
1394+
},
13891395
{
13901396
name: "message meta wins when initializedResult unset",
13911397
initializedResult: nil,

0 commit comments

Comments
 (0)