From ad816ed65ada097e18f66f4293abf642568c7557 Mon Sep 17 00:00:00 2001 From: Intubun <41478036+Intubun@users.noreply.github.com> Date: Mon, 4 May 2026 13:28:42 +0200 Subject: [PATCH] Fix five latent bugs surfaced while porting to WASM These bugs all exist in stock Magic but were tolerated by the K&R-loose native build. The strict WASM call_indirect type checks turned them up. * cif/CIFhier.c: ASSERT in cifFlatMaskHints accessed oldproprec->prop_value.prop_type, but prop_type is a top-level member of PropertyRecord. Changed to oldproprec->prop_type. * extflat/EFargs.c: efLoadSearchPath was assigning a pointer to a string literal ("." in RO data), which callers later try to free or StrDup. Replaced with StrDup(path, ".") so the pointer always lives on the heap. * router/rtrVia.c: rtrFollowName called RtrMilestonePrint("#"), but the function takes no arguments. * sim/SimSelect.c: SimAddLabels called DBWLabelChanged with five arguments, but its real signature is (CellDef *, Label *, int). Replaced with the equivalent DBWAreaChanged call. * windows/windView.c: extern declaration of DBMovePoint had return type void, but the function actually returns bool. --- cif/CIFhier.c | 2 +- extflat/EFargs.c | 2 +- router/rtrVia.c | 2 +- sim/SimSelect.c | 3 +-- windows/windView.c | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/cif/CIFhier.c b/cif/CIFhier.c index fed584f6..828bf289 100644 --- a/cif/CIFhier.c +++ b/cif/CIFhier.c @@ -284,7 +284,7 @@ cifFlatMaskHints( oldproprec = (PropertyRecord *)DBPropGet(mhd->mh_def, name, &propfound); if (propfound) { - ASSERT(oldproprec->prop_value.prop_type == PROPERTY_TYPE_PLANE, + ASSERT(oldproprec->prop_type == PROPERTY_TYPE_PLANE, "cifFlatMaskHints"); plane = oldproprec->prop_value.prop_plane; } diff --git a/extflat/EFargs.c b/extflat/EFargs.c index 26e08996..e3620e05 100644 --- a/extflat/EFargs.c +++ b/extflat/EFargs.c @@ -367,7 +367,7 @@ efLoadSearchPath(path) PaVisitFiles(DOT_MAGIC_PATH, ".magicrc", pv); PaVisitFree(pv); if (*path == NULL) - *path = "."; + StrDup(path, "."); } int diff --git a/router/rtrVia.c b/router/rtrVia.c index 6869546d..10a92f2e 100644 --- a/router/rtrVia.c +++ b/router/rtrVia.c @@ -159,7 +159,7 @@ rtrFollowName(name, firstInNet, area) { if ( firstInNet ) { - RtrMilestonePrint("#"); + RtrMilestonePrint(); (void) DBSrLabelLoc(EditCellUse, name, rtrFollowLocFunc, (ClientData) area); } return 0; diff --git a/sim/SimSelect.c b/sim/SimSelect.c index 2b4519b1..40829d95 100644 --- a/sim/SimSelect.c +++ b/sim/SimSelect.c @@ -640,8 +640,7 @@ SimAddLabels( pos = SimPutLabel(rootuse, &selectBox, GEO_CENTER, current->tl_simLabel, TT_SPACE); DBReComputeBbox(rootuse); - DBWLabelChanged(rootuse, current->tl_simLabel, &selectBox, - pos, DBW_ALLWINDOWS); + DBWAreaChanged(rootuse, &selectBox, DBW_ALLWINDOWS, &DBAllButSpaceBits); } } diff --git a/windows/windView.c b/windows/windView.c index 59639322..fb201dd5 100644 --- a/windows/windView.c +++ b/windows/windView.c @@ -316,7 +316,7 @@ void WindTranslate(origx, origy) int origx, origy; { - extern void DBMovePoint(); + extern bool DBMovePoint(); MagWindow *w2; Rect newArea;