Skip to content

Commit 824fa48

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 115acc2 commit 824fa48

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
@@ -1803,6 +1803,14 @@ static DynamicCastResult tryCastToExtendedExistential(
18031803
selfType = metatypeMetadata->InstanceType;
18041804
node = node->getChild(0)->getChild(0);
18051805
}
1806+
1807+
// Make sure the thing we've pulled out at the end is a dependent
1808+
// generic parameter.
1809+
if (!(node->getKind() == Demangle::Node::Kind::Type &&
1810+
node->getNumChildren() &&
1811+
node->getChild(0)->getKind() ==
1812+
Demangle::Node::Kind::DependentGenericParamType))
1813+
return DynamicCastResult::Failure;
18061814
}
18071815

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

0 commit comments

Comments
 (0)