From 1f7d144ff9c804a22b4f9cca72d68476fe29a8b2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Lauri=20Kentt=C3=A4?= Date: Sat, 4 Feb 2017 14:24:50 +0200 Subject: [PATCH] cabinet: Make Extract fail on read-only files. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Lauri Kenttä Signed-off-by: Alexandre Julliard --- dlls/cabinet/cabinet_main.c | 4 +-- dlls/cabinet/tests/extract.c | 64 ++++++++++++++++++-------------------------- 2 files changed, 27 insertions(+), 41 deletions(-) diff --git a/dlls/cabinet/cabinet_main.c b/dlls/cabinet/cabinet_main.c index 239849d3552..8af0fb1e6d2 100644 --- a/dlls/cabinet/cabinet_main.c +++ b/dlls/cabinet/cabinet_main.c @@ -253,9 +253,7 @@ static INT_PTR CDECL fdi_notify_extract(FDINOTIFICATIONTYPE fdint, PFDINOTIFICAT hFile = CreateFileA(szFullPath, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - if (hFile == INVALID_HANDLE_VALUE) - hFile = 0; - else if (node) + if (hFile != INVALID_HANDLE_VALUE && node) node->DoExtract = FALSE; } diff --git a/dlls/cabinet/tests/extract.c b/dlls/cabinet/tests/extract.c index d39043fb1cc..c3d45102f2d 100644 --- a/dlls/cabinet/tests/extract.c +++ b/dlls/cabinet/tests/extract.c @@ -642,18 +642,15 @@ static void test_Extract(void) session.Operation = EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES; res = pExtract(&session, "extract.cab"); node = session.FileList; - todo_wine - { - ok(res == HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) || res == E_FAIL, - "Expected HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) or E_FAIL, got %08x\n", res); - ok(session.FileSize == 6, "Expected 6, got %d\n", session.FileSize); - ok(session.Error.erfOper == FDIERROR_USER_ABORT, - "Expected FDIERROR_USER_ABORT, got %d\n", session.Error.erfOper); - ok(session.Error.fError == TRUE, "Expected TRUE, got %d\n", session.Error.fError); - ok(session.FileCount == 1, "Expected 1, got %d\n", session.FileCount); - ok(!lstrcmpA(session.CurrentFile, "dest\\a.txt"), - "Expected dest\\a.txt, got %s\n", session.CurrentFile); - } + ok(res == HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) || res == E_FAIL, + "Expected HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) or E_FAIL, got %08x\n", res); + ok(session.FileSize == 6, "Expected 6, got %d\n", session.FileSize); + ok(session.Error.erfOper == FDIERROR_USER_ABORT, + "Expected FDIERROR_USER_ABORT, got %d\n", session.Error.erfOper); + ok(session.Error.fError == TRUE, "Expected TRUE, got %d\n", session.Error.fError); + ok(session.FileCount == 1, "Expected 1, got %d\n", session.FileCount); + ok(!lstrcmpA(session.CurrentFile, "dest\\a.txt"), + "Expected dest\\a.txt, got %s\n", session.CurrentFile); ok(session.Error.erfType == 0, "Expected 0, got %d\n", session.Error.erfType); ok(session.Operation == (EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES), "Expected EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES, got %d\n", session.Operation); @@ -662,15 +659,12 @@ static void test_Extract(void) ok(!session.FilterList, "Expected empty filter list\n"); ok(getFileSize("dest\\a.txt") == 11, "Expected dest\\a.txt to be 11 bytes\n"); ok(!DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to be read-only\n"); - todo_wine - { - ok(!DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to not exist\n"); - ok(!check_list(&node, "testdir\\d.txt", FALSE), "list entry should not exist\n"); - ok(!check_list(&node, "testdir\\c.txt", FALSE), "list entry should not exist\n"); - ok(!check_list(&node, "b.txt", FALSE), "list entry should not exist\n"); - } + ok(!DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to not exist\n"); + ok(!DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to not exist\n"); + ok(!DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to not exist\n"); + ok(!check_list(&node, "testdir\\d.txt", FALSE), "list entry should not exist\n"); + ok(!check_list(&node, "testdir\\c.txt", FALSE), "list entry should not exist\n"); + ok(!check_list(&node, "b.txt", FALSE), "list entry should not exist\n"); ok(!check_list(&node, "a.txt", FALSE), "list entry should not exist\n"); free_file_list(&session); @@ -686,18 +680,15 @@ static void test_Extract(void) session.Operation = EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES; res = pExtract(&session, "extract.cab"); node = session.FileList; - todo_wine - { - ok(res == HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) || res == E_FAIL, - "Expected HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) or E_FAIL, got %08x\n", res); - ok(session.FileSize == 26, "Expected 26, got %d\n", session.FileSize); - ok(session.Error.erfOper == FDIERROR_USER_ABORT, - "Expected FDIERROR_USER_ABORT, got %d\n", session.Error.erfOper); - ok(session.Error.fError == TRUE, "Expected TRUE, got %d\n", session.Error.fError); - ok(session.FileCount == 3, "Expected 3, got %d\n", session.FileCount); - ok(!lstrcmpA(session.CurrentFile, "dest\\testdir\\c.txt"), - "Expected dest\\c.txt, got %s\n", session.CurrentFile); - } + ok(res == HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) || res == E_FAIL, + "Expected HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) or E_FAIL, got %08x\n", res); + ok(session.FileSize == 26, "Expected 26, got %d\n", session.FileSize); + ok(session.Error.erfOper == FDIERROR_USER_ABORT, + "Expected FDIERROR_USER_ABORT, got %d\n", session.Error.erfOper); + ok(session.Error.fError == TRUE, "Expected TRUE, got %d\n", session.Error.fError); + ok(session.FileCount == 3, "Expected 3, got %d\n", session.FileCount); + ok(!lstrcmpA(session.CurrentFile, "dest\\testdir\\c.txt"), + "Expected dest\\c.txt, got %s\n", session.CurrentFile); ok(session.Error.erfType == 0, "Expected 0, got %d\n", session.Error.erfType); ok(session.Operation == (EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES), "Expected EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES, got %d\n", session.Operation); @@ -708,11 +699,8 @@ static void test_Extract(void) ok(DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to exist\n"); ok(DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to exist\n"); ok(!DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to be read-only\n"); - todo_wine - { - ok(!DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to not exist\n"); - ok(!check_list(&node, "testdir\\d.txt", FALSE), "list entry should not exist\n"); - } + ok(!DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to not exist\n"); + ok(!check_list(&node, "testdir\\d.txt", FALSE), "list entry should not exist\n"); ok(!check_list(&node, "testdir\\c.txt", FALSE), "list entry wrong\n"); ok(!check_list(&node, "b.txt", FALSE), "list entry wrong\n"); ok(!check_list(&node, "a.txt", TRUE), "list entry wrong\n"); -- 2.11.4.GIT