Nikolay Sivov : kernel32/tests: Make loader tests independent from each other.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Jan 28 15:45:34 CST 2015


Module: wine
Branch: master
Commit: f670be8ec8883943151373f640ab4532e5605d83
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f670be8ec8883943151373f640ab4532e5605d83

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed Jan 28 01:02:58 2015 +0300

kernel32/tests: Make loader tests independent from each other.

---

 dlls/kernel32/tests/loader.c | 49 ++++++++++++++++++++++++++++----------------
 1 file changed, 31 insertions(+), 18 deletions(-)

diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c
index af43779..afa90fd 100644
--- a/dlls/kernel32/tests/loader.c
+++ b/dlls/kernel32/tests/loader.c
@@ -78,7 +78,7 @@ static PVOID RVAToAddr(DWORD_PTR rva, HMODULE module)
 
 static IMAGE_DOS_HEADER dos_header;
 
-static IMAGE_NT_HEADERS nt_header =
+static const IMAGE_NT_HEADERS nt_header_template =
 {
     IMAGE_NT_SIGNATURE, /* Signature */
     {
@@ -123,8 +123,8 @@ static IMAGE_NT_HEADERS nt_header =
       4, /* MajorSubsystemVersion */
       0, /* MinorSubsystemVersion */
       0, /* Win32VersionValue */
-      sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + 0x1000, /* SizeOfImage */
-      sizeof(dos_header) + sizeof(nt_header), /* SizeOfHeaders */
+      sizeof(dos_header) + sizeof(nt_header_template) + sizeof(IMAGE_SECTION_HEADER) + 0x1000, /* SizeOfImage */
+      sizeof(dos_header) + sizeof(nt_header_template), /* SizeOfHeaders */
       0, /* CheckSum */
       IMAGE_SUBSYSTEM_WINDOWS_CUI, /* Subsystem */
       0, /* DllCharacteristics */
@@ -266,14 +266,14 @@ static void test_Loader(void)
         },
         { sizeof(dos_header),
           1, sizeof(IMAGE_OPTIONAL_HEADER), 0x1000, 0x1000,
-          sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + 0xe00,
-          sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER),
+          sizeof(dos_header) + sizeof(nt_header_template) + sizeof(IMAGE_SECTION_HEADER) + 0xe00,
+          sizeof(dos_header) + sizeof(nt_header_template) + sizeof(IMAGE_SECTION_HEADER),
           { ERROR_BAD_EXE_FORMAT } /* XP doesn't like too small image size */
         },
         { sizeof(dos_header),
           1, sizeof(IMAGE_OPTIONAL_HEADER), 0x1000, 0x1000,
-          sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + 0x1000,
-          sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER),
+          sizeof(dos_header) + sizeof(nt_header_template) + sizeof(IMAGE_SECTION_HEADER) + 0x1000,
+          sizeof(dos_header) + sizeof(nt_header_template) + sizeof(IMAGE_SECTION_HEADER),
           { ERROR_SUCCESS }
         },
         { sizeof(dos_header),
@@ -284,25 +284,25 @@ static void test_Loader(void)
         },
         { sizeof(dos_header),
           1, sizeof(IMAGE_OPTIONAL_HEADER), 0x200, 0x200,
-          sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + 0x200,
-          sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER),
+          sizeof(dos_header) + sizeof(nt_header_template) + sizeof(IMAGE_SECTION_HEADER) + 0x200,
+          sizeof(dos_header) + sizeof(nt_header_template) + sizeof(IMAGE_SECTION_HEADER),
           { ERROR_SUCCESS, ERROR_INVALID_ADDRESS } /* vista is more strict */
         },
         { sizeof(dos_header),
           1, sizeof(IMAGE_OPTIONAL_HEADER), 0x200, 0x1000,
-          sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + 0x1000,
-          sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER),
+          sizeof(dos_header) + sizeof(nt_header_template) + sizeof(IMAGE_SECTION_HEADER) + 0x1000,
+          sizeof(dos_header) + sizeof(nt_header_template) + sizeof(IMAGE_SECTION_HEADER),
           { ERROR_BAD_EXE_FORMAT } /* XP doesn't like alignments */
         },
         { sizeof(dos_header),
           1, sizeof(IMAGE_OPTIONAL_HEADER), 0x1000, 0x200,
-          sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + 0x1000,
-          sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER),
+          sizeof(dos_header) + sizeof(nt_header_template) + sizeof(IMAGE_SECTION_HEADER) + 0x1000,
+          sizeof(dos_header) + sizeof(nt_header_template) + sizeof(IMAGE_SECTION_HEADER),
           { ERROR_SUCCESS }
         },
         { sizeof(dos_header),
           1, sizeof(IMAGE_OPTIONAL_HEADER), 0x1000, 0x200,
-          sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + 0x1000,
+          sizeof(dos_header) + sizeof(nt_header_template) + sizeof(IMAGE_SECTION_HEADER) + 0x1000,
           0x200,
           { ERROR_SUCCESS }
         },
@@ -363,7 +363,7 @@ static void test_Loader(void)
         /* the following data mimics the PE image which upack creates */
         { 0x10,
           1, 0x148, 0x1000, 0x200,
-          sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + 0x1000,
+          sizeof(dos_header) + sizeof(nt_header_template) + sizeof(IMAGE_SECTION_HEADER) + 0x1000,
           0x200,
           { ERROR_SUCCESS }
         },
