Commit 4385d305 authored by Robert Shearman's avatar Robert Shearman Committed by Alexandre Julliard

HttpQueryInfo returns buffer length including null terminator on

insufficient buffer length and buffer length excluding null terminator on success: - Fix HTTP_HttpQueryInfoW for these semantics. - Fix HttpQueryInfoA to correctly copy the null terminator in the call to WideCharToMultiByte.
parent 8f6545cb
...@@ -862,7 +862,10 @@ BOOL WINAPI HTTP_HttpQueryInfoW( LPWININETHTTPREQW lpwhr, DWORD dwInfoLevel, ...@@ -862,7 +862,10 @@ BOOL WINAPI HTTP_HttpQueryInfoW( LPWININETHTTPREQW lpwhr, DWORD dwInfoLevel,
return FALSE; return FALSE;
} }
memcpy(lpBuffer, lpwhr->lpszRawHeaders, (len+1)*sizeof(WCHAR)); memcpy(lpBuffer, lpwhr->lpszRawHeaders, (len+1)*sizeof(WCHAR));
*lpdwBufferLength = (len + 1) * sizeof(WCHAR); *lpdwBufferLength = len * sizeof(WCHAR);
TRACE("returning data: %s\n", debugstr_wn((WCHAR*)lpBuffer, len));
return TRUE; return TRUE;
} }
else if (index == HTTP_QUERY_RAW_HEADERS) else if (index == HTTP_QUERY_RAW_HEADERS)
...@@ -894,7 +897,7 @@ BOOL WINAPI HTTP_HttpQueryInfoW( LPWININETHTTPREQW lpwhr, DWORD dwInfoLevel, ...@@ -894,7 +897,7 @@ BOOL WINAPI HTTP_HttpQueryInfoW( LPWININETHTTPREQW lpwhr, DWORD dwInfoLevel,
TRACE("returning data: %s\n", debugstr_wn((WCHAR*)lpBuffer, size)); TRACE("returning data: %s\n", debugstr_wn((WCHAR*)lpBuffer, size));
*lpdwBufferLength = (size + 1) * sizeof(WCHAR); *lpdwBufferLength = size * sizeof(WCHAR);
HTTP_FreeTokens(ppszRawHeaderLines); HTTP_FreeTokens(ppszRawHeaderLines);
return TRUE; return TRUE;
...@@ -1160,16 +1163,18 @@ BOOL WINAPI HttpQueryInfoA(HINTERNET hHttpRequest, DWORD dwInfoLevel, ...@@ -1160,16 +1163,18 @@ BOOL WINAPI HttpQueryInfoA(HINTERNET hHttpRequest, DWORD dwInfoLevel,
&len, lpdwIndex ); &len, lpdwIndex );
if( result ) if( result )
{ {
len = WideCharToMultiByte( CP_ACP,0, bufferW, len / sizeof(WCHAR), len = WideCharToMultiByte( CP_ACP,0, bufferW, len / sizeof(WCHAR) + 1,
lpBuffer, *lpdwBufferLength, NULL, NULL ); lpBuffer, *lpdwBufferLength, NULL, NULL );
*lpdwBufferLength = len * sizeof(WCHAR); *lpdwBufferLength = len - 1;
TRACE("lpBuffer: %s\n", debugstr_a(lpBuffer));
} }
else else
/* since the strings being returned from HttpQueryInfoW should be /* since the strings being returned from HttpQueryInfoW should be
* only ASCII characters, it is reasonable to assume that all of * only ASCII characters, it is reasonable to assume that all of
* the Unicode characters can be reduced to a single byte */ * the Unicode characters can be reduced to a single byte */
*lpdwBufferLength = len / sizeof(WCHAR); *lpdwBufferLength = len / sizeof(WCHAR);
HeapFree(GetProcessHeap(), 0, bufferW ); HeapFree(GetProcessHeap(), 0, bufferW );
return result; return result;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment