From d202daa1829f60bc5c05a8c4cf8a2ad57e7eb792 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Wed, 21 Nov 2012 15:06:34 +0100 Subject: [PATCH] mshtml: Always use UTF-8 encoding in nsWineURL. --- dlls/mshtml/mshtml_private.h | 30 ++++++++++++++++++++++++++++++ dlls/mshtml/nsio.c | 34 +++++++++++++++++----------------- 2 files changed, 47 insertions(+), 17 deletions(-) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index f9c05f06917..d2c7b288446 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1102,6 +1102,36 @@ static inline char *heap_strdupWtoA(LPCWSTR str) return ret; } +static inline WCHAR *heap_strdupUtoW(const char *str) +{ + WCHAR *ret = NULL; + + if(str) { + size_t len; + + len = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0); + ret = heap_alloc(len*sizeof(WCHAR)); + if(ret) + MultiByteToWideChar(CP_UTF8, 0, str, -1, ret, len); + } + + return ret; +} + +static inline char *heap_strdupWtoU(const WCHAR *str) +{ + char *ret = NULL; + + if(str) { + size_t size = WideCharToMultiByte(CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL); + ret = heap_alloc(size); + if(ret) + WideCharToMultiByte(CP_UTF8, 0, str, -1, ret, size, NULL, NULL); + } + + return ret; +} + static inline void windowref_addref(windowref_t *ref) { InterlockedIncrement(&ref->ref); diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c index 90543dfa25f..e3520d126b8 100644 --- a/dlls/mshtml/nsio.c +++ b/dlls/mshtml/nsio.c @@ -162,12 +162,12 @@ static nsresult return_wstr_nsacstr(nsACString *ret_str, const WCHAR *str, int l return NS_OK; } - lena = WideCharToMultiByte(CP_ACP, 0, str, len, NULL, 0, NULL, NULL); + lena = WideCharToMultiByte(CP_UTF8, 0, str, len, NULL, 0, NULL, NULL); stra = heap_alloc(lena+1); if(!stra) return NS_ERROR_OUT_OF_MEMORY; - WideCharToMultiByte(CP_ACP, 0, str, len, stra, lena, NULL, NULL); + WideCharToMultiByte(CP_UTF8, 0, str, len, stra, lena, NULL, NULL); stra[lena] = 0; nsACString_SetData(ret_str, stra); @@ -1769,7 +1769,7 @@ static nsresult get_uri_string(nsWineURI *This, Uri_PROPERTY prop, nsACString *r return NS_ERROR_UNEXPECTED; } - vala = heap_strdupWtoA(val); + vala = heap_strdupWtoU(val); SysFreeString(val); if(!vala) return NS_ERROR_OUT_OF_MEMORY; @@ -1876,7 +1876,7 @@ static nsresult NSAPI nsURI_SetSpec(nsIFileURL *iface, const nsACString *aSpec) return NS_ERROR_UNEXPECTED; nsACString_GetData(aSpec, &speca); - spec = heap_strdupAtoW(speca); + spec = heap_strdupUtoW(speca); if(!spec) return NS_ERROR_OUT_OF_MEMORY; @@ -1942,7 +1942,7 @@ static nsresult NSAPI nsURI_SetScheme(nsIFileURL *iface, const nsACString *aSche return NS_ERROR_UNEXPECTED; nsACString_GetData(aScheme, &schemea); - scheme = heap_strdupAtoW(schemea); + scheme = heap_strdupUtoW(schemea); if(!scheme) return NS_ERROR_OUT_OF_MEMORY; @@ -2002,7 +2002,7 @@ static nsresult NSAPI nsURI_SetUserPass(nsIFileURL *iface, const nsACString *aUs if(*user_pass) { WCHAR *ptr; - buf = heap_strdupAtoW(user_pass); + buf = heap_strdupUtoW(user_pass); if(!buf) return NS_ERROR_OUT_OF_MEMORY; @@ -2049,7 +2049,7 @@ static nsresult NSAPI nsURI_SetUsername(nsIFileURL *iface, const nsACString *aUs return NS_ERROR_UNEXPECTED; nsACString_GetData(aUsername, &usera); - user = heap_strdupAtoW(usera); + user = heap_strdupUtoW(usera); if(!user) return NS_ERROR_OUT_OF_MEMORY; @@ -2083,7 +2083,7 @@ static nsresult NSAPI nsURI_SetPassword(nsIFileURL *iface, const nsACString *aPa return NS_ERROR_UNEXPECTED; nsACString_GetData(aPassword, &passa); - pass = heap_strdupAtoW(passa); + pass = heap_strdupUtoW(passa); if(!pass) return NS_ERROR_OUT_OF_MEMORY; @@ -2118,7 +2118,7 @@ static nsresult NSAPI nsURI_GetHostPort(nsIFileURL *iface, nsACString *aHostPort if(!ptr) ptr = val; - vala = heap_strdupWtoA(ptr); + vala = heap_strdupWtoU(ptr); SysFreeString(val); if(!vala) return NS_ERROR_OUT_OF_MEMORY; @@ -2161,7 +2161,7 @@ static nsresult NSAPI nsURI_SetHost(nsIFileURL *iface, const nsACString *aHost) return NS_ERROR_UNEXPECTED; nsACString_GetData(aHost, &hosta); - host = heap_strdupAtoW(hosta); + host = heap_strdupUtoW(hosta); if(!host) return NS_ERROR_OUT_OF_MEMORY; @@ -2230,7 +2230,7 @@ static nsresult NSAPI nsURI_SetPath(nsIFileURL *iface, const nsACString *aPath) return NS_ERROR_UNEXPECTED; nsACString_GetData(aPath, &patha); - path = heap_strdupAtoW(patha); + path = heap_strdupUtoW(patha); if(!path) return NS_ERROR_OUT_OF_MEMORY; @@ -2292,7 +2292,7 @@ static nsresult NSAPI nsURI_SchemeIs(nsIFileURL *iface, const char *scheme, cpp_ if(FAILED(hres)) return NS_ERROR_UNEXPECTED; - MultiByteToWideChar(CP_ACP, 0, scheme, -1, buf, sizeof(buf)/sizeof(WCHAR)); + MultiByteToWideChar(CP_UTF8, 0, scheme, -1, buf, sizeof(buf)/sizeof(WCHAR)); *_retval = !strcmpW(scheme_name, buf); SysFreeString(scheme_name); return NS_OK; @@ -2336,7 +2336,7 @@ static nsresult NSAPI nsURI_Resolve(nsIFileURL *iface, const nsACString *aRelati return NS_ERROR_UNEXPECTED; nsACString_GetData(aRelativePath, &patha); - path = heap_strdupAtoW(patha); + path = heap_strdupUtoW(patha); if(!path) return NS_ERROR_OUT_OF_MEMORY; @@ -2352,7 +2352,7 @@ static nsresult NSAPI nsURI_Resolve(nsIFileURL *iface, const nsACString *aRelati if(FAILED(hres)) return NS_ERROR_FAILURE; - reta = heap_strdupWtoA(ret); + reta = heap_strdupWtoU(ret); SysFreeString(ret); if(!reta) return NS_ERROR_OUT_OF_MEMORY; @@ -2404,7 +2404,7 @@ static nsresult NSAPI nsURL_GetRef(nsIFileURL *iface, nsACString *aRef) if(FAILED(hres)) return NS_ERROR_UNEXPECTED; - refa = heap_strdupWtoA(ref); + refa = heap_strdupWtoU(ref); SysFreeString(ref); if(ref && !refa) return NS_ERROR_OUT_OF_MEMORY; @@ -2427,7 +2427,7 @@ static nsresult NSAPI nsURL_SetRef(nsIFileURL *iface, const nsACString *aRef) return NS_ERROR_UNEXPECTED; nsACString_GetData(aRef, &refa); - ref = heap_strdupAtoW(refa); + ref = heap_strdupUtoW(refa); if(!ref) return NS_ERROR_OUT_OF_MEMORY; @@ -2563,7 +2563,7 @@ static nsresult NSAPI nsURL_SetQuery(nsIFileURL *iface, const nsACString *aQuery return NS_ERROR_UNEXPECTED; nsACString_GetData(aQuery, &querya); - query = heap_strdupAtoW(querya); + query = heap_strdupUtoW(querya); if(!query) return NS_ERROR_OUT_OF_MEMORY;