Fix the HttpQueryInfoA function buffer size.
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 21c9f36..9eb8ed9 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -774,7 +774,7 @@
/***********************************************************************
- * HttpQueryInfoA (WININET.@)
+ * HttpQueryInfoW (WININET.@)
*
* Queries for information about an HTTP request
*
@@ -1091,20 +1091,28 @@
LPVOID lpBuffer, LPDWORD lpdwBufferLength, LPDWORD lpdwIndex)
{
BOOL result;
- DWORD charLen=*lpdwBufferLength;
- WCHAR* tempBuffer=HeapAlloc(GetProcessHeap(), 0, charLen);
- result=HttpQueryInfoW(hHttpRequest, dwInfoLevel, tempBuffer, &charLen, lpdwIndex);
+ DWORD len;
+ WCHAR* bufferW;
+
if((dwInfoLevel & HTTP_QUERY_FLAG_NUMBER) ||
(dwInfoLevel & HTTP_QUERY_FLAG_SYSTEMTIME))
{
- memcpy(lpBuffer,tempBuffer,charLen);
+ return HttpQueryInfoW( hHttpRequest, dwInfoLevel, lpBuffer,
+ lpdwBufferLength, lpdwIndex );
}
- else
+
+ len = (*lpdwBufferLength)*sizeof(WCHAR);
+ bufferW = HeapAlloc( GetProcessHeap(), 0, len );
+ result = HttpQueryInfoW( hHttpRequest, dwInfoLevel, bufferW,
+ &len, lpdwIndex );
+ if( result )
{
- int nChars=WideCharToMultiByte(CP_ACP,0, tempBuffer,charLen,lpBuffer,*lpdwBufferLength,NULL,NULL);
- *lpdwBufferLength=nChars;
+ len = WideCharToMultiByte( CP_ACP,0, bufferW, len / sizeof(WCHAR),
+ lpBuffer, *lpdwBufferLength, NULL, NULL );
+ *lpdwBufferLength = len * sizeof(WCHAR);
}
- HeapFree(GetProcessHeap(), 0, tempBuffer);
+ HeapFree(GetProcessHeap(), 0, bufferW );
+
return result;
}