2 Commits

Author SHA1 Message Date
NyakoFox
deeed00c95 Make sure special roomnames have enough text
There's another crash, which is indexing out of bounds if there's
not enough text. This adds simple bounds checks for them.
2026-02-16 11:42:43 -05:00
NyakoFox
11b660abb0 Fix empty roomnames potentially crashing the game
TinyXML2 seems to sometimes return NULL when an element has either no
text or whitespace, instead of returning an empty string. Why it does
this, I'm not sure, but I have recently learned from Dav999 that it
will crash the game. Great.
2026-02-16 11:42:43 -05:00
2 changed files with 11 additions and 3 deletions

View File

@@ -1392,6 +1392,10 @@ next:
{
name.text.push_back(std::string(text));
}
else
{
name.text.push_back(std::string(""));
}
}
else
{
@@ -1409,6 +1413,10 @@ next:
{
name.text.push_back(std::string(text));
}
else
{
name.text.push_back(std::string(""));
}
}
}
}

View File

@@ -222,11 +222,11 @@ void mapclass::updateroomnames(void)
if (rx == roomname->x && ry == roomname->y && (roomname->flag == -1 || (INBOUNDS_ARR(roomname->flag, obj.flags) && obj.flags[roomname->flag])))
{
roomname_special = true;
if (roomname->type == RoomnameType_STATIC)
if (roomname->type == RoomnameType_STATIC && roomname->text.size() >= 1)
{
setroomname(roomname->text[0].c_str());
}
if (roomname->type == RoomnameType_GLITCH)
if (roomname->type == RoomnameType_GLITCH && roomname->text.size() >= 2)
{
roomname->delay--;
if (roomname->delay <= 0)
@@ -240,7 +240,7 @@ void mapclass::updateroomnames(void)
}
setroomname(roomname->text[roomname->progress].c_str());
}
if (roomname->type == RoomnameType_TRANSFORM)
if (roomname->type == RoomnameType_TRANSFORM && roomname->text.size() >= 1)
{
roomname->delay--;
if (roomname->delay <= 0)