- inlines for validating sector and wall indices.

This commit is contained in:
Christoph Oelckers 2021-11-07 18:09:19 +01:00
parent 2840b5f25d
commit eeaa7f98f0
4 changed files with 17 additions and 7 deletions

View file

@ -211,6 +211,16 @@ EXTERN int32_t Numsprites;
EXTERN int16_t numsectors, numwalls; EXTERN int16_t numsectors, numwalls;
EXTERN int32_t display_mirror; EXTERN int32_t display_mirror;
inline bool validSectorIndex(int sectnum)
{
return sectnum >= 0 && sectnum < numsectors;
}
inline bool validWallIndex(int wallnum)
{
return wallnum >= 0 && wallnum < numwalls;
}
EXTERN int32_t randomseed; EXTERN int32_t randomseed;
EXTERN uint8_t paletteloaded; EXTERN uint8_t paletteloaded;

View file

@ -217,7 +217,7 @@ inline void clipmove_tweak_pos(const vec3_t *pos, int32_t gx, int32_t gy, int32_
// Returns: should clip? // Returns: should clip?
static int cliptestsector(int const dasect, int const nextsect, int32_t const flordist, int32_t const ceildist, vec2_t const pos, int32_t const posz) static int cliptestsector(int const dasect, int const nextsect, int32_t const flordist, int32_t const ceildist, vec2_t const pos, int32_t const posz)
{ {
assert((unsigned)dasect < (unsigned)numsectors && (unsigned)nextsect < (unsigned)numsectors); assert(validSectorIndex(dasect) && validSectorIndex(nextsect));
auto const sec2 = (usectorptr_t)&sector[nextsect]; auto const sec2 = (usectorptr_t)&sector[nextsect];

View file

@ -704,7 +704,7 @@ void initspritelists(void)
// "Inside details" for the idea behind the algorithm. // "Inside details" for the idea behind the algorithm.
int32_t inside_ps(int32_t x, int32_t y, int16_t sectnum) int32_t inside_ps(int32_t x, int32_t y, int16_t sectnum)
{ {
if (sectnum >= 0 && sectnum < numsectors) if (validSectorIndex(sectnum))
{ {
int32_t cnt = 0; int32_t cnt = 0;
auto wal = (uwallptr_t)&wall[sector[sectnum].wallptr]; auto wal = (uwallptr_t)&wall[sector[sectnum].wallptr];
@ -730,7 +730,7 @@ int32_t inside_ps(int32_t x, int32_t y, int16_t sectnum)
} }
int32_t inside_old(int32_t x, int32_t y, int16_t sectnum) int32_t inside_old(int32_t x, int32_t y, int16_t sectnum)
{ {
if (sectnum >= 0 && sectnum < numsectors) if (validSectorIndex(sectnum))
{ {
uint32_t cnt = 0; uint32_t cnt = 0;
auto wal = (uwallptr_t)&wall[sector[sectnum].wallptr]; auto wal = (uwallptr_t)&wall[sector[sectnum].wallptr];
@ -774,7 +774,7 @@ int32_t inside(int32_t x, int32_t y, int sectnum)
default: default:
return inside_old(x, y, sectnum); return inside_old(x, y, sectnum);
} }
if ((unsigned)sectnum < (unsigned)numsectors) if (validSectorIndex(sectnum))
{ {
uint32_t cnt1 = 0, cnt2 = 0; uint32_t cnt1 = 0, cnt2 = 0;
@ -1433,7 +1433,7 @@ void updatesectorneighbor(int32_t const x, int32_t const y, int * const sectnum,
{ {
int const initialsectnum = *sectnum; int const initialsectnum = *sectnum;
if ((unsigned)initialsectnum < (unsigned)numsectors && getsectordist({x, y}, initialsectnum) <= initialMaxDistance) if (validSectorIndex(initialsectnum) && getsectordist({x, y}, initialsectnum) <= initialMaxDistance)
{ {
if (inside_p(x, y, initialsectnum)) if (inside_p(x, y, initialsectnum))
return; return;
@ -1477,7 +1477,7 @@ void updatesectorneighborz(int32_t const x, int32_t const y, int32_t const z, in
uint32_t const correctedsectnum = (unsigned)*sectnum; uint32_t const correctedsectnum = (unsigned)*sectnum;
if (correctedsectnum < (unsigned)numsectors && getsectordist({x, y}, correctedsectnum) <= initialMaxDistance) if (validSectorIndex(correctedsectnum) && getsectordist({x, y}, correctedsectnum) <= initialMaxDistance)
{ {
int32_t cz, fz; int32_t cz, fz;
getzsofslope(correctedsectnum, x, y, &cz, &fz); getzsofslope(correctedsectnum, x, y, &cz, &fz);