On 5/12/07, hto@mail.cnt.ru hto@mail.cnt.ru 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.
James Hawkins wrote:
On 5/12/07, hto@mail.cnt.ru hto@mail.cnt.ru 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;
On 5/13/07, hto@mail.cnt.ru hto@mail.cnt.ru wrote:
James Hawkins wrote:
On 5/12/07, hto@mail.cnt.ru hto@mail.cnt.ru 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; }