- IShellFolder_fnParseDisplayName(): return E_INVALIDARG instead of
  E_OUTOFMEMORY.
- IShellFolder_fnGetUIObjectOf(): preserve return error codes.
- IShellFolder_fnGetDisplayNameOf(): don't initialize whole character
  array with zero.

diff --git a/dlls/shell32/shfldr_fs.c b/dlls/shell32/shfldr_fs.c
index b25c3b2..9b47484 100644
--- a/dlls/shell32/shfldr_fs.c
+++ b/dlls/shell32/shfldr_fs.c
@@ -325,7 +325,7 @@
 {
     _ICOM_THIS_From_IShellFolder2 (IGenericSFImpl, iface)
 
-    HRESULT hr = E_OUTOFMEMORY;
+    HRESULT hr = E_INVALIDARG;
     LPCWSTR szNext = NULL;
     WCHAR szElement[MAX_PATH];
     CHAR szPath[MAX_PATH];
@@ -583,7 +583,7 @@
 	    hr = E_NOINTERFACE;
 	}
 
-	if (!pObj)
+	if (SUCCEEDED(hr) && !pObj)
 	    hr = E_OUTOFMEMORY;
 
 	*ppvOut = pObj;
@@ -652,10 +652,12 @@
 {
     _ICOM_THIS_From_IShellFolder2 (IGenericSFImpl, iface)
 
-    CHAR szPath[MAX_PATH] = "";
+    CHAR szPath[MAX_PATH];
     int len = 0;
     BOOL bSimplePidl;
 
+    *szPath = '\0';
+
     TRACE ("(%p)->(pidl=%p,0x%08lx,%p)\n", This, pidl, dwFlags, strRet);
     pdump (pidl);