Skip to content

Commit ad6a6e4

Browse files
authored
Merge pull request #38270 from al45tair/problem/74394596
[Demangler] Make isSpecialized() more robust.
2 parents 306b185 + 2f4793c commit ad6a6e4

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

lib/Demangling/Remangler.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2899,6 +2899,13 @@ Demangle::mangleNode(NodePointer node, SymbolicResolver resolver,
28992899
}
29002900

29012901
bool Demangle::isSpecialized(Node *node) {
2902+
// We shouldn't get here with node being NULL; if we do, assert in debug,
2903+
// or return false at runtime (which should at least help diagnose things
2904+
// further if it happens).
2905+
assert(node);
2906+
if (!node)
2907+
return false;
2908+
29022909
switch (node->getKind()) {
29032910
case Node::Kind::BoundGenericStructure:
29042911
case Node::Kind::BoundGenericEnum:
@@ -2935,10 +2942,12 @@ bool Demangle::isSpecialized(Node *node) {
29352942
case Node::Kind::ModifyAccessor:
29362943
case Node::Kind::UnsafeAddressor:
29372944
case Node::Kind::UnsafeMutableAddressor:
2938-
return isSpecialized(node->getChild(0));
2945+
assert(node->getNumChildren() > 0);
2946+
return node->getNumChildren() > 0 && isSpecialized(node->getChild(0));
29392947

29402948
case Node::Kind::Extension:
2941-
return isSpecialized(node->getChild(1));
2949+
assert(node->getNumChildren() > 1);
2950+
return node->getNumChildren() > 1 && isSpecialized(node->getChild(1));
29422951

29432952
default:
29442953
return false;

0 commit comments

Comments
 (0)