String safety (#1548)

* Array size UB fixes

* Fix ShieldD

* Remove (almost) all unsafe strcpy calls

Bunch of macros. C arrays are easy enough and just need a different call. For various cases where a char* is passed around bare, I've made a TEXT_SPAN macro that can store a length too for bounds checking.

* Move crash handling in safe string operations to separate TU

* strcat safe version

* sprintf made safe too

* Fix compile
This commit is contained in:
Pieter-Jan Briers
2026-05-24 18:43:00 +02:00
committed by GitHub
parent af162bbd0a
commit a6376368ee
100 changed files with 781 additions and 546 deletions
+2 -2
View File
@@ -370,7 +370,7 @@ int daObjFlag2_c::createHeap() {
s8 flagNum = (u8)shape_angle.x;
if (mFlagValid) {
char acStack_40[16];
sprintf(acStack_40, "flag%02d.bti", flagNum);
SAFE_SPRINTF(acStack_40, "flag%02d.bti", flagNum);
shape_angle.setall(0);
current.angle.setall(0);
ResTIMG* image = (ResTIMG*)dComIfG_getObjectRes(mFlagName, "flag.bti");
@@ -409,7 +409,7 @@ int daObjFlag2_c::create() {
mFlagValid = false;
} else {
mFlagValid = true;
sprintf(mFlagName, "FlagObj%02d", flagNum);
SAFE_SPRINTF(mFlagName, "FlagObj%02d", flagNum);
int rv = dComIfG_resLoad(&mFlagPhase, mFlagName);
if (rv != cPhs_COMPLEATE_e) {
return rv;