From: Austin English Subject: wininet: add some tests for whitespace handling Message-Id: Date: Thu, 17 Apr 2014 19:01:55 -0700 Based on a patch by Yann Droneaud , from https://bugs.winehq.org/show_bug.cgi?id=18779 Rebased and updated; passes wine and WTB: https://testbot.winehq.org/JobDetails.pl?Key=6394 win7/win8 failures were there before, tested here: https://testbot.winehq.org/JobDetails.pl?Key=6393 see also: https://test.winehq.org/data/b3c5d2ccda28b3163cd04baf36e285ff2b1b0057/win7_newtb-w7u/wininet:http.html -- -Austin
Based on a patch by Yann Droneaud <yann@droneaud.fr>, from https://bugs.winehq.org/show_bug.cgi?id=18779

Rebased and updated; passes wine and WTB:
https://testbot.winehq.org/JobDetails.pl?Key=6394

win7/win8 failures were there before, tested here:
https://testbot.winehq.org/JobDetails.pl?Key=6393

see also:
https://test.winehq.org/data/b3c5d2ccda28b3163cd04baf36e285ff2b1b0057/win7_newtb-w7u/wininet:http.html

--
-Austin
diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c index 70e82db..5ace396 100644 --- a/dlls/wininet/tests/http.c +++ b/dlls/wininet/tests/http.c @@ -1543,7 +1543,7 @@ static void HttpHeaders_test(void) HINTERNET hSession; HINTERNET hConnect; HINTERNET hRequest; - CHAR buffer[256]; + CHAR buffer[1024]; WCHAR wbuffer[256]; DWORD len = 256; DWORD oldlen; @@ -1861,6 +1861,143 @@ static void HttpHeaders_test(void) "header still present\n"); ok(GetLastError() == ERROR_HTTP_HEADER_NOT_FOUND, "got %u\n", GetLastError()); + /* Whitespace test */ + /* wininet.dll from IE8 accept setting headers with whitespace but won't let you retrieve them */ + ok(HttpAddRequestHeadersA(hRequest," Whitespace1:value",-1, HTTP_ADDREQ_FLAG_ADD_IF_NEW), "Failed to add header with white space\n"); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"Whitespace1"); + todo_wine ok(!HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer,&len,&index),"Able to query invalid header\n"); + index = 0; + len = sizeof(buffer); + strcpy(buffer," Whitespace1"); + ok(!HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer,&len,&index),"Aable to query invalid header\n"); + + ok(HttpAddRequestHeadersA(hRequest,"Whitespace2 :value",-1, HTTP_ADDREQ_FLAG_ADD_IF_NEW), "Failed to add header with white space\n"); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"Whitespace2"); + todo_wine ok(!HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer,&len,&index),"Able to query invalid header\n"); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"Whitespace2 "); + ok(!HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer,&len,&index),"Able to query invalid header\n"); + + /* space between header and value is harmless */ + ok(HttpAddRequestHeadersA(hRequest,"Whitespace3: value",-1, HTTP_ADDREQ_FLAG_ADD_IF_NEW), "Failed to add header with white space\n"); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"Whitespace3"); + ok(HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer,&len,&index),"Unable to query header\n"); + ok(index == 1, "Index was not incremented\n"); + ok(strcmp(buffer,"value")==0, "incorrect string was returned(%s)\n",buffer); + + /* tabulation are part of the value */ + ok(HttpAddRequestHeadersA(hRequest,"Whitespace4:\tvalue",-1, HTTP_ADDREQ_FLAG_ADD_IF_NEW), "Failed to add header with white space\n"); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"Whitespace4"); + ok(HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer,&len,&index),"Unable to query header\n"); + ok(index == 1, "Index was not incremented\n"); + todo_wine ok(strcmp(buffer,"value")==0 || broken(strcmp(buffer,"\tvalue")==0), "incorrect string was returned(%s)\n",buffer); + + /* space after value are part of the value */ + ok(HttpAddRequestHeadersA(hRequest,"Whitespace5:value ",-1, HTTP_ADDREQ_FLAG_ADD_IF_NEW), "Failed to add header with white space\n"); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"Whitespace5"); + ok(HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer,&len,&index),"Unable to query header\n"); + ok(index == 1, "Index was not incremented\n"); + todo_wine ok(strcmp(buffer,"value ")==0, "incorrect string was returned(%s)\n",buffer); + + /* \r are removed at end of value */ + ok(HttpAddRequestHeadersA(hRequest,"Whitespace6:value\r",-1, HTTP_ADDREQ_FLAG_ADD_IF_NEW), "Failed to add header with white space\n"); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"Whitespace6"); + ok(HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer,&len,&index),"Unable to query header\n"); + ok(index == 1, "Index was not incremented\n"); + ok(strcmp(buffer,"value")==0, "incorrect string was returned(%s)\n",buffer); + + /* wininet.dll from IE8 accept tab char in header, but you can't query them */ + ok(HttpAddRequestHeadersA(hRequest,"\tWhitespace7\t:\tvalue\t",-1, HTTP_ADDREQ_FLAG_ADD_IF_NEW), "Failed to add header with white space\n"); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"Whitespace7"); + ok(!HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &len, &index),"Able to query invalid header\n"); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"\tWhitespace7\t"); + todo_wine ok(!HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &len, &index),"Able to query invalid header\n"); + + /* broken header line, rejected by IE8 wininet.dll */ + todo_wine ok(!HttpAddRequestHeadersA(hRequest,"Whitespace8:\rvalue\r",-1, HTTP_ADDREQ_FLAG_ADD_IF_NEW), "Successfully added wrong header with white space\n"); + ok(!HttpAddRequestHeadersA(hRequest,"Whitespace9\r:value\r",-1, HTTP_ADDREQ_FLAG_ADD_IF_NEW), "Successfully added wrong header with white space\n"); + + /* multiple headers */ + ok(HttpAddRequestHeadersA(hRequest,"\rWhitespace100:value1\rWhitespace101:value2\r\n",-1, HTTP_ADDREQ_FLAG_ADD_IF_NEW), "Failed to add header with white space\n"); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"Whitespace100"); + ok(HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &len, &index),"Unable to query header\n"); + ok(index == 1, "Index was not incremented\n"); + ok(strcmp(buffer,"value1")==0, "incorrect string was returned(%s)\n",buffer); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"Whitespace101"); + ok(HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &len, &index),"Unable to query header\n"); + ok(index == 1, "Index was not incremented\n"); + ok(strcmp(buffer,"value2")==0, "incorrect string was returned(%s)\n",buffer); + + ok(HttpAddRequestHeadersA(hRequest,"\nWhitespace102:value1\nWhitespace103:value2\r",-1, HTTP_ADDREQ_FLAG_ADD_IF_NEW), "Failed to add header with white space\n"); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"Whitespace102"); + ok(HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &len, &index),"Unable to query header\n"); + ok(index == 1, "Index was not incremented\n"); + ok(strcmp(buffer,"value1")==0, "incorrect string was returned(%s)\n",buffer); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"Whitespace103"); + ok(HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &len, &index),"Unable to query header\n"); + ok(index == 1, "Index was not incremented\n"); + ok(strcmp(buffer,"value2")==0, "incorrect string was returned(%s)\n",buffer); + + ok(HttpAddRequestHeadersA(hRequest,"\nWhitespace104:value1\n\nWhitespace105:value2\n",-1, HTTP_ADDREQ_FLAG_ADD_IF_NEW), "Failed to add header with white space\n"); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"Whitespace104"); + ok(HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &len, &index),"Unable to query header\n"); + ok(index == 1, "Index was not incremented\n"); + ok(strcmp(buffer,"value1")==0, "incorrect string was returned(%s)\n",buffer); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"Whitespace105"); + ok(HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &len, &index),"Unable to query header\n"); + ok(index == 1, "Index was not incremented\n"); + ok(strcmp(buffer,"value2")==0, "incorrect string was returned(%s)\n",buffer); + + ok(HttpAddRequestHeadersA(hRequest,"Whitespace106:value1\n\rWhitespace107:value2\n",-1, HTTP_ADDREQ_FLAG_ADD_IF_NEW), "Failed to add header with white space\n"); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"Whitespace106"); + ok(HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &len, &index),"Unable to query header\n"); + ok(index == 1, "Index was not incremented\n"); + ok(strcmp(buffer,"value1")==0, "incorrect string was returned(%s)\n",buffer); + index = 0; + len = sizeof(buffer); + strcpy(buffer,"Whitespace107"); + ok(HttpQueryInfoA(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &len, &index),"Unable to query header\n"); + ok(index == 1, "Index was not incremented\n"); + ok(strcmp(buffer,"value2")==0, "incorrect string was returned(%s)\n",buffer); + + index = 0; + len = sizeof(buffer); + memset(buffer, 'x', sizeof(buffer)); + ok(HttpQueryInfoA(hRequest,HTTP_QUERY_RAW_HEADERS_CRLF|HTTP_QUERY_FLAG_REQUEST_HEADERS, + buffer,&len,&index),"Unable to query header\n"); + printf("'%s'\n", buffer); + ok(InternetCloseHandle(hRequest), "Close request handle failed\n"); done: ok(InternetCloseHandle(hConnect), "Close connect handle failed\n");