ruby / net-http

Net::HTTP provides a rich library which can be used to build HTTP user-agents.
Other
101 stars 66 forks source link

Response to interrupted request returned for next one, after timeout interrupts reading the socket #157

Open DanielHeath opened 1 year ago

DanielHeath commented 1 year ago

In ruby-3.2.2/lib/ruby/3.2.0/net/http.rb line 1855, a request is written to the socket; on line 1862 the response is read from the socket.

However, if a Timeout::Error occurs before the response arrives, the response is not read from the socket.

If the client is re-used, this causes the next request to read the response from the interrupted request (since it's queued on the socket and nothing else has read it).

DanielHeath commented 1 year ago

Added a test highlighting this bug to my fork

DanielHeath commented 1 year ago

After more digging, I've found that timeout 0.4.0 fixes this issue.

https://github.com/ruby/timeout/pull/30 indicates that you can't rely on catch, if Kernel.catch has been called.