[erlang-bugs] http client bug while getting zero-length response

Igor Goryachev goryachev@REDACTED
Tue Feb 27 15:43:04 CET 2007


Hello everyone.

I've just found a bug in inets http-client (or somewhere in chunk decode
routines). It is reproduced when a remote http-server sends zero-length
response:


goryachev@REDACTED:~% erl
Erlang (BEAM) emulator version 5.5.3 [source] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.5.3  (abort with ^G)
1> http:request(get, {"http://www.goryachev.org/", []}, [], []).

=INFO REPORT==== 27-Feb-2007::17:04:20 ===
The inets application was not started. Has now been started as a temporary application.
{error,session_remotly_closed}
2> 
=ERROR REPORT==== 27-Feb-2007::17:05:36 ===
** Generic server <0.41.0> terminating 
** Last message in was {tcp_closed,#Port<0.114>}
** When Server state == {state,
                         {request,
                          #Ref<0.0.0.68>,
                          <0.29.0>,
                          0,
                          http,
                          {"www.goryachev.org",80},
                          "/",
                          [],
                          get,
                          {http_request_h,
                           undefined,
                           "keep-alive",
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           "www.goryachev.org",
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           [],
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           "0",
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           undefined,
                           []},
                          {[],[]},
                          {http_options,infinity,true,[],undefined,false},
                          "http://www.goryachev.org/",
                          [],
                          none,
                          []},
                         {tcp_session,
                          {{"www.goryachev.org",80},<0.41.0>},
                          false,
                          http,
                          #Port<0.114>,
                          1},
                         {"HTTP/1.1",200,"OK"},
                         {http_response_h,
                          undefined,
                          "keep-alive",
                          "Tue, 27 Feb 2007 14:03:13 GMT",
                          undefined,
                          undefined,
                          "chunked",
                          undefined,
                          undefined,
                          undefined,
                          undefined,
                          undefined,
                          undefined,
                          undefined,
                          undefined,
                          undefined,
                          "nginx/0.5.11",
                          "Accept-Encoding, Cookie",
                          undefined,
                          undefined,
                          undefined,
                          undefined,
                          "-1",
                          undefined,
                          undefined,
                          undefined,
                          "text/html; charset=utf-8",
                          undefined,
                          undefined,
                          []},
                         undefined,
                         {http_chunk,
                          decode_data,
                          [0,
                           <<"\r\n">>,
                           {nolimit,
                            <<>>,
                            0,
                            nolimit,
                            {200,
                             {request,
                              #Ref<0.0.0.68>,
                              <0.29.0>,
                              0,
                              http,
                              {"www.goryachev.org",80},
                              "/",
                              [],
                              get,
                              {http_request_h,
                               undefined,
                               "keep-alive",
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               "www.goryachev.org",
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               [],
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               "0",
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               undefined,
                               []},
                              {[],[]},
                              {http_options,infinity,true,[],undefined,false},
                              "http://www.goryachev.org/",
                              [],
                              none,
                              []}}}]},
                         {[],[]},
                         new,
                         [],
                         nolimit,
                         nolimit,
                         {options,{undefined,[]},0,2,2,disabled,enabled,false},
                         {timers,[],undefined}}
** Reason for termination == 
** session_remotly_closed


This behaviour could be worked around using timeout param (i.e. {timeout, 10000}).



-- 
Igor Goryachev
Yandex development team.



More information about the erlang-bugs mailing list