2010/1/21 Paul Vriens paul.vriens.wine@gmail.com:
On 01/21/2010 06:54 PM, Reece Dunn wrote:
2010/1/21 Nikolay Sivovbunglehead@gmail.com:
On 1/21/2010 20:41, Reece Dunn wrote:
2010/1/21 Nikolay Sivovbunglehead@gmail.com:
On 1/21/2010 19:49, Paul Vriens wrote:
On 21 jan 2010, at 17:26, Nikolay Sivovbunglehead@gmail.com wrote:
> > On 1/21/2010 19:19, Paul Vriens wrote: > >> >> On 01/18/2010 10:28 PM, Nikolay Sivov wrote: >> >>> >>> Add basic test structure for IXmlReader >>> >>> >> >> Hi Nikolay, >> >> This one crashes on Vista without a servicepack at: >> >> + IXmlReader_Release(reader); >> +} >> >> All the calls before that one look ok (they produce the expected >> output). >> >> I guess "vista without an SP" can be considered broken(), but how do >> deal with that? >> >> > > That's a bit strange. Could you test for reader pointer around this: > --- > hr = pCreateXmlReader(&IID_IXmlReader, (LPVOID*)&reader, NULL); > ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); > --- > Add reader = 0xdeadbeef; and test what is reader after a call. > > > >
Hm. So it's created ok, at least looks so.
I don't see how to fix this. We could remove this _Release of course, but will leak.
Can't you do something like:
ULONG count; count = IXmlReader_AddRef(reader); ok (count == 2, "Expected AddRef to return 2, got: %d\n", count) while (count> 0) count = IXmlReader_Release(reader);
Maybe. It's ugly of course, cause it's not clear at all why refcount could be zero just after creation with success code and not zero pointer. Btw, could you try it?
I don't have access to a Windows test machine to try it out, and don't have access to my home Linux dev box, so can't create a patch for the test bot at the moment.
- Reece
Just checked and it doesn't help. The first release is fine but the second crashes again.
It's really broken on Vista with no SP.
?_?
Hmmm. According to http://msdn.microsoft.com/en-us/magazine/cc163436.aspx, this should work (but then msdn isn't always right).
Do you know what happens if the CoGetMalloc/IMalloc_DidAlloc call is not made?
According to that MSDN article, the CoInitialize is not needed. Does removing it make it work on Vista SP0?
Shouldn't the IMalloc object be released?
IMalloc_DidAlloc returns an int instead of a HRESULT (not a big issue, just can be confusing if someone expects HRESULT codes for the value of hr -- doing hr != 1 looks odd).
Is the IXmlReader object valid (i.e. does a call to Read fail with an error that there is no input set, or does it crash)?
XmlNodeType nodeType = XmlNodeType_None; hr = IXmlReader_Read(reader, &nodeType); ok(FAILED(hr), "IXmlReader_Read should fail!");
- Reece