wininet: Support HTTP_QUERY_RAW_HEADER_CRLF|HTTP_QUERY_FLAG_REQUEST_HEADERS.
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c index 33cfbb5..50fbf5a 100644 --- a/dlls/wininet/http.c +++ b/dlls/wininet/http.c
@@ -1664,19 +1664,33 @@ case HTTP_QUERY_RAW_HEADERS_CRLF: { - DWORD len = strlenW(lpwhr->lpszRawHeaders); + LPWSTR headers; + DWORD len; + BOOL ret; + + if (request_only) + headers = HTTP_BuildHeaderRequestString(lpwhr, lpwhr->lpszVerb, lpwhr->lpszPath, FALSE); + else + headers = lpwhr->lpszRawHeaders; + + len = strlenW(headers); if (len + 1 > *lpdwBufferLength/sizeof(WCHAR)) { *lpdwBufferLength = (len + 1) * sizeof(WCHAR); INTERNET_SetLastError(ERROR_INSUFFICIENT_BUFFER); - return FALSE; + ret = FALSE; + } else + { + memcpy(lpBuffer, headers, (len+1)*sizeof(WCHAR)); + *lpdwBufferLength = len * sizeof(WCHAR); + + TRACE("returning data: %s\n", debugstr_wn((WCHAR*)lpBuffer, len)); + ret = TRUE; } - memcpy(lpBuffer, lpwhr->lpszRawHeaders, (len+1)*sizeof(WCHAR)); - *lpdwBufferLength = len * sizeof(WCHAR); - TRACE("returning data: %s\n", debugstr_wn((WCHAR*)lpBuffer, len)); - - return TRUE; + if (request_only) + HeapFree(GetProcessHeap(), 0, headers); + return ret; } case HTTP_QUERY_RAW_HEADERS: {