wininet: add some tests for whitespace handling
Austin English
austinenglish at gmail.com
Thu Apr 17 21:01:55 CDT 2014
Based on a patch by Yann Droneaud <yann at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-patches/attachments/20140417/0fcb5169/attachment-0001.html>
-------------- next part --------------
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");
More information about the wine-patches
mailing list