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