bsputils: add bounds checking to Face_GetNum

This commit is contained in:
Eric Wasylishen 2017-03-18 16:16:06 -06:00
parent 8a83e3d351
commit 29884e2b4a
2 changed files with 8 additions and 2 deletions

View File

@ -19,12 +19,18 @@
#include <common/bsputils.hh>
#include <assert.h>
#include <cstddef>
#include <glm/glm.hpp>
int Face_GetNum(const bsp2_t *bsp, const bsp2_dface_t *f)
{
return f - bsp->dfaces;
Q_assert(f != nullptr);
const ptrdiff_t diff = f - bsp->dfaces;
Q_assert(diff >= 0 && diff < bsp->numfaces);
return static_cast<int>(diff);
}
/* small helper that just retrieves the correct vertex from face->surfedge->edge lookups */

View File

@ -664,7 +664,7 @@ CalcPoints(const modelinfo_t *modelinfo, const vec3_t offset, lightsurf_t *surf,
const auto res = CalcPointNormal(bsp, face, vec3_t_to_glm(point), phongshaded, surf->lightmapscale, 0);
surf->occluded[i] = !get<0>(res);
*realfacenum = Face_GetNum(bsp, std::get<1>(res));
*realfacenum = std::get<1>(res) != nullptr ? Face_GetNum(bsp, std::get<1>(res)) : -1;
glm_to_vec3_t(std::get<2>(res), point);
glm_to_vec3_t(std::get<3>(res), norm);