On Fri, Mar 11, 2022 at 11:47 AM Zebediah Figura <zfigura@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