Jacek Caban : urlmon: CoInternetGetSecurityUrlEx rewrite.
Alexandre Julliard
julliard at winehq.org
Tue Feb 8 17:23:48 CST 2011
Module: wine
Branch: master
Commit: 139382a3f8b0cffede0c64c85c8fdbb4c1337601
URL: http://source.winehq.org/git/wine.git/?a=commit;h=139382a3f8b0cffede0c64c85c8fdbb4c1337601
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Feb 8 15:17:15 2011 +0100
urlmon: CoInternetGetSecurityUrlEx rewrite.
---
dlls/urlmon/sec_mgr.c | 89 ++++++++++--------------------------------------
1 files changed, 19 insertions(+), 70 deletions(-)
diff --git a/dlls/urlmon/sec_mgr.c b/dlls/urlmon/sec_mgr.c
index 4206d5d..562680f 100644
--- a/dlls/urlmon/sec_mgr.c
+++ b/dlls/urlmon/sec_mgr.c
@@ -293,59 +293,6 @@ static HRESULT get_action_policy(DWORD zone, DWORD action, BYTE *policy, DWORD s
return hres;
}
-static HRESULT parse_security_uri(IUri *uri, PSUACTION action, IUri **result) {
- WCHAR buf1[INTERNET_MAX_URL_LENGTH], buf2[INTERNET_MAX_URL_LENGTH];
- LPWSTR url, tmp;
- HRESULT hres;
- DWORD len = 0;
- BOOL use_url = FALSE;
-
- url = buf1;
- tmp = buf2;
- *result = NULL;
-
- hres = IUri_GetPropertyLength(uri, Uri_PROPERTY_ABSOLUTE_URI, &len, 0);
- if(FAILED(hres))
- return hres;
-
- hres = CoInternetParseIUri(uri, PARSE_SECURITY_URL, 0, url, len+1, &len, 0);
- if(hres == S_OK) {
- use_url = TRUE;
- while(TRUE) {
- hres = CoInternetParseUrl(url, PARSE_SECURITY_URL, 0, tmp, len+1, &len, 0);
- if(hres != S_OK || !strcmpW(url, tmp))
- break;
-
- if(url == buf1) {
- url = buf2;
- tmp = buf1;
- } else {
- url = buf1;
- tmp = buf2;
- }
- }
- }
-
- if(action == PSU_DEFAULT) {
- if(use_url) {
- hres = CoInternetParseUrl(url, PARSE_SECURITY_DOMAIN, 0, tmp, len+1, &len, 0);
- url = tmp;
- } else {
- hres = CoInternetParseIUri(uri, PARSE_SECURITY_DOMAIN, 0, url, len+1, &len, 0);
- if(hres == S_OK)
- use_url = TRUE;
- }
- }
-
- if(use_url) {
- hres = CreateUri(url, 0, 0, result);
- if(FAILED(hres))
- return hres;
- }
-
- return S_OK;
-}
-
/***********************************************************************
* InternetSecurityManager implementation
*
@@ -1464,42 +1411,44 @@ HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR pwzUrl, LPWSTR *ppwzSecUrl, PSUA
*/
HRESULT WINAPI CoInternetGetSecurityUrlEx(IUri *pUri, IUri **ppSecUri, PSUACTION psuAction, DWORD_PTR dwReserved)
{
- HRESULT hres;
- BSTR secure_uri;
URL_SCHEME scheme_type;
+ BSTR secure_uri;
+ WCHAR *ret_url;
+ HRESULT hres;
TRACE("(%p,%p,%u,%u)\n", pUri, ppSecUri, psuAction, (DWORD)dwReserved);
if(!pUri || !ppSecUri)
return E_INVALIDARG;
- /* Try to find the Security url using pluggable protocols first. */
- hres = parse_security_uri(pUri, psuAction, ppSecUri);
- if(FAILED(hres) || *ppSecUri)
+ hres = IUri_GetDisplayUri(pUri, &secure_uri);
+ if(FAILED(hres))
return hres;
- hres = IUri_GetScheme(pUri, (DWORD*)&scheme_type);
+ hres = parse_security_url(secure_uri, psuAction, &ret_url);
+ SysFreeString(secure_uri);
if(FAILED(hres))
return hres;
- hres = IUri_GetDisplayUri(pUri, &secure_uri);
- if(FAILED(hres))
+ hres = CreateUri(ret_url, Uri_CREATE_ALLOW_IMPLICIT_WILDCARD_SCHEME, 0, ppSecUri);
+ if(FAILED(hres)) {
+ CoTaskMemFree(ret_url);
return hres;
+ }
/* File URIs have to hierarchical. */
- if(scheme_type == URL_SCHEME_FILE) {
- const WCHAR *tmp = secure_uri;
+ hres = IUri_GetScheme(pUri, (DWORD*)&scheme_type);
+ if(SUCCEEDED(hres) && scheme_type == URL_SCHEME_FILE) {
+ const WCHAR *tmp = ret_url;
/* Check and see if a "//" is after the scheme name. */
tmp += sizeof(fileW)/sizeof(WCHAR);
- if(*tmp != '/' || *(tmp+1) != '/') {
- SysFreeString(secure_uri);
- return E_INVALIDARG;
- }
+ if(*tmp != '/' || *(tmp+1) != '/')
+ hres = E_INVALIDARG;
}
- hres = CreateUri(secure_uri, Uri_CREATE_ALLOW_IMPLICIT_WILDCARD_SCHEME, 0, ppSecUri);
- SysFreeString(secure_uri);
-
+ if(SUCCEEDED(hres))
+ hres = CreateUri(ret_url, Uri_CREATE_ALLOW_IMPLICIT_WILDCARD_SCHEME, 0, ppSecUri);
+ CoTaskMemFree(ret_url);
return hres;
}
More information about the wine-cvs
mailing list