Tim Clem : wininet: Make heap_strndupAtoW stop at the first null.

Alexandre Julliard julliard at winehq.org
Wed Jul 7 15:01:29 CDT 2021


Module: wine
Branch: master
Commit: 681ce692a006c1ae918d0ab1be3574470e75cbb8
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=681ce692a006c1ae918d0ab1be3574470e75cbb8

Author: Tim Clem <tclem at codeweavers.com>
Date:   Fri Jul  2 16:12:04 2021 -0700

wininet: Make heap_strndupAtoW stop at the first null.

The analogous heap_strndupW already does this. Fixes InternetCrackUrlA
behavior when passed a dwUrlLength that's past the end of the string.

Signed-off-by: Tim Clem <tclem at codeweavers.com>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wininet/internet.h  | 5 ++++-
 dlls/wininet/tests/url.c | 2 --
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h
index 0efea473255..e9d68e2c2d9 100644
--- a/dlls/wininet/internet.h
+++ b/dlls/wininet/internet.h
@@ -152,7 +152,10 @@ static inline WCHAR *heap_strndupAtoW(const char *str, int len_a, DWORD *len_w)
 
     if(str) {
         size_t len;
-        if(len_a < 0) len_a = strlen(str);
+        if(len_a < 0)
+            len_a = strlen(str);
+        else if(len_a > 0)
+            len_a = strnlen(str, len_a);
         len = MultiByteToWideChar(CP_ACP, 0, str, len_a, NULL, 0);
         ret = heap_alloc((len+1)*sizeof(WCHAR));
         if(ret) {
diff --git a/dlls/wininet/tests/url.c b/dlls/wininet/tests/url.c
index 6927ca5e6e8..9476d4309c3 100644
--- a/dlls/wininet/tests/url.c
+++ b/dlls/wininet/tests/url.c
@@ -659,7 +659,6 @@ static void InternetCrackUrl_test(void)
   copy_compsA(&urlSrc, &urlComponents, 32, 1024, 1024, 1024, 1024, 1024);
   ret = InternetCrackUrlA("http://x.org", 13 /* includes the nul */, 0, &urlComponents);
   ok(ret, "InternetCrackUrlA failed with error %d\n", GetLastError());
-  todo_wine
   ok(urlComponents.dwHostNameLength == 5,
      "Expected dwHostNameLength of 5, got %d\n", urlComponents.dwHostNameLength);
 
@@ -670,7 +669,6 @@ static void InternetCrackUrl_test(void)
   copy_compsA(&urlSrc, &urlComponents, 32, 1024, 1024, 1024, 1024, 1024);
   ret = InternetCrackUrlA("http://x.org\0/x", 15, 0, &urlComponents);
   ok(ret, "InternetCrackUrlA failed with error %d\n", GetLastError());
-  todo_wine
   ok(urlComponents.dwUrlPathLength == 0,
     "Expected dwUrlPathLength of 0, got %d\n", urlComponents.dwUrlPathLength);
 }




More information about the wine-cvs mailing list