shell32/tests: Hack SHGetFileInfo() so it does not crash and add a test for it (for bug 6827).

Francois Gouget fgouget at free.fr
Sat Jan 6 12:24:06 CST 2007


---

Resubmitting the test without skip_wine(). So I hacked SHGetFileInfo() 
so it at least does not crash.

 dlls/shell32/shell32_main.c    |    8 ++++++++
 dlls/shell32/tests/shlfileop.c |   22 ++++++++++++++++++++++
 2 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/dlls/shell32/shell32_main.c b/dlls/shell32/shell32_main.c
index e3f0789..b04be5c 100644
--- a/dlls/shell32/shell32_main.c
+++ b/dlls/shell32/shell32_main.c
@@ -356,6 +356,14 @@ DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes,
          (flags & (SHGFI_ATTRIBUTES|SHGFI_EXETYPE|SHGFI_PIDL)))
         return FALSE;
 
+    if ( (flags & SHGFI_USEFILEATTRIBUTES) && 
+         (flags & (SHGFI_ICONLOCATION | SHGFI_ICON | SHGFI_SYSICONINDEX)) )
+    {
+        FIXME("This combination of flags is not supported yet\n");
+        /* And it would cause a crash, so return false instead */
+        return FALSE;
+    }
+
     /* windows initializes these values regardless of the flags */
     if (psfi != NULL)
     {
diff --git a/dlls/shell32/tests/shlfileop.c b/dlls/shell32/tests/shlfileop.c
index c016b56..c6d8004 100644
--- a/dlls/shell32/tests/shlfileop.c
+++ b/dlls/shell32/tests/shlfileop.c
@@ -111,6 +111,26 @@ static void clean_after_shfo_tests(void)
     RemoveDirectoryA("nonexistent");
 }
 
+
+static void test_get_file_info(void)
+{
+    DWORD rc;
+    SHFILEINFO shfi;
+
+    strcpy(shfi.szDisplayName, "dummy");
+    shfi.iIcon=0xdeadbeef;
+    rc=SHGetFileInfoA("c:\\nonexistent", FILE_ATTRIBUTE_DIRECTORY,
+                      &shfi, sizeof(shfi),
+                      SHGFI_ICONLOCATION | SHGFI_USEFILEATTRIBUTES);
+    todo_wine ok(rc, "SHGetFileInfoA(c:\\nonexistent) returned %d\n", rc);
+    if (rc)
+    {
+        ok(strcpy(shfi.szDisplayName, "dummy") != 0, "SHGetFileInfoA(c:\\nonexistent) displayname is not set\n");
+        ok(shfi.iIcon != 0xdeadbeef, "SHGetFileInfoA(c:\\nonexistent) iIcon is not set\n");
+    }
+}
+
+
 /*
  puts into the specified buffer file names with current directory.
  files - string with file names, separated by null characters. Ends on a double
@@ -855,6 +875,8 @@ START_TEST(shlfileop)
 
     clean_after_shfo_tests();
 
+    test_get_file_info();
+
     init_shfo_tests();
     test_delete();
     clean_after_shfo_tests();
-- 
1.4.4.2




More information about the wine-patches mailing list