<br><br><div class="gmail_quote">On Tue, Jan 29, 2013 at 5:31 AM,  <span dir="ltr"><<a href="mailto:arif@riseup.net" target="_blank">arif@riseup.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
In R15B (erts-5.9) erlang:decode_packet/3 seems to be making an error<br>
parsing the Sec-WebSock-Accept header<br>
<br>
43> erlang:decode_packet(httph, <<"Sec-WebSocket-Accept:<br>
whatever\r\n\r\n">>, []).<br>
{ok,{http_header,0,"Sec-Websocket-Accept",undefined,<br>
                 "whatever"},<br>
    <<"\r\n">>}<br>
44><br>
<br>
One, it doesn't parse it as an atom, but as a string (but that much can be<br>
guessed from the documentation).<br></blockquote><div><br></div><div><br></div><div>Not all headers are parsed as atom, since doing that would allow a malicious client to send a wide variety of different headers that would eventually overflow the server's atom table and crash the server. Only common headers are parsed as atoms. Your code needs to be able to handle both atom and string results from decode_packet.</div>
<div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Two, the character S in WebSocket is parsed as lowercase instead of the<br>
uppercase it is in the parsed string.</blockquote><div><br></div><div><br></div><div>All HTTP headers are case-insensitive, so regardless of whether the headers contain SEC-WEBSOCKET-ACCEPT, sEC-wEbSoCkEt-AcCePt, or sec-websocket-accept as the header name, the parser produces Sec-Websocket-Accept:</div>
<div><br></div><div><div>1> erlang:decode_packet(httph, <<"SEC-WEBSOCKET-ACCEPT: whatever\r\n\r\n">>, []).</div><div>{ok,{http_header,0,"Sec-Websocket-Accept",undefined,</div><div>                 "whatever"},</div>
<div>    <<"\r\n">>}</div><div>2> erlang:decode_packet(httph, <<"sEC-wEbSoCkEt-AcCePt: whatever\r\n\r\n">>, []). </div><div>{ok,{http_header,0,"Sec-Websocket-Accept",undefined,</div>
<div>                 "whatever"},</div><div>    <<"\r\n">>}</div><div>3> erlang:decode_packet(httph, <<"sec-websocket-accept: whatever\r\n\r\n">>, []).</div><div>{ok,{http_header,0,"Sec-Websocket-Accept",undefined,</div>
<div>                 "whatever"},</div><div>    <<"\r\n">>}</div></div><div><br></div><div>So, neither of these issues is a bug IMO.</div><div><br></div><div>--steve</div></div>