From f12a155ea72d72218913ea989159da1bec587be2 Mon Sep 17 00:00:00 2001 From: Tim Edwards Date: Fri, 23 Sep 2022 15:44:49 -0400 Subject: [PATCH] Found a crash condition reported by Abhinav Uppal where labels that are unattached (type = space) will cause magic to crash on the command "lef write -hide"---The lowest level issue was in SelectChunk(), so for good measure SelectChunk() now checks for type == TT_SPACE, and "lef write" does also. --- lef/lefWrite.c | 6 ++++-- select/selCreate.c | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lef/lefWrite.c b/lef/lefWrite.c index d0d322a4..b1487feb 100644 --- a/lef/lefWrite.c +++ b/lef/lefWrite.c @@ -1442,8 +1442,10 @@ lefWriteMacro(def, f, scale, setback, pinonly, toplayer, domaster) /* SelectDef. */ pNum = DBPlane(lab->lab_type); - DBPaintPlane(SelectDef->cd_planes[pNum], &carea, - DBStdPaintTbl(lab->lab_type, pNum), (PaintUndoInfo *) NULL); + if (pNum >= 0) + DBPaintPlane(SelectDef->cd_planes[pNum], &carea, + DBStdPaintTbl(lab->lab_type, pNum), + (PaintUndoInfo *) NULL); /* Remember this area since it's going to get erased */ newlll = (labelLinkedList *)mallocMagic(sizeof(labelLinkedList)); diff --git a/select/selCreate.c b/select/selCreate.c index dfc5734f..dbbf2726 100644 --- a/select/selCreate.c +++ b/select/selCreate.c @@ -715,6 +715,9 @@ SelectChunk(scx, type, xMask, pArea, less) SelSetDisplay(SelectUse, SelectRootDef); } + /* Ignore if type is TT_SPACE */ + if (type == TT_SPACE) return; + /* The chunk is computed iteratively. First extract a small * region (defined by INITIALSIZE) into Select2Def. Then find * the largest chunk in the region. If the chunk touches a