diff --git a/VERSION b/VERSION index aba983b0..cb917cf0 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.3.45 +8.3.46 diff --git a/extflat/EFbuild.c b/extflat/EFbuild.c index c5614f98..44c9c019 100644 --- a/extflat/EFbuild.c +++ b/extflat/EFbuild.c @@ -155,23 +155,31 @@ efBuildNode(def, isSubsnode, nodeName, nodeCap, x, y, layerName, av, ac) if (efWarn) efReadError("Warning: duplicate node name %s\n", nodeName); - /* Just add to C, perim, area of existing node */ - newnode = newname->efnn_node; - newnode->efnode_cap += (EFCapValue) nodeCap; - for (n = 0; n < efNumResistClasses && ac > 1; n++, ac -= 2) + /* newnode should exist if newname does. Having a NULL node */ + /* may be caused by detached labels "connected" to space. */ + + if ((newnode = newname->efnn_node) != NULL) { - newnode->efnode_pa[n].pa_area += atoi(*av++); - newnode->efnode_pa[n].pa_perim += atoi(*av++); + /* Just add to C, perim, area of existing node */ + newnode->efnode_cap += (EFCapValue) nodeCap; + for (n = 0; n < efNumResistClasses && ac > 1; n++, ac -= 2) + { + newnode->efnode_pa[n].pa_area += atoi(*av++); + newnode->efnode_pa[n].pa_perim += atoi(*av++); + } + return; } - return; } - /* Allocate a new node with 'nodeName' as its single name */ - newname = (EFNodeName *) mallocMagic((unsigned)(sizeof (EFNodeName))); - newname->efnn_hier = EFStrToHN((HierName *) NULL, nodeName); - newname->efnn_port = -1; /* No port assignment */ - newname->efnn_next = NULL; - HashSetValue(he, (char *) newname); + if (!newname) + { + /* Allocate a new node with 'nodeName' as its single name */ + newname = (EFNodeName *) mallocMagic((unsigned)(sizeof (EFNodeName))); + newname->efnn_hier = EFStrToHN((HierName *) NULL, nodeName); + newname->efnn_port = -1; /* No port assignment */ + newname->efnn_next = NULL; + HashSetValue(he, (char *) newname); + } /* New node itself */ size = sizeof (EFNode) + (efNumResistClasses - 1) * sizeof (EFPerimArea);