Michael Stefaniuc : inetcomm: Zero terminate the mhtml WCHAR strings.

Alexandre Julliard julliard at winehq.org
Fri Oct 23 14:27:18 CDT 2020


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

Author: Michael Stefaniuc <mstefani at winehq.org>
Date:   Fri Oct 23 11:20:00 2020 +0200

inetcomm: Zero terminate the mhtml WCHAR strings.

Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/inetcomm/mimeole.c  |  8 +++-----
 dlls/inetcomm/protocol.c | 27 +++++++++++++--------------
 2 files changed, 16 insertions(+), 19 deletions(-)

diff --git a/dlls/inetcomm/mimeole.c b/dlls/inetcomm/mimeole.c
index eda9a911bbf..74c5c670d15 100644
--- a/dlls/inetcomm/mimeole.c
+++ b/dlls/inetcomm/mimeole.c
@@ -3697,8 +3697,6 @@ HRESULT WINAPI MimeOleObjectFromMoniker(BINDF bindf, IMoniker *moniker, IBindCtx
     size_t len;
     HRESULT hres;
 
-    static const WCHAR mhtml_prefixW[] = {'m','h','t','m','l',':'};
-
     WARN("(0x%08x, %p, %p, %s, %p, %p) semi-stub\n", bindf, moniker, binding, debugstr_guid(riid), out, moniker_new);
 
     if(!IsEqualGUID(&IID_IUnknown, riid)) {
@@ -3713,12 +3711,12 @@ HRESULT WINAPI MimeOleObjectFromMoniker(BINDF bindf, IMoniker *moniker, IBindCtx
     TRACE("display name %s\n", debugstr_w(display_name));
 
     len = lstrlenW(display_name);
-    mhtml_url = heap_alloc((len+1)*sizeof(WCHAR) + sizeof(mhtml_prefixW));
+    mhtml_url = heap_alloc(len*sizeof(WCHAR) + sizeof(L"mhtml:"));
     if(!mhtml_url)
         return E_OUTOFMEMORY;
 
-    memcpy(mhtml_url, mhtml_prefixW, sizeof(mhtml_prefixW));
-    lstrcpyW(mhtml_url + ARRAY_SIZE(mhtml_prefixW), display_name);
+    lstrcpyW(mhtml_url, L"mhtml:");
+    lstrcatW(mhtml_url, display_name);
     HeapFree(GetProcessHeap(), 0, display_name);
 
     hres = CreateURLMoniker(NULL, mhtml_url, moniker_new);
diff --git a/dlls/inetcomm/protocol.c b/dlls/inetcomm/protocol.c
index e50e5a625c3..e272689a9ac 100644
--- a/dlls/inetcomm/protocol.c
+++ b/dlls/inetcomm/protocol.c
@@ -59,8 +59,8 @@ typedef struct {
     WCHAR url[1];
 } MimeHtmlBinding;
 
-static const WCHAR mhtml_prefixW[] = {'m','h','t','m','l',':'};
-static const WCHAR mhtml_separatorW[] = {'!','x','-','u','s','c',':'};
+static const WCHAR mhtml_prefixW[] = L"mhtml:";
+static const WCHAR mhtml_separatorW[] = L"!x-usc:";
 
 static inline LPWSTR heap_strdupW(LPCWSTR str)
 {
@@ -82,16 +82,16 @@ static HRESULT parse_mhtml_url(const WCHAR *url, mhtml_url_t *r)
 {
     const WCHAR *p;
 
-    if(wcsnicmp(url, mhtml_prefixW, ARRAY_SIZE(mhtml_prefixW)))
+    if(wcsnicmp(url, mhtml_prefixW, lstrlenW(mhtml_prefixW)))
         return E_FAIL;
 
-    r->mhtml = url + ARRAY_SIZE(mhtml_prefixW);
+    r->mhtml = url + lstrlenW(mhtml_prefixW);
     p = wcschr(r->mhtml, '!');
     if(p) {
         r->mhtml_len = p - r->mhtml;
         /* FIXME: We handle '!' and '!x-usc:' in URLs as the same thing. Those should not be the same. */
-        if(!wcsncmp(p, mhtml_separatorW, ARRAY_SIZE(mhtml_separatorW)))
-            p += ARRAY_SIZE(mhtml_separatorW);
+        if(!wcsncmp(p, mhtml_separatorW, lstrlenW(mhtml_separatorW)))
+            p += lstrlenW(mhtml_separatorW);
         else
             p++;
     }else {
@@ -656,7 +656,7 @@ static HRESULT WINAPI MimeHtmlProtocolInfo_CombineUrl(IInternetProtocolInfo *ifa
         DWORD cchResult, DWORD* pcchResult, DWORD dwReserved)
 {
     MimeHtmlProtocol *This = impl_from_IInternetProtocolInfo(iface);
-    size_t len = ARRAY_SIZE(mhtml_prefixW);
+    size_t len = lstrlenW(mhtml_prefixW);
     mhtml_url_t url;
     WCHAR *p;
     HRESULT hres;
@@ -669,27 +669,26 @@ static HRESULT WINAPI MimeHtmlProtocolInfo_CombineUrl(IInternetProtocolInfo *ifa
     if(FAILED(hres))
         return hres;
 
-    if(!wcsnicmp(pwzRelativeUrl, mhtml_prefixW, ARRAY_SIZE(mhtml_prefixW))) {
+    if(!wcsnicmp(pwzRelativeUrl, mhtml_prefixW, len)) {
         FIXME("Relative URL is mhtml protocol\n");
         return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
     }
 
     len += url.mhtml_len;
     if(*pwzRelativeUrl)
-        len += lstrlenW(pwzRelativeUrl) + ARRAY_SIZE(mhtml_separatorW);
+        len += lstrlenW(pwzRelativeUrl) + lstrlenW(mhtml_separatorW);
     if(len >= cchResult) {
         *pcchResult = 0;
         return E_FAIL;
     }
 
-    memcpy(pwzResult, mhtml_prefixW, sizeof(mhtml_prefixW));
-    p = pwzResult + ARRAY_SIZE(mhtml_prefixW);
+    lstrcpyW(pwzResult, mhtml_prefixW);
+    p = pwzResult + lstrlenW(mhtml_prefixW);
     memcpy(p, url.mhtml, url.mhtml_len*sizeof(WCHAR));
     p += url.mhtml_len;
     if(*pwzRelativeUrl) {
-        memcpy(p, mhtml_separatorW, sizeof(mhtml_separatorW));
-        p += ARRAY_SIZE(mhtml_separatorW);
-        lstrcpyW(p, pwzRelativeUrl);
+        lstrcpyW(p, mhtml_separatorW);
+        lstrcatW(p, pwzRelativeUrl);
     }else {
         *p = 0;
     }




More information about the wine-cvs mailing list