ole32: don't crash when running the marshal tests on Vista.

Reece Dunn msclrhd at googlemail.com
Thu Jul 31 02:56:13 CDT 2008


2008/7/31 Rob Shearman <robertshearman at gmail.com>:
> 2008/7/30 Reece Dunn <msclrhd at googlemail.com>:
>> When running the ole32:marshal tests on Vista, the call to
>> CoUnmarshalInterface fails. This results in pProxy being NULL which
>> then causes the crash on the QueryInterface call.
>>
>> This patch makes sure that the pProxy-dependant tests are only called
>> when pProxy is valid.
>
> We need to work out why the test is failing - possibly it requires
> more implementation of the object we are marshalling than in previous
> versions of Windows.

Looking at this in more detail, from
(http://test.winehq.org/data/daafda22f840edc9a584abc7925f9ee17ef18228/vista_APetaccia-NXbitSet/ole32:marshal.html):

  marshal.c:2337: Test failed: "CoUnmarshalInterface" failed with
error 0x80040154
  marshal.c:2340: Test failed: Number of locks should be > 0, but actually is 0
  test failed: timed out

on my current setup, I get the first two, but the test crashes. This
may be because I have SP1 installed which makes it like the 2008
results in most cases. This is backed up by the results at
http://test.winehq.org/data/a0289148e14728e45587b8cb17f90862d8400939/,
where there are Vista, Vista SP1 and 2008 test results.

NOTE: 0x80040154 is "class no registered", so I suspect that this is
due to the IWineTest interface not being registered.

> Also, the typical way of detecting failure in our COM code in Wine is
> to check the return value rather than whether a output object is NULL
> or not.

The test_marshal_and_unmarshal_invalid test in marshal.c has a similar
check (line 405), so there is already a presedence for this.

- Reece



More information about the wine-devel mailing list