httpotion icon indicating copy to clipboard operation
httpotion copied to clipboard

Crash on 304

Open Hugo-Hache opened this issue 5 years ago • 1 comments

When receiving a 304, the library tries to request the URL of the Location header

https://github.com/myfreeweb/httpotion/blob/9172d089cd1d47cdd772d97db750882cc741055f/lib/httpotion.ex#L200-L202 https://github.com/myfreeweb/httpotion/blob/9172d089cd1d47cdd772d97db750882cc741055f/lib/httpotion.ex#L243-L247

As the Location header is not set on a HTTP 304, normalize_location crashes with the following stacktrace:

FunctionClauseError: no function clause matching in URI.parse/1
URI.parse/1 (elixir) arguments
--
0 | "nil"

File lib/uri.ex line 539 in URI.merge/2 (elixir)
File lib/httpotion.ex line 453 in HTTPotion.normalize_location/2 (httpotion)
File lib/httpotion.ex line 453 in HTTPotion.request/3 (httpotion)

To get some context, if needed, I'm using HTTPotion in a proxy, https://github.com/applidium/pericles/blob/master/proxy/lib/pericles_proxy/runner.ex

As a quick fix I created this fork https://github.com/Hugo-Hache/httpotion/commit/8cf2becddd5815ebc60380187c634f38a4a30f3e I'll be happy to create a pull request from it if it looks ok for you.

Hugo-Hache avatar Apr 12 '19 12:04 Hugo-Hache

Good catch. I'm not sure how 304 got there. I think we should not crash even on a 302 with no Location, I'll add handling for that

valpackett avatar Apr 12 '19 12:04 valpackett