https://bugs.winehq.org/show_bug.cgi?id=19469
--- Comment #17 from Dmitry Timoshkov dmitry@baikal.ru --- Created attachment 76438 --> https://bugs.winehq.org/attachment.cgi?id=76438 patch
ResEdit calls URLOpenStream() to check for updates. URLOpenStream() calls a helper that starts an asynchronous operation and returns (0x401e8) S_ASYNCHRONOUS. Unfortunately URLOpenStream() implementation uses stack to store an asynchronous callback which probably gets overwritten at some point and callback->lpVtbl becomes NULL, which leads to a crash when a callback is invoked.
Attached patch replaces stack by a dynamic memory allocation, and now ResEdit is able to detect that an update is available, and calls MessageBox() to inform the user. Regardless of the answer (Yes/No) right after the MessageBox() returns ResEdit crashes with an illegal instruction exception. It looks like some sort of stack smashing on API return.
Probably this could be called a progress, I'm done for now. Everyone is welcome to continue an investigation.