On 5/13/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
James Hawkins wrote:
> On 5/12/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>>
>> --- wine-0.9.37-orig/dlls/shell32/folders.c     2007-05-12
>> 22:53:06.000000000 +0000
>> +++ wine-0.9.37/dlls/shell32/folders.c  2007-05-13 00:17:00.000000000
>> +0000
>> @@ -81,11 +81,15 @@ IExtractIconW* IExtractIconW_Constructor
>>         TRACE("%p\n", pidl);
>>
>>         ei = HeapAlloc(GetProcessHeap(),0,sizeof(IExtractIconWImpl));
>> -       ei->ref=1;
>> -       ei->lpVtbl = &eivt;
>> -       ei->lpvtblPersistFile = &pfvt;
>> -       ei->lpvtblExtractIconA = &eiavt;
>> -       ei->pidl=ILClone(pidl);
>> +
>> +       if (ei)
>> +       {
>> +         ei->ref=1;
>> +         ei->lpVtbl = &eivt;
>> +         ei->lpvtblPersistFile = &pfvt;
>> +         ei->lpvtblExtractIconA = &eiavt;
>> +         ei->pidl=ILClone(pidl);
>> +       }
>>
>
> If a HeapAlloc call fails, you need to return with the appropriate error.
>

It is already done in ISF_ControlPanel_fnGetUIObjectOf(),
IShellFolder_fnGetUIObjectOf(), ISF_Desktop_fnGetUIObjectOf(),
ISF_MyComputer_fnGetUIObjectOf().

...
pObj = (LPUNKNOWN) IExtractIconW_Constructor(pidl);
...
if (SUCCEEDED(hr) && !pObj)
     hr = E_OUTOFMEMORY;
...
return hr;


Then you need to add an ERR message that the alloc failed, and return
immediately.  It'll save an indentation level.

ei = HeapAlloc();
if (!ei)
{
   ERR("HeapAlloc failed blah blah\n");
   return NULL;
}

--
James Hawkins


Reply via email to