[PATCH] Patch to fix LoadStringW when buflen is 0

Christopher Berner raccoonone at procyongames.com
Thu Jan 17 01:21:23 CST 2008


---
 dlls/user32/resource.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/dlls/user32/resource.c b/dlls/user32/resource.c
index b9a51ae..148e9d1 100644
--- a/dlls/user32/resource.c
+++ b/dlls/user32/resource.c
@@ -363,6 +363,7 @@ INT WINAPI LoadStringW( HINSTANCE instance, UINT resource_id,
     WCHAR *p;
     int string_num;
     int i;
+    int strlen;
 
     TRACE("instance = %p, id = %04x, buffer = %p, length = %d\n",
           instance, resource_id, buffer, buflen);
@@ -379,9 +380,19 @@ INT WINAPI LoadStringW( HINSTANCE instance, UINT resource_id,
     for (i = 0; i < string_num; i++)
 	p += *p + 1;
 
+    strlen = (int)*p;
     TRACE("strlen = %d\n", (int)*p );
 
     if (buffer == NULL) return *p;
+
+    //if buflen == 0, then return a read-only pointer to the resource itself in buffer
+    //it is assumed that buffer is actually a LPWSTR *
+    if(buflen == 0)
+    {
+        *((LPWSTR *)buffer) = p + 1;
+        return strlen;
+    }
+
     i = min(buflen - 1, *p);
     if (i > 0) {
 	memcpy(buffer, p + 1, i * sizeof (WCHAR));
-- 
1.5.2.5


--------------050002020308080709010304--



More information about the wine-patches mailing list