Corrected ext2spice for the case where a port has been given more
than one name, because in that case one of the port records ends up with a null pointer to a node, and causes a crash condition. This can happen inadvertently, as when a connected node is not specifically designated a port, but is forced to be a port because of the connection.
This commit is contained in:
parent
4a0ad45627
commit
ad13e48a07
|
|
@ -1619,7 +1619,7 @@ esMakePorts(hc, cdata)
|
|||
nn = (EFNodeName *) HashGetValue(he);
|
||||
}
|
||||
|
||||
if (!(nn->efnn_node->efnode_flags & EF_PORT))
|
||||
if (nn->efnn_node && !(nn->efnn_node->efnode_flags & EF_PORT))
|
||||
{
|
||||
nn->efnn_node->efnode_flags |= EF_PORT;
|
||||
nn->efnn_port = -1; // Will be sorted later
|
||||
|
|
|
|||
|
|
@ -1668,7 +1668,7 @@ topVisit(def, doStub)
|
|||
sname = (EFNodeName *) HashGetValue(he);
|
||||
if (sname == NULL) continue;
|
||||
snode = sname->efnn_node;
|
||||
if (!(snode->efnode_flags & EF_PORT)) continue;
|
||||
if ((!snode) || (!(snode->efnode_flags & EF_PORT))) continue;
|
||||
for (nodeName = sname; nodeName != NULL; nodeName = nodeName->efnn_next)
|
||||
{
|
||||
portorder = nodeName->efnn_port;
|
||||
|
|
@ -1729,7 +1729,7 @@ topVisit(def, doStub)
|
|||
if (sname == NULL) continue; /* Should not happen */
|
||||
snode = sname->efnn_node;
|
||||
|
||||
if (!(snode->efnode_flags & EF_PORT)) continue;
|
||||
if ((!snode) || (!(snode->efnode_flags & EF_PORT))) continue;
|
||||
|
||||
for (nodeName = sname; nodeName != NULL; nodeName = nodeName->efnn_next)
|
||||
{
|
||||
|
|
@ -1787,7 +1787,7 @@ topVisit(def, doStub)
|
|||
if (sname == NULL) continue;
|
||||
snode = sname->efnn_node;
|
||||
|
||||
if (snode->efnode_flags & EF_SUBS_PORT)
|
||||
if (snode && (snode->efnode_flags & EF_SUBS_PORT))
|
||||
{
|
||||
if (snode->efnode_name->efnn_port < 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -466,6 +466,8 @@ efBuildEquiv(def, nodeName1, nodeName2)
|
|||
if (efWarn)
|
||||
efReadError("Merged nodes %s and %s\n", nodeName1, nodeName2);
|
||||
efNodeMerge(&nn1->efnn_node, &nn2->efnn_node);
|
||||
if (nn1->efnn_port > 0) nn2->efnn_port = nn1->efnn_port;
|
||||
else if (nn2->efnn_port > 0) nn1->efnn_port = nn2->efnn_port;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue