http://bugs.winehq.org/show_bug.cgi?id=17914
Summary: Using \n rather then \r\n breaks HTTP RFC with HTTP_AddRequestHeadersW Product: Wine Version: 1.1.18 Platform: Other OS/Version: other Status: UNCONFIRMED Severity: minor Priority: P2 Component: wininet AssignedTo: wine-bugs@winehq.org ReportedBy: dn@devicenull.org
Half-Life 2 (and possibly other apps) uses \n characters to indicate a new line when dealing with the InternetOpenUrl function. Windows accepts this fine, and ends up with the correct output. Wine on the other hand blindly copies this into the value as it parses the line, creating an invalid HTTP request.
The call looks like this: trace:wininet:INTERNET_InternetOpenUrlW (0x1279fda0, L"http://192.168.3.89/127.0.0.1/maps/de_dust3.bsp", L"Referer: hl2://127.0.0.1:27015\n", 00000024, 84400000, 0c360e00)
the problem appears a bit later: trace:wininet:HTTP_HttpAddRequestHeadersW copying header: L"Referer: hl2://127.0.0.1:27015\n\0000" trace:wininet:HTTP_HttpAddRequestHeadersW interpreting header L"Referer: hl2://127.0.0.1:27015\n" trace:wininet:HTTP_InterpretHttpHeader field(L"Referer") Value(L"hl2://127.0.0.1:27015\n")
note the \n on the end of the value. This ends up being copied into the final HTTP request, and breaking the HTTP RFC.
The fix seems to be to just accept \n as well as \r\n sequences in HTTP_InterpretHttpHeader