Dmitry Timoshkov : msxml3: Use site's base URI when loading an XML file.
Alexandre Julliard
julliard at winehq.org
Thu Jul 9 17:10:38 CDT 2020
Module: wine
Branch: master
Commit: f62b05dadd368d2d175c30e110149d4c5eb74413
URL: https://source.winehq.org/git/wine.git/?a=commit;h=f62b05dadd368d2d175c30e110149d4c5eb74413
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Thu Jul 9 15:18:11 2020 +0800
msxml3: Use site's base URI when loading an XML file.
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/msxml3/bsc.c | 17 ++++++++++++++---
dlls/msxml3/domdoc.c | 2 +-
dlls/msxml3/msxml_private.h | 2 +-
3 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/dlls/msxml3/bsc.c b/dlls/msxml3/bsc.c
index 0b9e679bda..5cebe09333 100644
--- a/dlls/msxml3/bsc.c
+++ b/dlls/msxml3/bsc.c
@@ -242,9 +242,10 @@ static const struct IBindStatusCallbackVtbl bsc_vtbl =
bsc_OnObjectAvailable
};
-HRESULT create_uri(const WCHAR *url, IUri **uri)
+HRESULT create_uri(IUri *base, const WCHAR *url, IUri **uri)
{
WCHAR fileUrl[INTERNET_MAX_URL_LENGTH];
+ HRESULT hr;
TRACE("%s\n", debugstr_w(url));
@@ -271,7 +272,17 @@ HRESULT create_uri(const WCHAR *url, IUri **uri)
url = fileUrl;
}
- return CreateUri(url, Uri_CREATE_ALLOW_RELATIVE | Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME, 0, uri);
+ hr = CreateUri(url, Uri_CREATE_ALLOW_RELATIVE | Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME, 0, uri);
+ if (hr == S_OK && base)
+ {
+ IUri *rebased_uri;
+
+ hr = CoInternetCombineIUri(base, *uri, 0, &rebased_uri, 0);
+ IUri_Release(*uri);
+ *uri = rebased_uri;
+ }
+
+ return hr;
}
HRESULT create_moniker_from_url(LPCWSTR url, IMoniker **mon)
@@ -281,7 +292,7 @@ HRESULT create_moniker_from_url(LPCWSTR url, IMoniker **mon)
TRACE("%s\n", debugstr_w(url));
- if (FAILED(hr = create_uri(url, &uri)))
+ if (FAILED(hr = create_uri(NULL, url, &uri)))
return hr;
hr = CreateURLMonikerEx2(NULL, uri, mon, 0);
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c
index 6d611c590f..8d45c546fb 100644
--- a/dlls/msxml3/domdoc.c
+++ b/dlls/msxml3/domdoc.c
@@ -2304,7 +2304,7 @@ static HRESULT WINAPI domdoc_load(
This->properties->uri = NULL;
}
- hr = create_uri(filename, &uri);
+ hr = create_uri(This->base_uri, filename, &uri);
if (SUCCEEDED(hr))
hr = CreateURLMonikerEx2(NULL, uri, &mon, 0);
if ( SUCCEEDED(hr) )
diff --git a/dlls/msxml3/msxml_private.h b/dlls/msxml3/msxml_private.h
index 918c0d3d44..5fce060985 100644
--- a/dlls/msxml3/msxml_private.h
+++ b/dlls/msxml3/msxml_private.h
@@ -532,7 +532,7 @@ static inline const CLSID* SchemaCache_version(MSXML_VERSION v)
typedef struct bsc_t bsc_t;
HRESULT create_moniker_from_url(LPCWSTR, IMoniker**) DECLSPEC_HIDDEN;
-HRESULT create_uri(const WCHAR *, IUri **) DECLSPEC_HIDDEN;
+HRESULT create_uri(IUri *base, const WCHAR *, IUri **) DECLSPEC_HIDDEN;
HRESULT bind_url(IMoniker*, HRESULT (*onDataAvailable)(void*,char*,DWORD), void*, bsc_t**) DECLSPEC_HIDDEN;
HRESULT detach_bsc(bsc_t*) DECLSPEC_HIDDEN;
IUri *get_base_uri(IUnknown *) DECLSPEC_HIDDEN;
More information about the wine-cvs
mailing list