Huw Davies : rpcrt4: Dynamically allocate the buffer if the fixed size one isn't large enough. Don't return an inappropriate error if we fail to get the status text, it' s only used for diagnostics.

Alexandre Julliard julliard at winehq.org
Thu Mar 26 11:05:45 CDT 2009


Module: wine
Branch: master
Commit: eaf4492c704da1190b3b3844e7340a275d71acbf
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=eaf4492c704da1190b3b3844e7340a275d71acbf

Author: Huw Davies <huw at codeweavers.com>
Date:   Thu Mar 19 12:23:45 2009 +0000

rpcrt4: Dynamically allocate the buffer if the fixed size one isn't large enough. Don't return an inappropriate error if we fail to get the status text, it's only used for diagnostics.

---

 dlls/rpcrt4/rpc_transport.c |   18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/dlls/rpcrt4/rpc_transport.c b/dlls/rpcrt4/rpc_transport.c
index 7de6230..9e4186c 100644
--- a/dlls/rpcrt4/rpc_transport.c
+++ b/dlls/rpcrt4/rpc_transport.c
@@ -1597,8 +1597,8 @@ static RPC_STATUS rpcrt4_http_check_response(HINTERNET hor)
     DWORD status_code;
     DWORD size;
     DWORD index;
-    WCHAR status_text[32];
-
+    WCHAR buf[32];
+    WCHAR *status_text = buf;
     TRACE("\n");
 
     index = 0;
@@ -1609,11 +1609,17 @@ static RPC_STATUS rpcrt4_http_check_response(HINTERNET hor)
     if (status_code < 400)
         return RPC_S_OK;
     index = 0;
-    size = sizeof(status_text);
+    size = sizeof(buf);
     ret = HttpQueryInfoW(hor, HTTP_QUERY_STATUS_TEXT, status_text, &size, &index);
-    if (!ret)
-        return GetLastError();
-    ERR("server returned: %d %s\n", status_code, debugstr_w(status_text));
+    if (!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER)
+    {
+        status_text = HeapAlloc(GetProcessHeap(), 0, size);
+        ret = HttpQueryInfoW(hor, HTTP_QUERY_STATUS_TEXT, status_text, &size, &index);
+    }
+
+    ERR("server returned: %d %s\n", status_code, ret ? debugstr_w(status_text) : "<status text unavailable>");
+    if(status_text != buf) HeapFree(GetProcessHeap(), 0, status_text);
+
     if (status_code == HTTP_STATUS_DENIED)
         return ERROR_ACCESS_DENIED;
     return RPC_S_SERVER_UNAVAILABLE;




More information about the wine-cvs mailing list