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