QueryInterface should set *out to NULL on failure, as it seems to do in many different places.
This seems to be a regression from !888. One old game started to crash on startup with this merge request. I bisected it and it pointed to the commit 131ada052a2dbec66df695ce536ca048a2bd9174.
-- v4: wmvcore/tests: check out value for NULL in check_interface
From: Ivan Chikish nekotekina@gmail.com
QueryInterface should set *out to NULL on failure. Also change the log level on failure to FIXME. --- dlls/winegstreamer/wm_reader.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index 18b0e8a90bc..50e2c5fc175 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1700,7 +1700,8 @@ static HRESULT WINAPI unknown_inner_QueryInterface(IUnknown *iface, REFIID iid, *out = &reader->IWMReaderTimecode_iface; else { - WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid)); + FIXME("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid)); + *out = NULL; return E_NOINTERFACE; }
From: Ivan Chikish nekotekina@gmail.com
QueryInterface should set *out to NULL on failure. Also change the log level on failure to FIXME. --- dlls/wmvcore/async_reader.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/wmvcore/async_reader.c b/dlls/wmvcore/async_reader.c index a51018260b1..47de592c95c 100644 --- a/dlls/wmvcore/async_reader.c +++ b/dlls/wmvcore/async_reader.c @@ -544,7 +544,8 @@ static HRESULT WINAPI WMReader_QueryInterface(IWMReader *iface, REFIID iid, void *out = &reader->IReferenceClock_iface; else { - WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid)); + FIXME("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid)); + *out = NULL; return E_NOINTERFACE; }
From: Ivan Chikish nekotekina@gmail.com
--- dlls/wmvcore/tests/wmvcore.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index ae6071159f6..f07abb8d4bb 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -134,7 +134,7 @@ static WCHAR *load_resource(const WCHAR *name) static HRESULT check_interface_(unsigned int line, void *iface, REFIID riid, BOOL supported) { HRESULT hr, expected_hr; - IUnknown *unknown = iface, *out; + IUnknown *unknown = iface, *out = (IUnknown *)0xbeef;
expected_hr = supported ? S_OK : E_NOINTERFACE;
@@ -142,6 +142,8 @@ static HRESULT check_interface_(unsigned int line, void *iface, REFIID riid, BOO ok_(__FILE__, line)(hr == expected_hr, "Got hr %#lx, expected %#lx.\n", hr, expected_hr); if (SUCCEEDED(hr)) IUnknown_Release(out); + else if (!supported) + ok_(__FILE__, line)(out == NULL, "Expected out == NULL\n"); return hr; }
On Wed Feb 8 16:44:04 2023 +0000, Zebediah Figura wrote:
Can you please tests for this to dlls/wmvcore/tests/test?
I added a test.
This merge request was approved by Zebediah Figura.