Skip to content

Commit a629d0c

Browse files
committed
Add check for calls to CLR_RT_SignatureParser
1 parent 70151e0 commit a629d0c

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

src/CLR/Core/TypeSystem.cpp

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -978,24 +978,39 @@ bool CLR_RT_TypeDef_Instance::ResolveToken(
978978
// Skip any leading SZARRAY or BYREF
979979
do
980980
{
981-
(parser.Advance(elem));
981+
if (parser.Advance(elem) != S_OK)
982+
{
983+
return false;
984+
}
982985
} while (elem.DataType == DATATYPE_SZARRAY || elem.DataType == DATATYPE_BYREF);
983986

984987
// If this is a closed‐generic instantiation header, peel off the wrapper
985988
if (elem.DataType == DATATYPE_GENERICINST)
986989
{
987990
// consume the CLASS/VALUETYPE marker
988-
(parser.Advance(elem));
991+
if (parser.Advance(elem) != S_OK)
992+
{
993+
return false;
994+
}
989995
// consume the generic‐definition token itself
990-
(parser.Advance(elem));
996+
if (parser.Advance(elem) != S_OK)
997+
{
998+
return false;
999+
}
9911000
// consume the count of generic arguments
992-
(parser.Advance(elem));
1001+
if (parser.Advance(elem) != S_OK)
1002+
{
1003+
return false;
1004+
}
9931005
}
9941006

9951007
// walk forward until a VAR (type‐generic) or MVAR (method‐generic) is hit
9961008
while (elem.DataType != DATATYPE_VAR && elem.DataType != DATATYPE_MVAR)
9971009
{
998-
(parser.Advance(elem));
1010+
if (parser.Advance(elem) != S_OK)
1011+
{
1012+
return false;
1013+
}
9991014
}
10001015

10011016
// If it's a type‐generic slot (!T), resolve against the caller's closed generic

0 commit comments

Comments
 (0)