From 5864234051b12ea3f84541096b5c9fcefd732ff8 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Mon, 25 Jan 2010 22:37:59 +0300 Subject: [PATCH] xmllite: Don't release reader input reference on failure, as newer versions do. --- dlls/xmllite/reader.c | 15 +++------------ dlls/xmllite/tests/reader.c | 4 +++- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c index 89dcf1d9d8e..e08e8fb5978 100644 --- a/dlls/xmllite/reader.c +++ b/dlls/xmllite/reader.c @@ -103,11 +103,8 @@ static ULONG WINAPI xmlreader_Release(IXmlReader *iface) ref = InterlockedDecrement(&This->ref); if (ref == 0) { - if (This->input) - { - IUnknown_Release(This->stream); - IUnknown_Release(This->input); - } + if (This->input) IUnknown_Release(This->input); + if (This->stream) IUnknown_Release(This->stream); HeapFree(GetProcessHeap(), 0, This); } @@ -154,13 +151,7 @@ static HRESULT WINAPI xmlreader_SetInput(IXmlReader* iface, IUnknown *input) /* set stream for supplied IXmlReaderInput */ hr = xmlreaderinput_query_for_stream(This->input, (void**)&This->stream); - if (hr != S_OK) - { - /* IXmlReaderInput doesn't provide streaming interface */ - IUnknown_Release(This->input); - This->input = NULL; - } - else + if (hr == S_OK) This->state = XmlReadState_Initial; return hr; diff --git a/dlls/xmllite/tests/reader.c b/dlls/xmllite/tests/reader.c index c594d480060..4636d35e9ee 100644 --- a/dlls/xmllite/tests/reader.c +++ b/dlls/xmllite/tests/reader.c @@ -439,6 +439,7 @@ static void test_readerinput(void) ok(ref == 3, "Expected 3, got %d\n", ref); IUnknown_Release(reader_input); + IUnknown_Release(reader_input); IUnknown_Release(reader_input); IStream_Release(stream); @@ -479,7 +480,8 @@ static void test_readerinput(void) IUnknown_Release(input); ref = IUnknown_AddRef(reader_input); - ok(ref == 2, "Expected 2, got %d\n", ref); + ok(ref == 3 || broken(ref == 2) /* versions 1.0.x and 1.1.x - XP, Vista */, + "Expected 3, got %d\n", ref); IUnknown_Release(reader_input); /* repeat another time, no check or caching here */ input_iids.count = 0;