@@ -1823,4 +1823,53 @@ mod tests {
18231823 assert_eq ! ( header. dos_header. pe_pointer, 0x40 ) ;
18241824 assert_eq ! ( header. coff_header. number_of_sections, 3 ) ;
18251825 }
1826+
1827+ // MASM COFF file that has an empty string table
1828+ static EMPTY_STRING_TABLE_OBJ : [ u8 ; 424 ] = [
1829+ 0x64 , 0x86 , 0x03 , 0x00 , 0xf3 , 0xcb , 0x20 , 0x69 , 0x02 , 0x01 , 0x00 , 0x00 , 0x09 , 0x00 , 0x00 ,
1830+ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x2e , 0x74 , 0x65 , 0x78 , 0x74 , 0x24 , 0x6d , 0x6e , 0x00 , 0x00 ,
1831+ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x00 , 0x00 , 0x00 , 0x8c , 0x00 , 0x00 , 0x00 , 0x00 ,
1832+ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20 , 0x00 , 0x50 , 0x60 ,
1833+ 0x2e , 0x64 , 0x61 , 0x74 , 0x61 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
1834+ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
1835+ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x40 , 0x00 , 0x50 , 0xc0 , 0x2e , 0x64 , 0x65 , 0x62 , 0x75 ,
1836+ 0x67 , 0x24 , 0x53 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x74 , 0x00 , 0x00 , 0x00 ,
1837+ 0x8d , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
1838+ 0x00 , 0x40 , 0x00 , 0x10 , 0x42 , 0xc3 , 0x04 , 0x00 , 0x00 , 0x00 , 0xf1 , 0x00 , 0x00 , 0x00 , 0x68 ,
1839+ 0x00 , 0x00 , 0x00 , 0x2d , 0x00 , 0x01 , 0x11 , 0x00 , 0x00 , 0x00 , 0x00 , 0x43 , 0x3a , 0x5c , 0x55 ,
1840+ 0x73 , 0x65 , 0x72 , 0x73 , 0x5c , 0x43 , 0x6f , 0x6e , 0x74 , 0x6f , 0x73 , 0x6f , 0x5c , 0x77 , 0x69 ,
1841+ 0x6e , 0x2d , 0x6b , 0x65 , 0x78 , 0x70 , 0x5c , 0x61 , 0x63 , 0x6c , 0x5f , 0x65 , 0x64 , 0x69 , 0x74 ,
1842+ 0x2e , 0x6f , 0x62 , 0x6a , 0x00 , 0x37 , 0x00 , 0x3c , 0x11 , 0x03 , 0x02 , 0x00 , 0x00 , 0xd0 , 0x00 ,
1843+ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0e , 0x00 , 0x2a , 0x00 , 0x84 , 0x86 , 0x00 ,
1844+ 0x00 , 0x4d , 0x69 , 0x63 , 0x72 , 0x6f , 0x73 , 0x6f , 0x66 , 0x74 , 0x20 , 0x28 , 0x52 , 0x29 , 0x20 ,
1845+ 0x4d , 0x61 , 0x63 , 0x72 , 0x6f , 0x20 , 0x41 , 0x73 , 0x73 , 0x65 , 0x6d , 0x62 , 0x6c , 0x65 , 0x72 ,
1846+ 0x00 , 0x00 , 0x00 , 0x40 , 0x63 , 0x6f , 0x6d , 0x70 , 0x2e , 0x69 , 0x64 , 0x84 , 0x86 , 0x03 , 0x01 ,
1847+ 0xff , 0xff , 0x00 , 0x00 , 0x03 , 0x00 , 0x40 , 0x66 , 0x65 , 0x61 , 0x74 , 0x2e , 0x30 , 0x30 , 0x10 ,
1848+ 0x00 , 0x00 , 0x00 , 0xff , 0xff , 0x00 , 0x00 , 0x03 , 0x00 , 0x2e , 0x74 , 0x65 , 0x78 , 0x74 , 0x24 ,
1849+ 0x6d , 0x6e , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x00 , 0x00 , 0x00 , 0x03 , 0x01 , 0x01 , 0x00 , 0x00 ,
1850+ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
1851+ 0x2e , 0x64 , 0x61 , 0x74 , 0x61 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x02 , 0x00 , 0x00 ,
1852+ 0x00 , 0x03 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
1853+ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x2e , 0x64 , 0x65 , 0x62 , 0x75 , 0x67 , 0x24 , 0x53 , 0x00 ,
1854+ 0x00 , 0x00 , 0x00 , 0x03 , 0x00 , 0x00 , 0x00 , 0x03 , 0x01 , 0x74 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
1855+ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x65 , 0x6d , 0x70 ,
1856+ 0x74 , 0x79 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x00 , 0x20 , 0x00 , 0x02 , 0x00 ,
1857+ 0x04 , 0x00 , 0x00 , 0x00 ,
1858+ ] ;
1859+
1860+ #[ test]
1861+ fn parse_coff_with_empty_string_table ( ) {
1862+ // This test verifies that a COFF file with an empty string table can be parsed
1863+ // The file has a string table with only the length field (4 bytes)
1864+ let coff = Coff :: parse ( & EMPTY_STRING_TABLE_OBJ ) . unwrap ( ) ;
1865+
1866+ // Should have sections, symbols, and a minimal string table
1867+ assert_eq ! ( coff. header. number_of_sections, 3 ) ;
1868+ assert_eq ! ( coff. header. number_of_symbol_table, 9 ) ;
1869+ assert ! ( coff. strings. is_some( ) ) ;
1870+
1871+ // String table should be empty (only contains the length field)
1872+ let strings = coff. strings . unwrap ( ) ;
1873+ assert_eq ! ( strings. len( ) , 0 ) ; // Empty string table content
1874+ }
18261875}
0 commit comments