Alexandre Julliard : kernel32/tests: Add tests for the ImageContainsCode flag.

Alexandre Julliard julliard at winehq.org
Wed Dec 27 14:46:15 CST 2017


Module: wine
Branch: master
Commit: 69a332fd03049a1e5d2c30f62e951d39905668d9
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=69a332fd03049a1e5d2c30f62e951d39905668d9

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Dec 27 18:37:56 2017 +0100

kernel32/tests: Add tests for the ImageContainsCode flag.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/tests/loader.c | 69 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 68 insertions(+), 1 deletion(-)

diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c
index b320af7..3bb754a 100644
--- a/dlls/kernel32/tests/loader.c
+++ b/dlls/kernel32/tests/loader.c
@@ -325,10 +325,21 @@ static void query_image_section( int id, const char *dll_name, const IMAGE_NT_HE
         "%u: ImageFileSize wrong %08x / %08x\n", id, image.ImageFileSize, file_size );
     ok( image.CheckSum == nt_header->OptionalHeader.CheckSum, "%u: CheckSum wrong %08x / %08x\n", id,
         image.CheckSum, nt_header->OptionalHeader.CheckSum );
+    if (nt_header->OptionalHeader.SizeOfCode || nt_header->OptionalHeader.AddressOfEntryPoint)
+        todo_wine
+        ok( image.ImageContainsCode == TRUE, "%u: ImageContainsCode wrong %u\n", id,
+            image.ImageContainsCode );
+    else if ((nt_header->OptionalHeader.SectionAlignment % page_size) ||
+             (nt_header->FileHeader.NumberOfSections == 1 &&
+              (section.Characteristics & IMAGE_SCN_MEM_EXECUTE)))
+        todo_wine
+        ok( image.ImageContainsCode == TRUE || broken(!image.ImageContainsCode), /* <= win8 */
+            "%u: ImageContainsCode wrong %u\n", id, image.ImageContainsCode );
+    else
+        ok( !image.ImageContainsCode, "%u: ImageContainsCode wrong %u\n", id, image.ImageContainsCode );
     /* FIXME: needs more work: */
     /* image.GpValue */
     /* image.ImageFlags */
-    /* image.ImageContainsCode */
 
     map_size.QuadPart = (nt_header->OptionalHeader.SizeOfImage + page_size - 1) & ~(page_size - 1);
     status = pNtQuerySection( mapping, SectionBasicInformation, &info, sizeof(info), NULL );
@@ -873,6 +884,38 @@ static void test_Loader(void)
         todo_wine
         ok( status == (is_wow64 ? STATUS_SUCCESS : STATUS_INVALID_IMAGE_WIN_64),
             "NtCreateSection error %08x\n", status );
+
+        nt64.OptionalHeader.SizeOfCode = 0;
+        nt64.OptionalHeader.AddressOfEntryPoint = 0x1000;
+        section.Characteristics = IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_CODE;
+        status = map_image_section( (IMAGE_NT_HEADERS *)&nt64, __LINE__ );
+        todo_wine
+        ok( status == (is_wow64 ? STATUS_SUCCESS : STATUS_INVALID_IMAGE_WIN_64),
+            "NtCreateSection error %08x\n", status );
+
+        nt64.OptionalHeader.SizeOfCode = 0;
+        nt64.OptionalHeader.AddressOfEntryPoint = 0;
+        section.Characteristics = IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE;
+        status = map_image_section( (IMAGE_NT_HEADERS *)&nt64, __LINE__ );
+        todo_wine
+        ok( status == (is_wow64 ? STATUS_SUCCESS : STATUS_INVALID_IMAGE_WIN_64),
+            "NtCreateSection error %08x\n", status );
+
+        nt64.OptionalHeader.SizeOfCode = 0x1000;
+        nt64.OptionalHeader.AddressOfEntryPoint = 0;
+        section.Characteristics = IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_CODE;
+        status = map_image_section( (IMAGE_NT_HEADERS *)&nt64, __LINE__ );
+        todo_wine
+        ok( status == (is_wow64 ? STATUS_SUCCESS : STATUS_INVALID_IMAGE_WIN_64),
+            "NtCreateSection error %08x\n", status );
+
+        nt64.OptionalHeader.SizeOfCode = 0;
+        nt64.OptionalHeader.AddressOfEntryPoint = 0;
+        section.Characteristics = IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_CODE;
+        status = map_image_section( (IMAGE_NT_HEADERS *)&nt64, __LINE__ );
+        todo_wine
+        ok( status == (is_wow64 ? STATUS_SUCCESS : STATUS_INVALID_IMAGE_WIN_64),
+            "NtCreateSection error %08x\n", status );
     }
     else
     {
@@ -917,6 +960,30 @@ static void test_Loader(void)
         status = map_image_section( (IMAGE_NT_HEADERS *)&nt32, __LINE__ );
         todo_wine
         ok( status == STATUS_SUCCESS, "NtCreateSection error %08x\n", status );
+
+        nt32.OptionalHeader.SizeOfCode = 0;
+        nt32.OptionalHeader.AddressOfEntryPoint = 0x1000;
+        section.Characteristics = IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_CODE;
+        status = map_image_section( (IMAGE_NT_HEADERS *)&nt32, __LINE__ );
+        ok( status == STATUS_SUCCESS, "NtCreateSection error %08x\n", status );
+
+        nt32.OptionalHeader.SizeOfCode = 0;
+        nt32.OptionalHeader.AddressOfEntryPoint = 0;
+        section.Characteristics = IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE;
+        status = map_image_section( (IMAGE_NT_HEADERS *)&nt32, __LINE__ );
+        ok( status == STATUS_SUCCESS, "NtCreateSection error %08x\n", status );
+
+        nt32.OptionalHeader.SizeOfCode = 0x1000;
+        nt32.OptionalHeader.AddressOfEntryPoint = 0;
+        section.Characteristics = IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_CODE;
+        status = map_image_section( (IMAGE_NT_HEADERS *)&nt32, __LINE__ );
+        ok( status == STATUS_SUCCESS, "NtCreateSection error %08x\n", status );
+
+        nt32.OptionalHeader.SizeOfCode = 0;
+        nt32.OptionalHeader.AddressOfEntryPoint = 0;
+        section.Characteristics = IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_CODE;
+        status = map_image_section( (IMAGE_NT_HEADERS *)&nt32, __LINE__ );
+        ok( status == STATUS_SUCCESS, "NtCreateSection error %08x\n", status );
     }
 
     nt_header.FileHeader.Machine = orig_machine;  /* restore it for the next tests */




More information about the wine-cvs mailing list