Просмотр исходного кода

Do not attempt to skip whitespace after single value headers

We now expect Cowboy or any other application to remove it before
calling the header parse function.
Loïc Hoguin 10 лет назад
Родитель
Сommit
662db53814
1 измененных файлов с 11 добавлено и 23 удалено
  1. 11 23
      src/cow_http_hd.erl

+ 11 - 23
src/cow_http_hd.erl

@@ -1287,12 +1287,11 @@ prop_parse_content_length() ->
 parse_content_length_test_() ->
 	Tests = [
 		{<<"0">>, 0},
-		{<<"42    ">>, 42},
-		{<<"69\t">>, 69},
+		{<<"42">>, 42},
+		{<<"69">>, 69},
 		{<<"1337">>, 1337},
 		{<<"3495">>, 3495},
-		{<<"1234567890">>, 1234567890},
-		{<<"1234567890     ">>, 1234567890}
+		{<<"1234567890">>, 1234567890}
 	],
 	[{V, fun() -> R = parse_content_length(V) end} || {V, R} <- Tests].
 
@@ -1479,8 +1478,7 @@ parse_etag(<< $W, $/, $", R/bits >>) ->
 parse_etag(<< $", R/bits >>) ->
 	etag(R, strong, <<>>).
 
-etag(<< $", R/bits >>, Strength, Tag) ->
-	ws_end(R),
+etag(<< $" >>, Strength, Tag) ->
 	{Strength, Tag};
 etag(<< C, R/bits >>, Strength, Tag) when ?IS_ETAGC(C) ->
 	etag(R, Strength, << Tag/binary, C >>).
@@ -1534,15 +1532,13 @@ horse_parse_etag() ->
 %% @doc Parse the Expect header.
 
 -spec parse_expect(binary()) -> continue.
-parse_expect(<<"100-continue", Rest/bits >>) ->
-	ws_end(Rest),
+parse_expect(<<"100-continue">>) ->
 	continue;
-parse_expect(<<"100-", C, O, N, T, I, M, U, E, Rest/bits >>)
+parse_expect(<<"100-", C, O, N, T, I, M, U, E >>)
 	when C =:= $C orelse C =:= $c, O =:= $O orelse O =:= $o,
 		N =:= $N orelse N =:= $n, T =:= $T orelse T =:= $t,
 		I =:= $I orelse I =:= $i, M =:= $N orelse M =:= $n,
 		U =:= $U orelse U =:= $u, E =:= $E orelse E =:= $e ->
-	ws_end(Rest),
 	continue.
 
 -ifdef(TEST).
@@ -1562,8 +1558,7 @@ parse_expect_test_() ->
 		<<"100-continue">>,
 		<<"100-CONTINUE">>,
 		<<"100-Continue">>,
-		<<"100-CoNtInUe">>,
-		<<"100-continue    ">>
+		<<"100-CoNtInUe">>
 	],
 	[{V, fun() -> continue = parse_expect(V) end} || V <- Tests].
 
@@ -1780,11 +1775,10 @@ prop_parse_max_forwards() ->
 parse_max_forwards_test_() ->
 	Tests = [
 		{<<"0">>, 0},
-		{<<"42    ">>, 42},
-		{<<"69\t">>, 69},
+		{<<"42">>, 42},
+		{<<"69">>, 69},
 		{<<"1337">>, 1337},
-		{<<"1234567890">>, 1234567890},
-		{<<"1234567890     ">>, 1234567890}
+		{<<"1234567890">>, 1234567890}
 	],
 	[{V, fun() -> R = parse_max_forwards(V) end} || {V, R} <- Tests].
 
@@ -2148,7 +2142,7 @@ parse_upgrade_error_test_() ->
 %% Only return if the list is not empty.
 nonempty(L) when L =/= [] -> L.
 
-%% Parse a number optionally followed by whitespace.
+%% Parse a number.
 number(<< $0, R/bits >>, Acc) -> number(R, Acc * 10);
 number(<< $1, R/bits >>, Acc) -> number(R, Acc * 10 + 1);
 number(<< $2, R/bits >>, Acc) -> number(R, Acc * 10 + 2);
@@ -2159,14 +2153,8 @@ number(<< $6, R/bits >>, Acc) -> number(R, Acc * 10 + 6);
 number(<< $7, R/bits >>, Acc) -> number(R, Acc * 10 + 7);
 number(<< $8, R/bits >>, Acc) -> number(R, Acc * 10 + 8);
 number(<< $9, R/bits >>, Acc) -> number(R, Acc * 10 + 9);
-number(<< $\s, R/bits >>, Acc) -> ws_end(R), Acc;
-number(<< $\t, R/bits >>, Acc) -> ws_end(R), Acc;
 number(<<>>, Acc) -> Acc.
 
-ws_end(<< $\s, R/bits >>) -> ws_end(R);
-ws_end(<< $\t, R/bits >>) -> ws_end(R);
-ws_end(<<>>) -> ok.
-
 %% Parse a list of case insensitive tokens.
 token_ci_list(<<>>, Acc) -> lists:reverse(Acc);
 token_ci_list(<< $\s, R/bits >>, Acc) -> token_ci_list(R, Acc);