Skip to content

Commit 83a3bc8

Browse files
committed
fix(zscript): fix crash when creating too many paldatas
1 parent f90cb02 commit 83a3bc8

File tree

1 file changed

+22
-16
lines changed

1 file changed

+22
-16
lines changed

src/zc/ffscript.cpp

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31231,30 +31231,36 @@ void FFScript::do_loadgenericdata(const bool v)
3123131231
void FFScript::do_create_paldata()
3123231232
{
3123331233
ri->paldataref = get_free_paldata();
31234-
user_paldata* pd = &script_paldatas[ri->paldataref-1];
31235-
for (int32_t q = 0; q < PALDATA_BITSTREAM_SIZE; ++q)
31236-
pd->colors_used[q] = 0;
31234+
if (ri->paldataref > 0)
31235+
{
31236+
user_paldata* pd = &script_paldatas[ri->paldataref - 1];
31237+
for (int32_t q = 0; q < PALDATA_BITSTREAM_SIZE; ++q)
31238+
pd->colors_used[q] = 0;
31239+
}
3123731240
ri->d[rEXP1] = ri->paldataref;
3123831241
}
3123931242

3124031243
void FFScript::do_create_paldata_clr()
3124131244
{
3124231245
ri->paldataref = get_free_paldata();
31243-
user_paldata* pd = &script_paldatas[ri->paldataref - 1];
31244-
int32_t clri = get_register(sarg1);
31245-
31246-
RGB c = _RGB((clri >> 16) & 0xFF, (clri >> 8) & 0xFF, clri & 0xFF);
31247-
31248-
if (c.r < 0 || c.g < 0 || c.b < 0)
31246+
if (ri->paldataref > 0)
3124931247
{
31250-
Z_scripterrlog("Invalid rgb (%d) passed to Graphics->CreatePalData().\n", clri);
31251-
}
31252-
c.r = vbound(c.r, 0, 63);
31253-
c.g = vbound(c.g, 0, 63);
31254-
c.b = vbound(c.b, 0, 63);
31248+
user_paldata* pd = &script_paldatas[ri->paldataref - 1];
31249+
int32_t clri = get_register(sarg1);
3125531250

31256-
for(int32_t q = 0; q < 240; ++q)
31257-
pd->set_color(q, c);
31251+
RGB c = _RGB((clri >> 16) & 0xFF, (clri >> 8) & 0xFF, clri & 0xFF);
31252+
31253+
if (c.r < 0 || c.g < 0 || c.b < 0)
31254+
{
31255+
Z_scripterrlog("Invalid rgb (%d) passed to Graphics->CreatePalData().\n", clri);
31256+
}
31257+
c.r = vbound(c.r, 0, 63);
31258+
c.g = vbound(c.g, 0, 63);
31259+
c.b = vbound(c.b, 0, 63);
31260+
31261+
for (int32_t q = 0; q < 240; ++q)
31262+
pd->set_color(q, c);
31263+
}
3125831264
ri->d[rEXP1] = ri->paldataref;
3125931265
}
3126031266

0 commit comments

Comments
 (0)