Jacek Caban : urlmon: Return correct error in get_protocol_handler for unknown protocol types.

Alexandre Julliard julliard at winehq.org
Wed Oct 6 14:04:15 CDT 2010


Module: wine
Branch: master
Commit: a7852b512889461c026bf13742d31df9915d527a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a7852b512889461c026bf13742d31df9915d527a

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Oct  6 14:10:08 2010 +0200

urlmon: Return correct error in get_protocol_handler for unknown protocol types.

---

 dlls/urlmon/session.c        |    9 +++++----
 dlls/urlmon/tests/protocol.c |   15 +++++++++++++--
 2 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/dlls/urlmon/session.c b/dlls/urlmon/session.c
index 163ee08..ef1881c 100644
--- a/dlls/urlmon/session.c
+++ b/dlls/urlmon/session.c
@@ -92,7 +92,7 @@ static HRESULT get_protocol_cf(LPCWSTR schema, DWORD schema_len, CLSID *pclsid,
     heap_free(wszKey);
     if(res != ERROR_SUCCESS) {
         TRACE("Could not open protocol handler key\n");
-        return E_FAIL;
+        return MK_E_SYNTAX;
     }
     
     size = sizeof(str_clsid);
@@ -100,7 +100,7 @@ static HRESULT get_protocol_cf(LPCWSTR schema, DWORD schema_len, CLSID *pclsid,
     RegCloseKey(hkey);
     if(res != ERROR_SUCCESS || type != REG_SZ) {
         WARN("Could not get protocol CLSID res=%d\n", res);
-        return E_FAIL;
+        return MK_E_SYNTAX;
     }
 
     hres = CLSIDFromString(str_clsid, &clsid);
@@ -115,7 +115,8 @@ static HRESULT get_protocol_cf(LPCWSTR schema, DWORD schema_len, CLSID *pclsid,
     if(!ret)
         return S_OK;
 
-    return CoGetClassObject(&clsid, CLSCTX_INPROC_SERVER, NULL, &IID_IClassFactory, (void**)ret);
+    hres = CoGetClassObject(&clsid, CLSCTX_INPROC_SERVER, NULL, &IID_IClassFactory, (void**)ret);
+    return SUCCEEDED(hres) ? S_OK : MK_E_SYNTAX;
 }
 
 static HRESULT register_namespace(IClassFactory *cf, REFIID clsid, LPCWSTR protocol, BOOL urlmon_protocol)
@@ -247,7 +248,7 @@ HRESULT get_protocol_handler(LPCWSTR url, CLSID *clsid, BOOL *urlmon_protocol, I
     hres = CoInternetParseUrl(url, PARSE_SCHEMA, 0, schema, sizeof(schema)/sizeof(schema[0]),
             &schema_len, 0);
     if(FAILED(hres) || !schema_len)
-        return schema_len ? hres : E_FAIL;
+        return schema_len ? hres : MK_E_SYNTAX;
 
     EnterCriticalSection(&session_cs);
 
diff --git a/dlls/urlmon/tests/protocol.c b/dlls/urlmon/tests/protocol.c
index 15c3bc4..cbbf514 100644
--- a/dlls/urlmon/tests/protocol.c
+++ b/dlls/urlmon/tests/protocol.c
@@ -3028,6 +3028,17 @@ static void test_CreateBinding(void)
     hres = IInternetSession_UnregisterNameSpace(session, &ClassFactory, wsz_test);
     ok(hres == S_OK, "UnregisterNameSpace failed: %08x\n", hres);
 
+    hres = IInternetSession_CreateBinding(session, NULL, test_url, NULL, NULL, &protocol, 0);
+    ok(hres == S_OK, "CreateBinding failed: %08x\n", hres);
+    ok(protocol != NULL, "protocol == NULL\n");
+
+    SET_EXPECT(QueryService_InternetProtocol);
+    hres = IInternetProtocol_Start(protocol, test_url, &protocol_sink, &bind_info, 0, 0);
+    ok(hres == MK_E_SYNTAX, "Start failed: %08x, expected MK_E_SYNTAX\n", hres);
+    CHECK_CALLED(QueryService_InternetProtocol);
+
+    IInternetProtocol_Release(protocol);
+
     IInternetSession_Release(session);
 }
 
@@ -3181,8 +3192,8 @@ START_TEST(protocol)
     pReleaseBindInfo = (void*) GetProcAddress(hurlmon, "ReleaseBindInfo");
     pCreateUri = (void*) GetProcAddress(hurlmon, "CreateUri");
 
-    if (!pCoInternetGetSession || !pReleaseBindInfo) {
-        win_skip("Various needed functions not present in IE 4.0\n");
+    if(!GetProcAddress(hurlmon, "CompareSecurityIds")) {
+        win_skip("Various needed functions not present, too old IE\n");
         return;
     }
 




More information about the wine-cvs mailing list