<[EMAIL PROTECTED]> 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.




Reply via email to