@@ -384,7 +384,8 @@ static void test_Loader(void)
     SIZE_T size;
     BOOL ret;
     NTSTATUS status;
-    WORD orig_machine = nt_header.FileHeader.Machine;
+    WORD orig_machine = nt_header_template.FileHeader.Machine;
+    IMAGE_NT_HEADERS nt_header;
 
     /* prevent displaying of the "Unable to load this DLL" message box */
     SetErrorMode(SEM_FAILCRITICALERRORS);
@@ -395,6 +396,7 @@ static void test_Loader(void)
     {
         GetTempFileNameA(temp_path, "ldr", 0, dll_name);
 
+        nt_header = nt_header_template;
         nt_header.FileHeader.NumberOfSections = td[i].number_of_sections;
         nt_header.FileHeader.SizeOfOptionalHeader = td[i].size_of_optional_header;
 
@@ -589,13 +591,14 @@ todo_wine
         ok(ret, "DeleteFile error %d\n", GetLastError());
     }
 
+    nt_header = nt_header_template;
     nt_header.FileHeader.NumberOfSections = 1;
     nt_header.FileHeader.SizeOfOptionalHeader = sizeof(IMAGE_OPTIONAL_HEADER);
 
     nt_header.OptionalHeader.SectionAlignment = page_size;
     nt_header.OptionalHeader.FileAlignment = page_size;
     nt_header.OptionalHeader.SizeOfHeaders = sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER);
-    nt_header.OptionalHeader.SizeOfImage = nt_header.OptionalHeader.SizeOfImage + page_size;
+    nt_header.OptionalHeader.SizeOfImage = sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + page_size;
 
     status = map_image_section( &nt_header );
     ok( status == STATUS_SUCCESS, "NtCreateSection error %08x\n", status );
@@ -1054,6 +1057,8 @@ static void test_section_access(void)
 
     for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
     {
+        IMAGE_NT_HEADERS nt_header;
+
         GetTempFileNameA(temp_path, "ldr", 0, dll_name);
 
         /*trace("creating %s\n", dll_name);*/
@@ -1068,6 +1073,7 @@ static void test_section_access(void)
         ret = WriteFile(hfile, &dos_header, sizeof(dos_header), &dummy, NULL);
         ok(ret, "WriteFile error %d\n", GetLastError());
 
+        nt_header = nt_header_template;
         nt_header.FileHeader.NumberOfSections = 1;
         nt_header.FileHeader.SizeOfOptionalHeader = sizeof(IMAGE_OPTIONAL_HEADER);
         nt_header.FileHeader.Characteristics = IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_DLL | IMAGE_FILE_RELOCS_STRIPPED;
@@ -1235,11 +1241,13 @@ static void test_import_resolution(void)
     for (test = 0; test < 3; test++)
     {
 #define DATA_RVA(ptr) (page_size + ((char *)(ptr) - (char *)&data))
-        nt = nt_header;
+        nt = nt_header_template;
         nt.FileHeader.NumberOfSections = 1;
         nt.FileHeader.SizeOfOptionalHeader = sizeof(IMAGE_OPTIONAL_HEADER);
         nt.FileHeader.Characteristics = IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_32BIT_MACHINE | IMAGE_FILE_RELOCS_STRIPPED;
         if (test != 2) nt.FileHeader.Characteristics |= IMAGE_FILE_DLL;
+        nt.OptionalHeader.SectionAlignment = page_size;
+        nt.OptionalHeader.FileAlignment = 0x200;
         nt.OptionalHeader.ImageBase = 0x12340000;
         nt.OptionalHeader.SizeOfImage = 2 * page_size;
         nt.OptionalHeader.SizeOfHeaders = nt.OptionalHeader.FileAlignment;
@@ -2015,6 +2023,7 @@ static void test_ExitProcess(void)
     void *addr;
     LARGE_INTEGER offset;
     SIZE_T size;
+    IMAGE_NT_HEADERS nt_header;
 
 #if !defined(__i386__) && !defined(__x86_64__)
     skip("x86 specific ExitProcess test\n");
@@ -2055,6 +2064,7 @@ static void test_ExitProcess(void)
     ret = WriteFile(file, &dos_header, sizeof(dos_header), &dummy, NULL);
     ok(ret, "WriteFile error %d\n", GetLastError());
 
+    nt_header = nt_header_template;
     nt_header.FileHeader.NumberOfSections = 1;
     nt_header.FileHeader.SizeOfOptionalHeader = sizeof(IMAGE_OPTIONAL_HEADER);
     nt_header.FileHeader.Characteristics = IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_DLL | IMAGE_FILE_RELOCS_STRIPPED;
@@ -2510,6 +2520,8 @@ static void test_ResolveDelayLoadedAPI(void)
     DWORD dummy, file_size, i;
     WORD hint = 0;
     BOOL ret;
+    IMAGE_NT_HEADERS nt_header;
+
     static const struct test_data
     {
         BOOL func;
@@ -2569,6 +2581,7 @@ static void test_ResolveDelayLoadedAPI(void)
     ret = WriteFile(hfile, &dos_header, sizeof(dos_header), &dummy, NULL);
     ok(ret, "WriteFile error %d\n", GetLastError());
 
+    nt_header = nt_header_template;
     nt_header.FileHeader.NumberOfSections = 2;
     nt_header.FileHeader.SizeOfOptionalHeader = sizeof(IMAGE_OPTIONAL_HEADER);
 




More information about the wine-cvs mailing list