Nil pointer exception on net/http/transport

48 views
Skip to first unread message

GCP Eduard Voiculescu

unread,
Nov 28, 2025, 1:42:31 AM (7 days ago) Nov 28
to golang-nuts
Hi, I am using the OpenAI-go [lib](https://github.com/openai/openai-go/) to make calls to various LLM providers. In using the lib, I have stumbled on a very very rare use case of a panic in the transport.go. I know that I am using a lib that could be faulty, but I verified that I am using ONLY the http's package default client to make requests. No middleware, no custom client and no rountripper (other than the DefaultTransport being used --- which is the default in the net/http library).

```bash
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x7cbf8d]

goroutine 102401 [running]:
net/http.(*Transport).roundTrip(0x48c60c0, 0xc00098f180)
/usr/local/go/src/net/http/transport.go:707 +0xbed
net/http.(*Transport).RoundTrip(0xc00007d008?, 0x30ed220?)
/usr/local/go/src/net/http/roundtrip.go:33 +0x18
net/http.send(0xc00098f180, {0x30ed220, 0x48c60c0}, {0xc00abd2b01?, 0x480773?, 0x0?})
/usr/local/go/src/net/http/client.go:259 +0x5e2
net/http.(*Client).send(0x48fe060, 0xc00098f180, {0xc00d478740?, 0x3a?, 0x0?})
/usr/local/go/src/net/http/client.go:180 +0x91
net/http.(*Client).do(0x48fe060, 0xc00098f180)
/usr/local/go/src/net/http/client.go:729 +0x9c9
net/http.(*Client).Do(...)
/usr/local/go/src/net/http/client.go:587
github.com/openai/openai-go/v3/internal/requestconfig.(*RequestConfig).Execute(0xc00e21a8f0)
/root/.cache/go-build/github.com/openai/openai-go/v...@v3.4.0/internal/requestconfig/requestconfig.go:447 +0x845
github.com/openai/openai-go/v3/internal/requestconfig.ExecuteNewRequest({0x311c0b0?, 0xc00ba6bda8?}, {0x299dfd5?, 0xc00d4782e0?}, {0x29c1b35?, 0x4804e5?}, {0x296d2a0?, 0xc000143408?}, {0x22b6140, 0xc00007b8e0}, ...)
/root/.cache/go-build/github.com/openai/openai-go/v...@v3.4.0/internal/requestconfig/requestconfig.go:569 +0x9b
github.com/openai/openai-go/v3.(*ChatCompletionService).New(_, {_, _}, {{0xc00e93d908, 0x39, 0x4b}, {0xc000b0a020, 0x1a}, {0x0, 0x0, ...}, ...}, ...)
/root/.cache/go-build/github.com/openai/openai-go/v...@v3.4.0/chatcompletion.go:67 +0x2be
```

By checking the code at line 707, I see that it does `resp.Request  = origReq`. This would mean that `resp` is nil.

I have seen this happen in production in 2 different environments. I am also curious to know why the resp is not check to be nil in line 707? This assumes that either resp, err = pconn.alt.RoundTrip(req) or resp, err = pconn.roundTrip(treq) will ALWAYS return something (if err is not nil). But is possible to maybe in a rare race condition that it returns nil, nil? And that would make it the it's possible for the resp to be nil. 

Would a safety check there make any sense?

Brian Candler

unread,
Nov 28, 2025, 3:01:39 AM (7 days ago) Nov 28
to golang-nuts
Have you tried running the complete code under the race detector? The race could be in your own code, rather than the library itself (which is rather widely used, to say the least).


Reply all
Reply to author
Forward
0 new messages