@@ -931,7 +931,7 @@ class MetadataReader {
931931 // This is ABI.
932932 static constexpr auto OffsetToName =
933933 roundUpToAlignment (size_t (12 ), sizeof (StoredPointer))
934- + sizeof (StoredPointer); ;
934+ + sizeof (StoredPointer);
935935
936936 // Read the name pointer.
937937 StoredPointer namePtr;
@@ -963,15 +963,19 @@ class MetadataReader {
963963 return _readMetadata<TargetEnumMetadata>(address);
964964 case MetadataKind::Existential: {
965965 StoredPointer numProtocolsAddress = address +
966- TargetExistentialTypeMetadata<Runtime>::OffsetToNumProtocols;
966+ TargetExistentialTypeMetadata<Runtime>::OffsetToNumProtocols;
967967 StoredPointer numProtocols;
968968 if (!Reader->readInteger (RemoteAddress (numProtocolsAddress),
969969 &numProtocols))
970970 return nullptr ;
971971
972+ // Make sure the number of protocols is reasonable
973+ if (numProtocols >= 256 )
974+ return nullptr ;
975+
972976 auto totalSize = sizeof (TargetExistentialTypeMetadata<Runtime>)
973- + numProtocols *
974- sizeof (ConstTargetMetadataPointer<Runtime, TargetProtocolDescriptor>);
977+ + numProtocols *
978+ sizeof (ConstTargetMetadataPointer<Runtime, TargetProtocolDescriptor>);
975979
976980 return _readMetadata (address, totalSize);
977981 }
@@ -997,13 +1001,18 @@ class MetadataReader {
9971001 return _readMetadata<TargetStructMetadata>(address);
9981002 case MetadataKind::Tuple: {
9991003 auto numElementsAddress = address +
1000- TargetTupleTypeMetadata<Runtime>::OffsetToNumElements;
1004+ TargetTupleTypeMetadata<Runtime>::OffsetToNumElements;
10011005 StoredSize numElements;
10021006 if (!Reader->readInteger (RemoteAddress (numElementsAddress),
10031007 &numElements))
10041008 return nullptr ;
10051009 auto totalSize = sizeof (TargetTupleTypeMetadata<Runtime>)
1006- + numElements * sizeof (StoredPointer);
1010+ + numElements * sizeof (StoredPointer);
1011+
1012+ // Make sure the number of elements is reasonable
1013+ if (numElements >= 256 )
1014+ return nullptr ;
1015+
10071016 return _readMetadata (address, totalSize);
10081017 }
10091018 }
0 commit comments