From 73267a20e1d5fa8283fb63b3b8a8e7acdb6de238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Thu, 25 Oct 2007 10:28:19 +0000 Subject: [PATCH] Add traces Do not crash in IExtractIconW::GetIconLocation if out pointers are NULL svn path=/trunk/; revision=29872 --- reactos/dll/win32/shell32/extracticon.c | 43 ++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/reactos/dll/win32/shell32/extracticon.c b/reactos/dll/win32/shell32/extracticon.c index 686a8c9661f..3c9f1cf4f4b 100644 --- a/reactos/dll/win32/shell32/extracticon.c +++ b/reactos/dll/win32/shell32/extracticon.c @@ -12,6 +12,8 @@ #include #include +WINE_DEFAULT_DEBUG_CHANNEL(shell); + struct IconLocation { LPWSTR file; @@ -58,6 +60,8 @@ IconExtraction_DefaultExtractIconInit_QueryInterface( { struct IconExtraction *s = CONTAINING_RECORD(This, struct IconExtraction, defaultExtractIconInitImpl); + TRACE("(%p, %s, %p)\n", This, debugstr_guid(riid), ppvObject); + if (!ppvObject) return E_POINTER; @@ -89,6 +93,7 @@ IconExtraction_DefaultExtractIconInit_AddRef( { struct IconExtraction *s = CONTAINING_RECORD(This, struct IconExtraction, defaultExtractIconInitImpl); ULONG refCount = InterlockedIncrement((PLONG)&s->ref); + TRACE("(%p)\n", This); return refCount; } @@ -98,9 +103,8 @@ IconExtraction_DefaultExtractIconInit_Release( { struct IconExtraction *s = CONTAINING_RECORD(This, struct IconExtraction, defaultExtractIconInitImpl); ULONG refCount; - - if (!This) - return E_POINTER; + + TRACE("(%p)\n", This); refCount = InterlockedDecrement((PLONG)&s->ref); if (refCount == 0) @@ -122,6 +126,9 @@ IconExtraction_DefaultExtractIconInit_SetDefaultIcon( int iIcon) { struct IconExtraction *s = CONTAINING_RECORD(This, struct IconExtraction, defaultExtractIconInitImpl); + + TRACE("(%p, %s, %d)\n", This, debugstr_w(pszFile), iIcon); + DuplicateString(pszFile, &s->defaultIcon.file); if (!s->defaultIcon.file) return E_OUTOFMEMORY; @@ -135,6 +142,9 @@ IconExtraction_DefaultExtractIconInit_SetFlags( UINT uFlags) { struct IconExtraction *s = CONTAINING_RECORD(This, struct IconExtraction, defaultExtractIconInitImpl); + + TRACE("(%p, 0x%x)\n", This, uFlags); + s->flags = uFlags; return S_OK; } @@ -144,6 +154,7 @@ IconExtraction_DefaultExtractIconInit_SetKey( IDefaultExtractIconInit *This, HKEY hkey) { + FIXME("(%p, %p)\n", This, hkey); UNIMPLEMENTED; return E_NOTIMPL; } @@ -155,6 +166,9 @@ IconExtraction_DefaultExtractIconInit_SetNormalIcon( int iIcon) { struct IconExtraction *s = CONTAINING_RECORD(This, struct IconExtraction, defaultExtractIconInitImpl); + + TRACE("(%p, %s, %d)\n", This, debugstr_w(pszFile), iIcon); + DuplicateString(pszFile, &s->normalIcon.file); if (!s->normalIcon.file) return E_OUTOFMEMORY; @@ -169,6 +183,9 @@ IconExtraction_DefaultExtractIconInit_SetOpenIcon( int iIcon) { struct IconExtraction *s = CONTAINING_RECORD(This, struct IconExtraction, defaultExtractIconInitImpl); + + TRACE("(%p, %s, %d)\n", This, debugstr_w(pszFile), iIcon); + DuplicateString(pszFile, &s->openIcon.file); if (!s->openIcon.file) return E_OUTOFMEMORY; @@ -183,6 +200,9 @@ IconExtraction_DefaultExtractIconInit_SetShortcutIcon( int iIcon) { struct IconExtraction *s = CONTAINING_RECORD(This, struct IconExtraction, defaultExtractIconInitImpl); + + TRACE("(%p, %s, %d)\n", This, debugstr_w(pszFile), iIcon); + DuplicateString(pszFile, &s->shortcutIcon.file); if (!s->shortcutIcon.file) return E_OUTOFMEMORY; @@ -229,6 +249,11 @@ IconExtraction_ExtractIconW_GetIconLocation( const struct IconLocation *icon = NULL; SIZE_T cb; + TRACE("(%p, 0x%x, %s, 0x%x, %p, %p)\n", This, uFlags, debugstr_w(szIconFile), cchMax, piIndex, pwFlags); + + if (!piIndex || !pwFlags) + return E_POINTER; + if (uFlags & GIL_DEFAULTICON) icon = s->defaultIcon.file ? &s->defaultIcon : &s->normalIcon; else if (uFlags & GIL_FORSHORTCUT) @@ -259,6 +284,9 @@ IconExtraction_ExtractIconW_Extract( HICON *phiconSmall, UINT nIconSize) { + TRACE("(%p, %s, %u, %p, %p, %u)\n", This, debugstr_w(pszFile), + nIconIndex, phiconLarge, phiconSmall, nIconSize); + /* Nothing to do, ExtractIconW::GetIconLocation should be enough */ return S_FALSE; } @@ -308,7 +336,7 @@ IconExtraction_ExtractIconA_GetIconLocation( if (!szIconFileW) return E_OUTOFMEMORY; } - + hr = IconExtraction_ExtractIconW_GetIconLocation( &s->extractIconWImpl, uFlags, szIconFileW, cchMax, piIndex, pwFlags); if (SUCCEEDED(hr) && cchMax > 0) @@ -388,6 +416,8 @@ IconExtraction_PersistFile_GetClassID( IPersistFile *This, CLSID *pClassID) { + TRACE("(%p, %p)\n", This, pClassID); + if (!pClassID) return E_POINTER; @@ -399,6 +429,7 @@ static HRESULT STDMETHODCALLTYPE IconExtraction_PersistFile_IsDirty( IPersistFile *This) { + FIXME("(%p)\n", This); UNIMPLEMENTED; return E_NOTIMPL; } @@ -409,6 +440,7 @@ IconExtraction_PersistFile_Load( LPCOLESTR pszFileName, DWORD dwMode) { + FIXME("(%p, %s, %u)\n", This, debugstr_w(pszFileName), dwMode); UNIMPLEMENTED; return E_NOTIMPL; } @@ -419,6 +451,7 @@ IconExtraction_PersistFile_Save( LPCOLESTR pszFileName, BOOL fRemember) { + FIXME("(%p, %s, %d)\n", This, debugstr_w(pszFileName), fRemember); UNIMPLEMENTED; return E_NOTIMPL; } @@ -428,6 +461,7 @@ IconExtraction_PersistFile_SaveCompleted( IPersistFile *This, LPCOLESTR pszFileName) { + FIXME("(%p, %s)\n", This, debugstr_w(pszFileName)); UNIMPLEMENTED; return E_NOTIMPL; } @@ -437,6 +471,7 @@ IconExtraction_PersistFile_GetCurFile( IPersistFile *This, LPOLESTR *ppszFileName) { + FIXME("(%p, %p)\n", This, ppszFileName); UNIMPLEMENTED; return E_NOTIMPL; }