Skip to content

Commit c35e122

Browse files
committed
Check The Last Node After Unwrapping Metatypes
Ensure the last node after all of the destructuring really is a dependent generic param type. If it isn't, something has gone horribly wrong.
1 parent ce2dfeb commit c35e122

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

stdlib/public/runtime/DynamicCast.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1802,6 +1802,14 @@ static DynamicCastResult tryCastToExtendedExistential(
18021802
selfType = metatypeMetadata->InstanceType;
18031803
node = node->getChild(0)->getChild(0);
18041804
}
1805+
1806+
// Make sure the thing we've pulled out at the end is a dependent
1807+
// generic parameter.
1808+
if (!(node->getKind() == Demangle::Node::Kind::Type &&
1809+
node->getNumChildren() &&
1810+
node->getChild(0)->getKind() ==
1811+
Demangle::Node::Kind::DependentGenericParamType))
1812+
return DynamicCastResult::Failure;
18051813
}
18061814

18071815
llvm::SmallVector<const void *, 8> allGenericArgsVec;

0 commit comments

Comments
 (0)