https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9982fa3c75a4640b7272e9652f4f3e54bc77ad56

commit 9982fa3c75a4640b7272e9652f4f3e54bc77ad56
Author:     winesync <[email protected]>
AuthorDate: Tue Dec 8 18:01:28 2020 +0100
Commit:     Jérôme Gardou <[email protected]>
CommitDate: Tue Jan 5 11:03:13 2021 +0100

    [WINESYNC] wininet: Get rid of user buffer in create_cookie_url().
    
    Signed-off-by: Serge Gautherie <[email protected]>
    Signed-off-by: Jacek Caban <[email protected]>
    Signed-off-by: Alexandre Julliard <[email protected]>
    
    wine commit id d2a1c906dc4979eeabe256f77a58d67290da372d by Serge Gautherie 
<[email protected]>
---
 dll/win32/wininet/cookie.c     | 19 +++++++++++--------
 sdk/tools/winesync/wininet.cfg |  2 +-
 2 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/dll/win32/wininet/cookie.c b/dll/win32/wininet/cookie.c
index 98a5e0e2a45..124b577288a 100644
--- a/dll/win32/wininet/cookie.c
+++ b/dll/win32/wininet/cookie.c
@@ -151,28 +151,31 @@ static cookie_domain_t *get_cookie_domain(substr_t 
domain, BOOL create)
 
 static WCHAR *create_cookie_url(substr_t domain, substr_t path, substr_t 
*ret_path)
 {
-    WCHAR user[UNLEN], *p, *url;
+    WCHAR *p, *url;
     DWORD len, user_len, i;
 
     static const WCHAR cookie_prefix[] = {'C','o','o','k','i','e',':'};
 
-    user_len = ARRAY_SIZE(user);
-    if(!GetUserNameW(user, &user_len))
-        return FALSE;
-    user_len--;
+    user_len = 0;
+    if(GetUserNameW(NULL, &user_len) || GetLastError() != 
ERROR_INSUFFICIENT_BUFFER)
+        return NULL;
 
+    /* user_len already accounts for terminating NULL */
     len = ARRAY_SIZE(cookie_prefix) + user_len + 1 /* @ */ + domain.len + 
path.len;
-    url = heap_alloc((len+1) * sizeof(WCHAR));
+    url = heap_alloc(len * sizeof(WCHAR));
     if(!url)
         return NULL;
 
     memcpy(url, cookie_prefix, sizeof(cookie_prefix));
     p = url + ARRAY_SIZE(cookie_prefix);
 
-    memcpy(p, user, user_len*sizeof(WCHAR));
+    if(!GetUserNameW(p, &user_len)) {
+        heap_free(url);
+        return NULL;
+    }
     p += user_len;
 
-    *p++ = '@';
+    *(p - 1) = '@';
 
     memcpy(p, domain.str, domain.len*sizeof(WCHAR));
     p += domain.len;
diff --git a/sdk/tools/winesync/wininet.cfg b/sdk/tools/winesync/wininet.cfg
index d379382a1f5..940797a5151 100644
--- a/sdk/tools/winesync/wininet.cfg
+++ b/sdk/tools/winesync/wininet.cfg
@@ -5,4 +5,4 @@ files:
   include/wininet.h: sdk/include/psdk/wininet.h
   include/winineti.h: sdk/include/psdk/winineti.h
 tags:
-  wine: ccd6b205fa99360e7437f1c5bc63e0075f8e6760
+  wine: d2a1c906dc4979eeabe256f77a58d67290da372d

Reply via email to