From 5dc08a53dee5af669729b69900c08779d0daba1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Wed, 11 Jul 2012 15:13:37 +0200 Subject: Fix a rare crash while reading the body in HTTP POST Only occured when the client closed the connection before finishing the upload. --- src/bullet_handler.erl | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/bullet_handler.erl b/src/bullet_handler.erl index f348b5b..e8fec71 100644 --- a/src/bullet_handler.erl +++ b/src/bullet_handler.erl @@ -73,17 +73,20 @@ handle(Req, State) -> {Method, Req2} = cowboy_http_req:method(Req), handle(Req2, State, Method). -handle(_Req, _State, 'GET') -> - exit(badarg); handle(Req, State=#state{handler=Handler, handler_state=HandlerState}, 'POST') -> - {ok, Data, Req2} = cowboy_http_req:body(Req), - case Handler:stream(Data, Req2, HandlerState) of - {ok, Req3, HandlerState2} -> - {ok, Req3, State#state{handler_state=HandlerState2}}; - {reply, Reply, Req3, HandlerState2} -> - {ok, Req4} = cowboy_http_req:reply(200, [], Reply, Req3), - {ok, Req4, State#state{handler_state=HandlerState2}} + case cowboy_http_req:body(Req) of + {ok, Data, Req2} -> + case Handler:stream(Data, Req2, HandlerState) of + {ok, Req3, HandlerState2} -> + {ok, Req3, State#state{handler_state=HandlerState2}}; + {reply, Reply, Req3, HandlerState2} -> + {ok, Req4} = cowboy_http_req:reply(200, [], Reply, Req3), + {ok, Req4, State#state{handler_state=HandlerState2}} + end; + {error, _} -> + %% An error occurred, stop there. + {ok, Req, State} end. info(Message, Req, -- cgit v1.2.3