[PATCH v2 2/2] winusb: Add WinUsb_Free semi-stub.

Mohamad Al-Jaf mohamadaljaf at gmail.com
Fri Mar 11 18:05:19 CST 2022


On Fri, Mar 11, 2022 at 11:47 AM Zebediah Figura <zfigura at codeweavers.com>
wrote:
> On 3/10/22 22:57, Mohamad Al-Jaf wrote:
> >
+/***********************************************************************
> > + *           WinUsb_Free (winusb.@)
> > + */
> > +BOOL WINAPI WinUsb_Free(WINUSB_INTERFACE_HANDLE handle)
> > +{
> > +    FIXME( "(%p) - semi-stub\n", handle );
> > +    if (handle) HeapFree( GetProcessHeap(), 0, handle );
> > +    return TRUE;
> > +}
>
> This doesn't make any sense by itself. Where is that handle coming from?

Hi Zebediah,

Thanks for the feedback.

Yeah, it doesn't make sense to me either. I asked about this in my previous
patch, but no one replied.

> Also, I thought about adding heap_free(handle) to make this
> into a semi-stub, but wouldn't that cause heap corruption
> since the handle is not initialized? I'm not sure why
> it's being called first and not the function that
> initializes WINUSB_INTERFACE_HANDLE.

I don't know why the game calls WinUsb_Free prior to initializing the
handle. What is it passing, a NULL pointer? If not, where did it get the
handle?

This is why I added the if statement.

Also, this doesn't seem to be affecting just this game, but an application
called REVELPROG-IS.[1] It too calls WinUsb_Free prior to initializing a
handle.

Perhaps they're creating a SafeWinUsbHandle, in which case the handle can
be assigned IntPtr.Zero before WinUsb_Free is called, but again this
appears to be a NULL pointer.[2]

In any case, would it cause a problem to leave this function as a
semi-stub? The if statement should prevent HeapFree from attempting to free
a NULL pointer. If not, I can resubmit the original stub.

This patch isn't intended to fix applications that rely on winusb, just
games. Proton just disabled the dll to fix the issue and this is why I
offered to stub the entire dll even though it's likely not needed. The
native dll can be used for applications, but seeing as how it's a Windows
driver I don't think it would work properly, if at all.

[1]
https://forum.reveltronics.com/viewtopic.php?p=2579&sid=ee42ab8a5b5737fb909eaabb39daaa15#p2579
[2]
https://books.google.ca/books?id=pkefBgAAQBAJ&pg=PA319&lpg=PA319&dq=SafeWinUsbHandle+winusb_free&source=bl&ots=6-kwcOzvyG&sig=ACfU3U1BahyBUO0oIzH8Gfrrc0XEkvM_SA&hl=en&sa=X&ved=2ahUKEwiyzpfpmr_2AhWgAZ0JHfUaAKIQ6AF6BAgEEAM#v=onepage&q=SafeWinUsbHandle%20winusb_free&f=false

--
Kind regards,
Mohamad
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20220311/e3f780ae/attachment.htm>


More information about the wine-devel mailing list