James Hawkins : setupapi: Don't allow relative paths in
SetupCopyOEMInf.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Mar 28 06:42:09 CDT 2007
Module: wine
Branch: master
Commit: efa6591fff772c7fc88f3dd26500610f55d6b551
URL: http://source.winehq.org/git/wine.git/?a=commit;h=efa6591fff772c7fc88f3dd26500610f55d6b551
Author: James Hawkins <truiken at gmail.com>
Date: Wed Mar 28 01:53:57 2007 -0500
setupapi: Don't allow relative paths in SetupCopyOEMInf.
---
dlls/setupapi/misc.c | 7 +++++++
dlls/setupapi/tests/misc.c | 32 ++++++++++++++++----------------
2 files changed, 23 insertions(+), 16 deletions(-)
diff --git a/dlls/setupapi/misc.c b/dlls/setupapi/misc.c
index b1845b7..8257828 100644
--- a/dlls/setupapi/misc.c
+++ b/dlls/setupapi/misc.c
@@ -944,6 +944,13 @@ BOOL WINAPI SetupCopyOEMInfW( PCWSTR source, PCWSTR location,
return FALSE;
}
+ /* check for a relative path */
+ if (!(*source == '\\' || (*source && source[1] == ':')))
+ {
+ SetLastError(ERROR_FILE_NOT_FOUND);
+ return FALSE;
+ }
+
if (!GetWindowsDirectoryW( target, sizeof(target)/sizeof(WCHAR) )) return FALSE;
strcatW( target, inf_oem );
diff --git a/dlls/setupapi/tests/misc.c b/dlls/setupapi/tests/misc.c
index cee4823..ea11a6c 100644
--- a/dlls/setupapi/tests/misc.c
+++ b/dlls/setupapi/tests/misc.c
@@ -118,16 +118,22 @@ static void test_SetupCopyOEMInf(void)
SetLastError(0xdeadbeef);
res = SetupCopyOEMInf("", NULL, 0, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL);
ok(res == FALSE, "Expected FALSE, got %d\n", res);
- todo_wine
- {
- ok(GetLastError() == ERROR_FILE_NOT_FOUND,
- "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
- }
+ ok(GetLastError() == ERROR_FILE_NOT_FOUND,
+ "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
- /* try nonexistent SourceInfFileName */
+ /* try a relative nonexistent SourceInfFileName */
SetLastError(0xdeadbeef);
res = SetupCopyOEMInf("nonexistent", NULL, 0, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL);
ok(res == FALSE, "Expected FALSE, got %d\n", res);
+ ok(GetLastError() == ERROR_FILE_NOT_FOUND,
+ "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
+
+ /* try an absolute nonexistent SourceInfFileName */
+ lstrcpy(path, CURR_DIR);
+ lstrcat(path, "\\nonexistent");
+ SetLastError(0xdeadbeef);
+ res = SetupCopyOEMInf(path, NULL, 0, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL);
+ ok(res == FALSE, "Expected FALSE, got %d\n", res);
todo_wine
{
ok(GetLastError() == ERROR_FILE_NOT_FOUND,
@@ -140,11 +146,8 @@ static void test_SetupCopyOEMInf(void)
SetLastError(0xdeadbeef);
res = SetupCopyOEMInf(toolong, NULL, 0, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL);
ok(res == FALSE, "Expected FALSE, got %d\n", res);
- todo_wine
- {
- ok(GetLastError() == ERROR_FILE_NOT_FOUND,
- "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
- }
+ ok(GetLastError() == ERROR_FILE_NOT_FOUND,
+ "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
get_temp_filename(tmpfile);
create_inf_file(tmpfile);
@@ -153,11 +156,8 @@ static void test_SetupCopyOEMInf(void)
SetLastError(0xdeadbeef);
res = SetupCopyOEMInf(tmpfile, NULL, 0, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL);
ok(res == FALSE, "Expected FALSE, got %d\n", res);
- todo_wine
- {
- ok(GetLastError() == ERROR_FILE_NOT_FOUND,
- "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
- }
+ ok(GetLastError() == ERROR_FILE_NOT_FOUND,
+ "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
ok(file_exists(tmpfile), "Expected tmpfile to exist\n");
/* try SP_COPY_REPLACEONLY, dest does not exist */
More information about the wine-cvs
mailing list