MZ_Exec() patch, try 3

Dmitry Timoshkov dmitry at baikal.ru
Mon Oct 21 19:09:16 CDT 2002


<chrismorgan at rcn.com> wrote:

>    HANDLE hFile = CreateFileA( filename, GENERIC_READ, FILE_SHARE_READ,
>        NULL, OPEN_EXISTING, 0, 0);
>    BOOL ret = FALSE;
> +
> +  if(!GetBinaryTypeA(filename, &binType))   /* determine what kind of binary this is */
> +  {
> +    return FALSE; /* binary is not an executable */
> +  }

You are leaking the file handle here. Better move the GetBinaryTypeA call
before the CreateFileA.

> +      status = CreateProcessA (NULL, fullCmdLine, NULL, NULL, TRUE,
> +               0, envblock, NULL, &st, &pe);
> +
> +      WaitForSingleObject(pe.hProcess, INFINITE);  /* wait here until the child process is complete */
> +
> +      HeapFree(GetProcessHeap(), 0, fullCmdLine);  /* free the memory we allocated */
> +
> +      /* clean up PROCESS_INFORMATION handles if necessary */
> +      if(status)
> +      {
> +        CloseHandle(pe.hProcess);
> +        CloseHandle(pe.hThread);
> +      }

Potential wait on an invalid pe.hProcess. Better:

if (satus)
{
    WaitForSingleObject(pe.hProcess, INFINITE);
    CloseHandle(pe.hProcess);
    CloseHandle(pe.hThread);
}

-- 
Dmitry.






More information about the wine-devel mailing list