http://bugs.winehq.org/show_bug.cgi?id=17893
Summary: The Alien Nations / Die Völker crashes: amstream GetFormat stub Product: Wine Version: 1.1.17 Platform: PC OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: quartz AssignedTo: wine-bugs@winehq.org ReportedBy: hoehle@users.sourceforge.net
I'd rather split the bug entries for "Die Völker / The Alien Nations" and Motocross Madness 2, bug 17836, comment 3, to warrant each application its own. Although the common cause is stubbed functionality in amstream, these apps might be fixed independently.
At start, The Alien Nations tries to display two Intel Indeo videos, somewhat differently. Unimplemented functionality in amstream and the app's not checking for some return codes yields to an exception and crash. More specifically, GetFormat() is expected to fill in a DDSURFACEDESC structure, which wine leaves uninitialised, causing the application to use random uninitialised data.
The first crash is prevented by having GetFormat() in dlls/amstream/mediastream.c fill in the dwWidth and dwHeight fields of the DDSURFACEDESC structure (I used 1 as stub value). The code used seems similar to that of http://msdn.microsoft.com/en-us/library/ms787928(VS.85).aspx except the app doesn't check the return code of GetFormat and hence proceeds with uninitialised memory from these two fields.
These two values are not enough to avoid a crash when displaying the second video. As the logs http://bugs.winehq.org/attachment.cgi?id=20129 in bug 17836, comment 4 suggest, the app presumably reads more fields from GetFormat: Z buffer depth and pixelformat, and passes that to ddraw. Actually, whether the app crashes there depends on WINEDEBUG settings, as the initialisation of the stack-based DDSURFACEDESC depends on former stack use. I've been able to play the game using WINEDEBUG=+all,-syslevel,-fixup,-dbghelp_dwarf,-heap,warn+heap,-gdi
I yet have to disassemble and see which other fields from DDSURFACEDESC are used in the second case.
BTW, one needs to work past bug #15915 in order to see this crash in "Alien Nations", which is a blocker for this issue. I did it by quickly hacking the fourcc comparison test in iccvid.c.
There exists a demo for this application, but demos typically display no intro videos, so I doubt it would exhibit this bug.
http://bugs.winehq.org/show_bug.cgi?id=17893
Jörg Höhle hoehle@users.sourceforge.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Depends on| |15915
http://bugs.winehq.org/show_bug.cgi?id=17893
Jörg Höhle hoehle@users.sourceforge.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |FIXME
http://bugs.winehq.org/show_bug.cgi?id=17893
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords|FIXME |
http://bugs.winehq.org/show_bug.cgi?id=17893
Zhenya Zenitur@yandex.ru changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever Confirmed|0 |1
--- Comment #1 from Zhenya Zenitur@yandex.ru 2009-04-05 03:36:19 --- *** This bug has been confirmed by popular vote. ***
http://bugs.winehq.org/show_bug.cgi?id=17893
Bug 17893 depends on bug 15915, which changed state.
Bug 15915 Summary: cinepak codec reportedly not installed, FourCC case mismatch http://bugs.winehq.org/show_bug.cgi?id=15915
What |Old Value |New Value ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED
http://bugs.winehq.org/show_bug.cgi?id=17893
--- Comment #2 from Jörg Höhle hoehle@users.sourceforge.net 2009-04-28 04:29:34 --- The second crash (= the crash in the second intro video) is prevented by having GetFormat() zero dwCaps beside filling dwWidth and dwHeight with 1. With that in place, the app displays a black screen instead of the video, and you get past it by clicking the mouse. Click twice (once for each intro video) and you get to the main menu. Hooray!
http://bugs.winehq.org/show_bug.cgi?id=17893
Jörg Höhle hoehle@users.sourceforge.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |titan.costa@wanadoo.fr
http://bugs.winehq.org/show_bug.cgi?id=17893
--- Comment #3 from Austin English austinenglish@gmail.com 2009-10-29 15:26:09 --- Is this still an issue in current (1.1.32 or newer) wine?
http://bugs.winehq.org/show_bug.cgi?id=17893
--- Comment #4 from Jörg Höhle hoehle@users.sourceforge.net 2010-03-24 17:16:01 --- In Wine-1.1.41 I was pleased to see that it does not crash and that you can skip the 2 black screens (no video) by clicking the mouse. Yet lines like
fixme:amstream:IDirectDrawMediaStreamImpl_GetFormat (...) stub! err:d3d:resource_init Out of adapter memory err:ddraw:IDirectDrawImpl_CreateNewSurface IWineD3DDevice::CreateSurface failed. hr = 8876017c
show that managing to start could be sheer good fortune. Using WINEDEBUG=warn+heap crashes. So it is too early to close this bug.
I never got around to complete said patch that lets GetFormat not return garbage to the caller, using mostly zeroes instead.
http://bugs.winehq.org/show_bug.cgi?id=17893
Jerome Leclanche adys.wh@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |adys.wh@gmail.com
--- Comment #5 from Jerome Leclanche adys.wh@gmail.com 2011-11-02 14:51:57 CDT --- (In reply to comment #4) Status on the patch?
http://bugs.winehq.org/show_bug.cgi?id=17893
GyB gyebro69@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |gyebro69@gmail.com
--- Comment #6 from GyB gyebro69@gmail.com 2012-05-11 11:58:04 CDT --- Still present as of wine-1.5.3-278-gcf89638. I tested with the GOG.com version of Alien Nations. This version of the game contains only 1 intro video. Intro.avi uses Cinepack codec. There is no crash, but the screen shows only black instead of the intro video.
fixme:amstream:IDirectDrawMediaStreamImpl_GetFormat (0x19e670)->(0x32fb40,(nil),(nil),(nil)) stub!
appears in the terminal during the black screen.
http://bugs.winehq.org/show_bug.cgi?id=17893
joaopa jeremielapuree@yahoo.fr changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |jeremielapuree@yahoo.fr
--- Comment #7 from joaopa jeremielapuree@yahoo.fr 2012-06-02 16:53:27 CDT --- Since crash is fixed, this bug could be closed as FIXED.
For the black screen, it could deserve to open a new bug report.
http://bugs.winehq.org/show_bug.cgi?id=17893
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED
--- Comment #8 from Austin English austinenglish@gmail.com 2012-06-05 02:21:03 CDT --- (In reply to comment #7)
Since crash is fixed, this bug could be closed as FIXED.
For the black screen, it could deserve to open a new bug report.
Fixed.
http://bugs.winehq.org/show_bug.cgi?id=17893
--- Comment #9 from Jörg Höhle hoehle@users.sourceforge.net 2012-06-05 09:34:52 CDT ---
fixme:amstream:IDirectDrawMediaStreamImpl_GetFormat [...] stub!
I doubt anything got fixed if the stub is still there.
In comment #4 I wrote:
managing to start could be sheer good fortune. Using WINEDEBUG=warn+heap crashes. So it is too early to close this bug.
Did you try using warn+heap? I'll have to test the retail version with the 2 intros when I'll find time.
http://bugs.winehq.org/show_bug.cgi?id=17893
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #10 from Alexandre Julliard julliard@winehq.org 2012-06-08 15:28:10 CDT --- Closing bugs fixed in 1.5.6.
http://bugs.winehq.org/show_bug.cgi?id=17893
Jörg Höhle hoehle@users.sourceforge.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|quartz |amstream
--- Comment #11 from Jörg Höhle hoehle@users.sourceforge.net 2012-12-15 11:15:30 CST --- Indeed, despite the GetFormat stub, the app does not crash in wine-1.5.19 any more, even in the presence of warn+heap. Presumably now other functions in Wine that receive the bogus uninitialized values are more robust. Zeroing some members of DDSURFACEDESC as in comment #2 is no more needed with this app.
The following sequence occurs twice, once for each intro video: fixme:amstream:IAMMultiMediaStreamImpl_AddMediaStream Specifying a stream object in params is not yet supported fixme:amstream:DirectDrawMediaStreamImpl_IDirectDrawMediaStream_GetFormat (0x125e34)->(0x33fadc,(nil),(nil),(nil)) stub! fixme:amstream:MediaStreamFilterImpl_Run (0x1a8ea8)->(1e00007a3a0): Stub! Here the screen is black and the app waits for a mouse click, then proceeds: fixme:amstream:MediaStreamFilterImpl_Pause (0x1a8ea8)->(): Stub! fixme:amstream:MediaStreamFilterImpl_Stop (0x1a8ea8)->(): Stub!
There are still several crashes involving amstream's GetFormat: bug #13816, bug #17836, bug #29926, bug #30364 and bug #30668.
https://bugs.winehq.org/show_bug.cgi?id=17893
Zebediah Figura z.figura12@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|amstream |quartz