aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2013-01-30 14:37:14 +0100
committerSverker Eriksson <[email protected]>2013-02-06 15:24:50 +0100
commit92ffb924556e43e3037273754ea94aabc72638a6 (patch)
treeb59f45818c2d9dbdc8230c02d21e0df3acb6ccef
parent68b804f34d4ec420d86953e3f519179a40fbee8f (diff)
downloadotp-92ffb924556e43e3037273754ea94aabc72638a6.tar.gz
otp-92ffb924556e43e3037273754ea94aabc72638a6.tar.bz2
otp-92ffb924556e43e3037273754ea94aabc72638a6.zip
erts: Increase length of well formed header names from {packet,http}
To ease matching of unrecognized header field names we convert them from case insensitive to the format Sec-Websocket-Version with capital letters only first and after hyphens. Earlier only header names up to 20 characters were converted to this format due to internal buffer limitation. Raising this limit to 50 is a pragmatic solution for existing long header names such as Sec-Websocket-Version, while valid header names longer than 50 characters are not very probable.
-rw-r--r--erts/doc/src/erlang.xml4
-rw-r--r--erts/emulator/beam/packet_parser.c2
-rw-r--r--erts/emulator/test/decode_packet_SUITE.erl3
3 files changed, 7 insertions, 2 deletions
diff --git a/erts/doc/src/erlang.xml b/erts/doc/src/erlang.xml
index b336a135e7..7804a7498e 100644
--- a/erts/doc/src/erlang.xml
+++ b/erts/doc/src/erlang.xml
@@ -592,7 +592,9 @@ false</pre>
request, a response, a header or an end of header
mark. Invalid lines are returned as <c><anno>HttpError</anno></c>.</p>
<p>Recognized request methods and header fields are returned as atoms.
- Others are returned as strings.</p>
+ Others are returned as strings. Strings of unrecognized header fields
+ are formatted with only capital letters first and after hyphen characters
+ (like <c>"Sec-Websocket-Key"</c>).</p>
<p>The protocol type <c>http</c> should only be used for
the first line when a <c><anno>HttpRequest</anno></c> or a
<c><anno>HttpResponse</anno></c> is expected. The following calls
diff --git a/erts/emulator/beam/packet_parser.c b/erts/emulator/beam/packet_parser.c
index 1e301e3593..7c9b2d444a 100644
--- a/erts/emulator/beam/packet_parser.c
+++ b/erts/emulator/beam/packet_parser.c
@@ -67,7 +67,7 @@ static int my_strncasecmp(const char *s1, const char *s2, size_t n)
#define HTTP_HDR_HASH_SIZE 53
#define HTTP_METH_HASH_SIZE 13
-#define HTTP_MAX_NAME_LEN 20
+#define HTTP_MAX_NAME_LEN 50
static char tspecial[128];
diff --git a/erts/emulator/test/decode_packet_SUITE.erl b/erts/emulator/test/decode_packet_SUITE.erl
index 4acbe8c6e0..1714551e15 100644
--- a/erts/emulator/test/decode_packet_SUITE.erl
+++ b/erts/emulator/test/decode_packet_SUITE.erl
@@ -403,6 +403,9 @@ http_request(Msg) ->
{"Other-Field: with some text\r\n",
{http_header,0, "Other-Field" ,undefined, "with some text"},
{http_header,0,<<"Other-Field">>,undefined,<<"with some text">>}},
+ {"Make-sure-a-LONG-HEaDer-fIeLd-is-fORMATTED-NicelY: with some text\r\n",
+ {http_header,0, "Make-Sure-A-Long-Header-Field-Is-Formatted-Nicely" ,undefined, "with some text"},
+ {http_header,0,<<"Make-Sure-A-Long-Header-Field-Is-Formatted-Nicely">>,undefined,<<"with some text">>}},
{"Multi-Line: Once upon a time in a land far far away,\r\n"
" there lived a princess imprisoned in the highest tower\r\n"
" of the most haunted castle.\r\n",