#TODO check for dups
}
+property-map-table {
+ assembly assembly-with-properties.exe
+
+ #parent must be a valid typedef token
+ invalid offset table-row ( 0x15 0 ) set-ushort 0x8800
+
+ #bad propertylist
+ invalid offset table-row ( 0x15 0 ) + 2 set-ushort 0x0000
+ invalid offset table-row ( 0x15 0 ) + 2 set-ushort 0x8800
+
+ #propertylist must not be duplicated and increase monotonically
+ #property list is 1,3,7 we change the first to 4
+ invalid offset table-row ( 0x15 0 ) + 2 set-ushort 4
+}
+
+property-table {
+ assembly assembly-with-properties.exe
+
+ #valid flags (3)
+ #only bits 9, 10 and 12 are used
+ invalid offset table-row ( 0x17 0 ) set-bit 0
+ invalid offset table-row ( 0x17 0 ) set-bit 1
+ invalid offset table-row ( 0x17 0 ) set-bit 2
+ invalid offset table-row ( 0x17 0 ) set-bit 3
+ invalid offset table-row ( 0x17 0 ) set-bit 4
+ invalid offset table-row ( 0x17 0 ) set-bit 5
+ invalid offset table-row ( 0x17 0 ) set-bit 6
+ invalid offset table-row ( 0x17 0 ) set-bit 7
+ invalid offset table-row ( 0x17 0 ) set-bit 8
+ invalid offset table-row ( 0x17 0 ) set-bit 11
+ invalid offset table-row ( 0x17 0 ) set-bit 13
+ invalid offset table-row ( 0x17 0 ) set-bit 14
+ invalid offset table-row ( 0x17 0 ) set-bit 15
+
+ #valid non empty name (4)
+ invalid offset table-row ( 0x17 0 ) + 2 set-ushort 0
+ invalid offset table-row ( 0x17 0 ) + 2 set-ushort 0x8800
+
+ #type must be a non null type signature in the blob heap (6)
+ invalid offset table-row ( 0x17 0 ) + 4 set-ushort 0
+ invalid offset table-row ( 0x17 0 ) + 4 set-ushort 0x8800
+
+ #TODO signature must be of the right kind (7)
+
+ #if property has default, there must be a row in the defaults table
+ #we mark row zero as having default value
+ #field zero has default value
+ valid offset table-row (0x17 0) + 0 or-ushort 0x1000, #mark the property with hasdefault
+ offset table-row (0x04 0) + 0 set-ushort 0x0011, #clear literal and hasdefault from the field
+ offset table-row (0x0B 0) + 2 set-ushort 0x0006 #change the parent token to row 1 of the property table (0x2)
+
+ invalid offset table-row (0x17 0) + 0 or-ushort 0x1000
+
+ #TODO check for dups
+}
+
+methodimpl-table {
+ assembly assembly-with-complex-type.exe
+
+ #class shall be valid (2)
+ invalid offset table-row (0x19 0) set-ushort 0
+ invalid offset table-row (0x19 0) set-ushort 0x8800
+
+ #methodbody shall be valid (3)
+ #null
+ invalid offset table-row (0x19 0) + 2 set-ushort 0x0000
+ invalid offset table-row (0x19 0) + 2 set-ushort 0x0001
+ #out of range
+ invalid offset table-row (0x19 0) + 2 set-ushort 0x8800
+ invalid offset table-row (0x19 0) + 2 set-ushort 0x8801
+
+ #MethodDeclaration shall be valid
+ #null
+ invalid offset table-row (0x19 0) + 4 set-ushort 0x0000
+ invalid offset table-row (0x19 0) + 4 set-ushort 0x0001
+ #out of range
+ invalid offset table-row (0x19 0) + 4 set-ushort 0x8800
+ invalid offset table-row (0x19 0) + 4 set-ushort 0x8801
+
+
+ #TODO check MethodDeclaration method for virtual and owner type for !sealed (4,5)
+ #TODO check MethodBody for belonging to a super type of Class,been virtual and rva != 0 (6,7,8)
+ #TODO check MethodBody must belong to any ancestor or iface of Class (9)
+ #TODO check MethodDeclaration method shall not be final (10)
+ #TODO if MethodDeclaration is strict, it must be visible to Class (11)
+ #TODO the method signature of MethodBody must match of MethodDeclaration (12)
+ #TODO no dups
+}
+
+moduleref-table {
+ assembly assembly-with-module.exe
+
+ #string must be valid (2)
+ invalid offset table-row (0x1A 0) set-ushort 0
+ invalid offset table-row (0x1A 0) set-ushort 0x8801
+
+ #TODO there must be a row on the File table with the same name
+}
+
+typespec-table {
+ assembly assembly-with-complex-type.exe
+
+ #valid signature
+ invalid offset table-row (0x1B 0) set-ushort 0
+ invalid offset table-row (0x1B 0) set-ushort 0x8800
+}
+