[NTDLL_APITEST] Add test for a section where PointerToRawData = 0 while SizeOfRawData... 5002/head
authorRoy Tam <roytam@gmail.com>
Fri, 20 Jan 2023 09:02:37 +0000 (17:02 +0800)
committerRoy Tam <roytam@gmail.com>
Fri, 20 Jan 2023 09:02:37 +0000 (17:02 +0800)
modules/rostests/apitests/ntdll/NtMapViewOfSection.c

index 8723696..4a6e187 100644 (file)
@@ -1498,7 +1498,8 @@ static struct _RAW_SIZE_IMAGE_FILE
     IMAGE_SECTION_HEADER data_header;
     IMAGE_SECTION_HEADER zdata_header;
     IMAGE_SECTION_HEADER rsrc_header;
-    BYTE pad[488];
+    IMAGE_SECTION_HEADER bss_header;
+    BYTE pad[448];
     BYTE text_data[0x1200];
     BYTE data_data[0x1200];
     BYTE rsrc_data[0x400];
@@ -1522,7 +1523,7 @@ static struct _RAW_SIZE_IMAGE_FILE
         /* IMAGE_FILE_HEADER */
         {
             IMAGE_FILE_MACHINE_I386, /* Machine */
-            4, /* NumberOfSections */
+            5, /* NumberOfSections */
             0x47EFDF09, /* TimeDateStamp */
             0, /* PointerToSymbolTable */
             0, /* NumberOfSymbols */
@@ -1646,6 +1647,21 @@ static struct _RAW_SIZE_IMAGE_FILE
         IMAGE_SCN_MEM_READ |
             IMAGE_SCN_CNT_INITIALIZED_DATA, /* Characteristics */
     },
+    /* IMAGE_SECTION_HEADER */
+    {
+        /* PointerToRawData = 0 while SizeOfRawData != 0, CORE-18797 */
+        ".bss", /* Name */
+        { 0x400 }, /* Misc.VirtualSize */
+        0x5000, /* VirtualAddress */
+        0x600, /* SizeOfRawData */
+        0, /* PointerToRawData */
+        0, /* PointerToRelocations */
+        0, /* PointerToLinenumbers */
+        0, /* NumberOfRelocations */
+        0, /* NumberOfLinenumbers */
+        IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_READ |
+            IMAGE_SCN_CNT_UNINITIALIZED_DATA, /* Characteristics */
+    },
     /* fill */
     { 0 },
     /* text */
@@ -1802,6 +1818,10 @@ Test_RawSize(ULONG TestNumber)
             ok_hex(ImageFile->zdata_header.SizeOfRawData, RawSizeImageFile.zdata_header.SizeOfRawData);
             ok_hex(ImageFile->zdata_header.PointerToRawData, 0);
 
+            /* PointerToRawData = 0 resets SizeOfRawData to 0, CORE-18797 */
+            ok_hex(ImageFile->bss_header.SizeOfRawData, 0);
+            ok_hex(ImageFile->bss_header.PointerToRawData, 0);
+
 #define TEST_BYTE(n, v) \
     StartSeh() \
         ok(Bytes[n] == v, "[%lu] Bytes[%u] = 0x%x, expected 0x%x\n", \