wininet: Fix handling of a response without headers.
authorHans Leidekker <hans@codeweavers.com>
Mon, 22 Feb 2010 11:28:03 +0000 (12:28 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 22 Feb 2010 12:16:02 +0000 (13:16 +0100)
dlls/wininet/http.c
dlls/wininet/tests/http.c

index 5b1bb22db80af7efa86823adcf16238934537900..62c3953cbe1bf2d4155f2791da6298e54ee3603e 100644 (file)
@@ -73,6 +73,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(wininet);
 
 static const WCHAR g_szHttp1_0[] = {'H','T','T','P','/','1','.','0',0};
 static const WCHAR g_szHttp1_1[] = {'H','T','T','P','/','1','.','1',0};
+static const WCHAR szOK[] = {'O','K',0};
+static const WCHAR szDefaultHeader[] = {'H','T','T','P','/','1','.','0',' ','2','0','0',' ','O','K',0};
 static const WCHAR hostW[] = { 'H','o','s','t',0 };
 static const WCHAR szAuthorization[] = { 'A','u','t','h','o','r','i','z','a','t','i','o','n',0 };
 static const WCHAR szProxy_Authorization[] = { 'P','r','o','x','y','-','A','u','t','h','o','r','i','z','a','t','i','o','n',0 };
@@ -4474,7 +4476,18 @@ static INT HTTP_GetResponseHeaders(http_request_t *lpwhr, BOOL clear)
         }
         else if (!codeHundred)
         {
-            FIXME("Non status line at head of response (%s)\n",debugstr_w(buffer));
+            WARN("No status line at head of response (%s)\n", debugstr_w(buffer));
+
+            HeapFree(GetProcessHeap(), 0, lpwhr->lpszVersion);
+            HeapFree(GetProcessHeap(), 0, lpwhr->lpszStatusText);
+
+            lpwhr->lpszVersion = heap_strdupW(g_szHttp1_0);
+            lpwhr->lpszStatusText = heap_strdupW(szOK);
+
+            HeapFree(GetProcessHeap(), 0, lpwhr->lpszRawHeaders);
+            lpwhr->lpszRawHeaders = heap_strdupW(szDefaultHeader);
+
+            bSuccess = TRUE;
             goto lend;
         }
     } while (codeHundred);
index 5d57549d383c63e7146a4c0e7379155451e9d10e..0faeb54dc8aa0058427d371722aed549d67baad1 100644 (file)
@@ -2290,22 +2290,22 @@ static void test_response_without_headers(int port)
     size = sizeof(buffer);
     SetLastError(0xdeadbeef);
     r = HttpQueryInfo(hr, HTTP_QUERY_STATUS_TEXT, buffer, &size, NULL );
-    todo_wine ok(r, "HttpQueryInfo failed %u\n", GetLastError());
-    todo_wine ok(!strcmp(buffer, "OK"), "expected OK got: \"%s\"\n", buffer);
+    ok(r, "HttpQueryInfo failed %u\n", GetLastError());
+    ok(!strcmp(buffer, "OK"), "expected OK got: \"%s\"\n", buffer);
 
     buffer[0] = 0;
     size = sizeof(buffer);
     SetLastError(0xdeadbeef);
     r = HttpQueryInfo(hr, HTTP_QUERY_VERSION, buffer, &size, NULL);
     ok(r, "HttpQueryInfo failed %u\n", GetLastError());
-    todo_wine ok(!strcmp(buffer, "HTTP/1.0"), "expected HTTP/1.0 got: \"%s\"\n", buffer);
+    ok(!strcmp(buffer, "HTTP/1.0"), "expected HTTP/1.0 got: \"%s\"\n", buffer);
 
     buffer[0] = 0;
     size = sizeof(buffer);
     SetLastError(0xdeadbeef);
     r = HttpQueryInfo(hr, HTTP_QUERY_RAW_HEADERS, buffer, &size, NULL);
     ok(r, "HttpQueryInfo failed %u\n", GetLastError());
-    todo_wine ok(!strcmp(buffer, "HTTP/1.0 200 OK"), "raw headers wrong: \"%s\"\n", buffer);
+    ok(!strcmp(buffer, "HTTP/1.0 200 OK"), "raw headers wrong: \"%s\"\n", buffer);
 
     InternetCloseHandle(hr);
     InternetCloseHandle(hc);