Piotr Caban : user32: Fix LoadStringA behavior on 1-character long buffer.

Alexandre Julliard julliard at winehq.org
Wed May 14 15:39:06 CDT 2014


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed May 14 16:06:27 2014 +0200

user32: Fix LoadStringA behavior on 1-character long buffer.

---

 dlls/user32/resource.c       |    3 ++-
 dlls/user32/tests/resource.c |    7 +++++++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/dlls/user32/resource.c b/dlls/user32/resource.c
index 1917d51..83442d8 100644
--- a/dlls/user32/resource.c
+++ b/dlls/user32/resource.c
@@ -310,7 +310,8 @@ INT WINAPI LoadStringA( HINSTANCE instance, UINT resource_id, LPSTR buffer, INT
 
         while (id--) p += *p + 1;
 
-        RtlUnicodeToMultiByteN( buffer, buflen - 1, &retval, p + 1, *p * sizeof(WCHAR) );
+        if (buflen != 1)
+            RtlUnicodeToMultiByteN( buffer, buflen - 1, &retval, p + 1, *p * sizeof(WCHAR) );
     }
     buffer[retval] = 0;
     TRACE("returning %s\n", debugstr_a(buffer));
diff --git a/dlls/user32/tests/resource.c b/dlls/user32/tests/resource.c
index 9cb7380..2388adb 100644
--- a/dlls/user32/tests/resource.c
+++ b/dlls/user32/tests/resource.c
@@ -126,6 +126,13 @@ static void test_LoadStringA (void)
     ok( ret == -1 || broken(ret == 0),
         "LoadStringA did not return -1 when called with buflen = 0, got %d, err %d\n",
         ret, GetLastError());
+
+    SetLastError(0xdeadbeef);
+    buf[0] = 'a';
+    ret = LoadStringA(hInst, 1, buf, 1);
+    ok( !ret, "LoadString returned %d\n", ret);
+    ok( buf[0] == 0, "buf[0] = %c (%x)\n", buf[0], buf[0]);
+    ok( GetLastError() == 0xdeadbeef, "GetLastError() = %d\n", GetLastError());
 }
 
 static void test_accel1(void)




More information about the wine-cvs mailing list