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
+3 -3
View File
@@ -610,7 +610,7 @@ void dMenu_Skill_c::setPageText() {
void dMenu_Skill_c::setAButtonString(u16 i_stringID) {
if (i_stringID == 0) {
for (int i = 0; i < 5; i++) {
strcpy(mpAButtonString[i]->getStringPtr(), "");
SAFE_STRCPY(mpAButtonString[i]->getStringPtr(), "");
}
} else {
for (int i = 0; i < 5; i++) {
@@ -622,7 +622,7 @@ void dMenu_Skill_c::setAButtonString(u16 i_stringID) {
void dMenu_Skill_c::setBButtonString(u16 i_stringID) {
if (i_stringID == 0) {
for (int i = 0; i < 5; i++) {
strcpy(mpBButtonString[i]->getStringPtr(), "");
SAFE_STRCPY(mpBButtonString[i]->getStringPtr(), "");
}
} else {
for (int i = 0; i < 5; i++) {
@@ -634,7 +634,7 @@ void dMenu_Skill_c::setBButtonString(u16 i_stringID) {
void dMenu_Skill_c::setNameString(u16 i_stringID) {
if (i_stringID == 0) {
for (int i = 0; i < 4; i++) {
strcpy(mpNameString[i]->getStringPtr(), "");
SAFE_STRCPY(mpNameString[i]->getStringPtr(), "");
}
} else {
for (int i = 0; i < 4; i++) {