From 547f0448d9b0ec47f37ba84927d1626e53946c3f Mon Sep 17 00:00:00 2001 From: Tim Edwards Date: Fri, 7 Jun 2019 14:13:50 -0400 Subject: [PATCH 1/3] Cleanup of a number of uninitialized variable issues flagged by the compiler. Some are obscure functions (plot verstatec hasn't been used in years) but others (like SPICE distributed junctions) are potentially significant sources of unexpected crashes on systems that don't zero uninitialized memory. --- calma/CalmaWrite.c | 10 ++++------ drc/DRCtech.c | 2 +- ext2spice/ext2hier.c | 2 ++ ext2spice/ext2spice.c | 3 ++- plot/plotRutils.c | 1 + plot/plotVers.c | 2 +- router/rtrChannel.c | 1 + select/selCreate.c | 4 ++-- 8 files changed, 14 insertions(+), 11 deletions(-) diff --git a/calma/CalmaWrite.c b/calma/CalmaWrite.c index 44e0d6d9..82b1929f 100644 --- a/calma/CalmaWrite.c +++ b/calma/CalmaWrite.c @@ -365,9 +365,8 @@ CalmaWrite(rootDef, f) */ bool -calmaDumpStructure(def, cellstart, outf, calmaDefHash, filename) +calmaDumpStructure(def, outf, calmaDefHash, filename) CellDef *def; - off_t cellstart; FILE *outf; HashTable *calmaDefHash; char *filename; @@ -593,10 +592,9 @@ syntaxerror: */ void -calmaFullDump(def, fi, cellstart, outf, filename) +calmaFullDump(def, fi, outf, filename) CellDef *def; FILE *fi; - off_t cellstart; FILE *outf; char *filename; { @@ -659,7 +657,7 @@ calmaFullDump(def, fi, cellstart, outf, filename) } HashSetValue(he, StrDup(NULL, uniqlibname)); - while (calmaDumpStructure(def, cellstart, outf, &calmaDefHash, filename)) + while (calmaDumpStructure(def, outf, &calmaDefHash, filename)) if (SigInterruptPending) goto done; calmaSkipExact(CALMA_ENDLIB); @@ -813,7 +811,7 @@ calmaProcessDef(def, outf) he = HashLookOnly(&calmaLibHash, retfilename); if (he == NULL) - calmaFullDump(def, fi, cellstart, outf, retfilename); + calmaFullDump(def, fi, outf, retfilename); fclose(fi); def->cd_flags |= CDVENDORGDS; diff --git a/drc/DRCtech.c b/drc/DRCtech.c index c56f477b..62c09066 100644 --- a/drc/DRCtech.c +++ b/drc/DRCtech.c @@ -2159,9 +2159,9 @@ drcSpacing(argc, argv) } else { - runlength = distance; layers2 = argv[3]; distance = atoi(argv[4]); + runlength = distance; adjacency = argv[5]; why = drcWhyDup(argv[6]); } diff --git a/ext2spice/ext2hier.c b/ext2spice/ext2hier.c index af204cdb..d56a3846 100644 --- a/ext2spice/ext2hier.c +++ b/ext2spice/ext2hier.c @@ -182,6 +182,7 @@ spcHierWriteParams(hc, dev, scale, l, w, sdM) // For parameter an followed by parameter pn, // process both at the same time + sdM = getCurDevMult(); if (plist->parm_next && plist->parm_next->parm_type[0] == 'p' && plist->parm_next->parm_type[1] == plist->parm_type[1]) @@ -228,6 +229,7 @@ spcHierWriteParams(hc, dev, scale, l, w, sdM) // For parameter pn followed by parameter an, // process both at the same time + sdM = getCurDevMult(); if (plist->parm_next && plist->parm_next->parm_type[0] == 'a' && plist->parm_next->parm_type[1] == plist->parm_type[1]) diff --git a/ext2spice/ext2spice.c b/ext2spice/ext2spice.c index 1aa1bfc9..aff8e18c 100644 --- a/ext2spice/ext2spice.c +++ b/ext2spice/ext2spice.c @@ -2335,6 +2335,7 @@ spcdevVisit(dev, hierName, scale, trans) name, esSpiceF); fprintf(esSpiceF, " %s", EFDevTypes[dev->dev_type]); + sdM = getCurDevMult(); spcWriteParams(dev, hierName, scale, l, w, sdM); break; @@ -3796,8 +3797,8 @@ devDistJunctVisit(dev, hierName, scale, trans) return 0; } - w = (int)((float)w * scale); EFGetLengthAndWidth(dev, &l, &w); + w = (int)((float)w * scale); for (i = 1; idev_nterm; i++) { diff --git a/plot/plotRutils.c b/plot/plotRutils.c index 97837334..64e72de9 100644 --- a/plot/plotRutils.c +++ b/plot/plotRutils.c @@ -196,6 +196,7 @@ PlotFreeRaster(raster) * have been created with PlotNewRaster. */ { + if (raster == NULL) return; freeMagic((char *) raster->ras_bits); freeMagic((char *) raster); } diff --git a/plot/plotVers.c b/plot/plotVers.c index fbecfda4..8b797552 100644 --- a/plot/plotVers.c +++ b/plot/plotVers.c @@ -1084,7 +1084,7 @@ PlotVersatec(scx, layers, xMask, user_scale) Raster *raster = NULL; /* CMYK color separated raster buffers. */ - Raster *kRaster, *cRaster, *mRaster, *yRaster; + Raster *kRaster = NULL, *cRaster = NULL, *mRaster = NULL, *yRaster = NULL; haveColorMessage = FALSE; GeoTransRect(&scx->scx_trans, &scx->scx_area, &rootClip); diff --git a/router/rtrChannel.c b/router/rtrChannel.c index 7d448a2a..b6fe742e 100644 --- a/router/rtrChannel.c +++ b/router/rtrChannel.c @@ -310,6 +310,7 @@ RtrChannelObstacles(use, ch) scx.scx_area.r_ytop += w * RtrGridSpacing + down; scx.scx_use = use; scx.scx_trans = GeoIdentityTransform; + TTMaskZero(&allObs); TTMaskSetMask3(&allObs, &RtrMetalObstacles, &RtrPolyObstacles); (void) DBTreeSrTiles(&scx, &allObs, 0, rtrChannelObstacleMark, (ClientData) ch); diff --git a/select/selCreate.c b/select/selCreate.c index f0d74184..1aa495cf 100644 --- a/select/selCreate.c +++ b/select/selCreate.c @@ -1232,8 +1232,8 @@ selACPaintFunc2(tile, selACarg) Rect rrect, orect; int np, i, j; - ttype = (selACarg->ttype & TT_SIDE) ? ((ttype & TT_RIGHTMASK) >> 14) : - ttype & TT_LEFTMASK; + ttype = (selACarg->ttype & TT_SIDE) ? ((selACarg->ttype & TT_RIGHTMASK) >> 14) : + selACarg->ttype & TT_LEFTMASK; if (type & TT_DIAGONAL) rtype = (type & TT_SIDE) ? SplitRightType(tile) : From 6d5d370e8cb172450cb781ac718c8cd5f863aeea Mon Sep 17 00:00:00 2001 From: Tim Edwards Date: Fri, 7 Jun 2019 15:00:39 -0400 Subject: [PATCH 2/3] Corrected a few additional uninitialized variable situations that had been shadowed by the previous set of fixes. --- ext2spice/ext2hier.c | 5 ++++- ext2spice/ext2spice.c | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ext2spice/ext2hier.c b/ext2spice/ext2hier.c index d56a3846..5cb2a048 100644 --- a/ext2spice/ext2hier.c +++ b/ext2spice/ext2hier.c @@ -663,6 +663,7 @@ spcdevHierVisit(hc, dev, scale) "base", esSpiceF); fprintf(esSpiceF, " %s", EFDevTypes[dev->dev_type]); + sdM = getCurDevMult(); spcHierWriteParams(hc, dev, scale, l, w, sdM); break; @@ -790,6 +791,7 @@ spcdevHierVisit(hc, dev, scale) subnode->efnode_name->efnn_hier, "diode_bot", esSpiceF); fprintf(esSpiceF, " %s", EFDevTypes[dev->dev_type]); + sdM = getCurDevMult(); spcHierWriteParams(hc, dev, scale, l, w, sdM); break; @@ -810,6 +812,7 @@ spcdevHierVisit(hc, dev, scale) gate->dterm_node->efnode_name->efnn_hier, "diode_top", esSpiceF); fprintf(esSpiceF, " %s", EFDevTypes[dev->dev_type]); + sdM = getCurDevMult(); spcHierWriteParams(hc, dev, scale, l, w, sdM); break; @@ -1516,8 +1519,8 @@ devDistJunctHierVisit(hc, dev, scale) return 0; } - w = (int)((float)w * scale); EFGetLengthAndWidth(dev, &l, &w); + w = (int)((float)w * scale); for (i = 1; idev_nterm; i++) { diff --git a/ext2spice/ext2spice.c b/ext2spice/ext2spice.c index aff8e18c..6947027a 100644 --- a/ext2spice/ext2spice.c +++ b/ext2spice/ext2spice.c @@ -2457,6 +2457,7 @@ spcdevVisit(dev, hierName, scale, trans) name, esSpiceF); fprintf(esSpiceF, " %s", EFDevTypes[dev->dev_type]); + sdM = getCurDevMult(); spcWriteParams(dev, hierName, scale, l, w, sdM); break; @@ -2474,6 +2475,7 @@ spcdevVisit(dev, hierName, scale, trans) name, esSpiceF); fprintf(esSpiceF, " %s", EFDevTypes[dev->dev_type]); + sdM = getCurDevMult(); spcWriteParams(dev, hierName, scale, l, w, sdM); break; From e296246c9265657d43d6acbf1988957e1a8403df Mon Sep 17 00:00:00 2001 From: Tim Edwards Date: Fri, 7 Jun 2019 21:39:37 -0400 Subject: [PATCH 3/3] One last correction, as I accidentally dropped two calls to getCurDevMult() inside spcHierWriteParams(), where it was being passed as an argument, therefore making a redundant call and wasting compute cycles. --- ext2spice/ext2hier.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/ext2spice/ext2hier.c b/ext2spice/ext2hier.c index 5cb2a048..e5686cbf 100644 --- a/ext2spice/ext2hier.c +++ b/ext2spice/ext2hier.c @@ -182,7 +182,6 @@ spcHierWriteParams(hc, dev, scale, l, w, sdM) // For parameter an followed by parameter pn, // process both at the same time - sdM = getCurDevMult(); if (plist->parm_next && plist->parm_next->parm_type[0] == 'p' && plist->parm_next->parm_type[1] == plist->parm_type[1]) @@ -229,7 +228,6 @@ spcHierWriteParams(hc, dev, scale, l, w, sdM) // For parameter pn followed by parameter an, // process both at the same time - sdM = getCurDevMult(); if (plist->parm_next && plist->parm_next->parm_type[0] == 'a' && plist->parm_next->parm_type[1] == plist->parm_type[1])