[erlang-bugs] httpc_handler crash on malformed content-length

Ingela Anderton Andin Ingela.Anderton.Andin@REDACTED
Tue Feb 18 12:23:18 CET 2014


Hi!

Thank you for reporting this, I have created a ticket for fixing this.

Regards Ingela Erlang/OTP team Ericsson AB



On 02/18/2014 11:24 AM, Magnus Mueller wrote:
> Hello List.
>
> httpc_handler crashes hard when the supplied content-length is not parseable with list_to_integer.
>
> == Steps to reproduce ==
>
> 1) Use netcat to listen at a specific port (nc -l 30100)
> 2) Open an Erlang shell, start inets and perform a httpc request
> 3) After httpc sent its request, write the following into stdin of netcat (followed by two newlines):
>
>      HTTP/1.1 200 OK
>      content-length: die!
>
> === httpc in repl ===
>
> (repl_1@REDACTED)1> inets:start().
> ok
> (repl_1@REDACTED)2> httpc:request("http://localhost:30100").
> {error,
>      {badarg,
>          [{erlang,list_to_integer,["die!"],[]},
>           {httpc_handler,handle_http_body,2,
>               [{file,"httpc_handler.erl"},{line,1143}]},
>           {httpc_handler,handle_info,2,
>               [{file,"httpc_handler.erl"},{line,462}]},
>           {gen_server,handle_msg,5,
>               [{file,"gen_server.erl"},{line,604}]},
>           {proc_lib,init_p_do_apply,3,
>               [{file,"proc_lib.erl"},{line,239}]}]}}
> (repl_1@REDACTED)3>
> =ERROR REPORT==== 18-Feb-2014::11:16:52 ===
> ** Generic server <0.55.0> terminating
> ** Last message in was {tcp,#Port<0.3049>,<<"\n">>}
> ** When Server state == {state,
>                              {request,#Ref<0.0.0.90>,<0.41.0>,0,http,
>                                  {"localhost",30100},
>                                  "/",[],get,
>                                  {http_request_h,undefined,"keep-alive",
>                                      undefined,undefined,undefined,undefined,
>                                      undefined,undefined,undefined,undefined,
>                                      undefined,undefined,undefined,undefined,
>                                      undefined,undefined,"localhost:30100",
>                                      undefined,undefined,undefined,undefined,
>                                      undefined,undefined,undefined,undefined,
>                                      undefined,[],undefined,undefined,
>                                      undefined,undefined,"0",undefined,
>                                      undefined,undefined,undefined,undefined,
>                                      undefined,[]},
>                                  {[],[]},
>                                  {http_options,"HTTP/1.1",infinity,true,
>                                      {essl,[]},
>                                      undefined,false,infinity,false},
>                                  "http://localhost:30100",[],none,[],
>                                  1392718605743,undefined,undefined,false},
>                              {session,
>                                  {{"localhost",30100},<0.55.0>},
>                                  false,http,#Port<0.3049>,ip_comm,1,keep_alive,
>                                  false},
>                              undefined,undefined,undefined,
>                              {httpc_response,parse_headers,
>                                  [<<"\r\n">>,"!eid :htgnel-tnetnoc",[],nolimit,
>                                   ["OK",200,"HTTP/1.1"],
>                                   false]},
>                              {[],[]},
>                              {[],[]},
>                              new,[],nolimit,nolimit,
>                              {options,
>                                  {undefined,[]},
>                                  {undefined,[]},
>                                  0,2,5,120000,2,disabled,false,inet,default,
>                                  default,[]},
>                              {timers,[],undefined},
>                              httpc_manager,inactive}
> ** Reason for termination ==
> ** {badarg,[{erlang,list_to_integer,["die!"],[]},
>              {httpc_handler,handle_http_body,2,
>                             [{file,"httpc_handler.erl"},{line,1143}]},
>              {httpc_handler,handle_info,2,
>                             [{file,"httpc_handler.erl"},{line,462}]},
>              {gen_server,handle_msg,5,[{file,"gen_server.erl"},{line,604}]},
>              {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,239}]}]}
> _______________________________________________
> erlang-bugs mailing list
> erlang-bugs@REDACTED
> http://erlang.org/mailman/listinfo/erlang-bugs
>




More information about the erlang-bugs mailing list