Browse Source

Merge branch 'rest-content-type' of git://github.com/dvv/cowboy

Loïc Hoguin 12 years ago
parent
commit
1eb2bda304
2 changed files with 17 additions and 3 deletions
  1. 6 3
      src/cowboy_rest.erl
  2. 11 0
      test/http_SUITE.erl

+ 6 - 3
src/cowboy_rest.erl

@@ -776,9 +776,12 @@ accept_resource(Req, State, OnTrue) ->
 		{CTA, Req2, HandlerState} ->
 		    CTA2 = [normalize_content_types(P) || P <- CTA],
 			State2 = State#state{handler_state=HandlerState},
-			{ok, ContentType, Req3}
-				= cowboy_req:parse_header(<<"content-type">>, Req2),
-			choose_content_type(Req3, State2, OnTrue, ContentType, CTA2)
+			case cowboy_req:parse_header(<<"content-type">>, Req2) of
+				{ok, ContentType, Req3} ->
+					choose_content_type(Req3, State2, OnTrue, ContentType, CTA2);
+				{error, badarg} ->
+					respond(Req2, State2, 415)
+			end
 	end.
 
 %% The special content type '*' will always match. It can be used as a

+ 11 - 0
test/http_SUITE.erl

@@ -54,6 +54,7 @@
 -export([pipeline/1]).
 -export([pipeline_long_polling/1]).
 -export([rest_bad_accept/1]).
+-export([rest_bad_content_type/1]).
 -export([rest_expires/1]).
 -export([rest_keepalive/1]).
 -export([rest_keepalive_post/1]).
@@ -123,6 +124,7 @@ groups() ->
 		pipeline,
 		pipeline_long_polling,
 		rest_bad_accept,
+		rest_bad_content_type,
 		rest_expires,
 		rest_keepalive,
 		rest_keepalive_post,
@@ -355,6 +357,7 @@ init_dispatch(Config) ->
 			{"/echo/body_qs", http_handler_body_qs, []},
 			{"/param_all", rest_param_all, []},
 			{"/bad_accept", rest_simple_resource, []},
+			{"/bad_content_type", rest_patch_resource, []},
 			{"/simple", rest_simple_resource, []},
 			{"/forbidden_post", rest_forbidden_resource, [true]},
 			{"/simple_post", rest_forbidden_resource, [false]},
@@ -879,6 +882,14 @@ rest_bad_accept(Config) ->
 		Client),
 	{ok, 400, _, _} = cowboy_client:response(Client2).
 
+rest_bad_content_type(Config) ->
+	Client = ?config(client, Config),
+	{ok, Client2} = cowboy_client:request(<<"PATCH">>,
+		build_url("/bad_content_type", Config),
+		[{<<"content-type">>, <<"text/plain, text/html">>}],
+		<<"Whatever">>, Client),
+	{ok, 415, _, _} = cowboy_client:response(Client2).
+
 rest_expires(Config) ->
 	Client = ?config(client, Config),
 	{ok, Client2} = cowboy_client:request(<<"GET">>,