summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/refresh/sw/bsp.c5
-rw-r--r--src/refresh/sw/poly.c3
-rw-r--r--src/refresh/sw/surf.c6
3 files changed, 13 insertions, 1 deletions
diff --git a/src/refresh/sw/bsp.c b/src/refresh/sw/bsp.c
index cff04fd..4c2ed8f 100644
--- a/src/refresh/sw/bsp.c
+++ b/src/refresh/sw/bsp.c
@@ -339,6 +339,11 @@ void R_DrawSolidClippedSubmodelPolygons(mmodel_t *pmodel, mnode_t *topnode)
pbedge = &bedges[numbedges];
numbedges += psurf->numsurfedges;
+ if (numbedges >= MAX_BMODEL_EDGES) {
+ Com_Printf("Out of edges for bmodel\n");
+ return;
+ }
+
surfedge = psurf->firstsurfedge;
for (j = 0; j < psurf->numsurfedges; j++, surfedge++) {
pbedge[j].v[0] = surfedge->edge->v[surfedge->vert ];
diff --git a/src/refresh/sw/poly.c b/src/refresh/sw/poly.c
index 860b59f..a31436e 100644
--- a/src/refresh/sw/poly.c
+++ b/src/refresh/sw/poly.c
@@ -620,6 +620,9 @@ static void R_BuildPolygonFromSurface(mface_t *fa)
// reconstruct the polygon
lnumverts = fa->numsurfedges;
+ if (lnumverts > MAXWORKINGVERTS)
+ Com_Error(ERR_DROP, "R_BuildPolygonFromSurface: too many points: %d", lnumverts);
+
pverts = r_clip_verts[0];
surfedge = fa->firstsurfedge;
diff --git a/src/refresh/sw/surf.c b/src/refresh/sw/surf.c
index e73f2b7..a9200ec 100644
--- a/src/refresh/sw/surf.c
+++ b/src/refresh/sw/surf.c
@@ -176,7 +176,9 @@ void R_InitCaches(void)
// calculate size to allocate
if (sw_surfcacheoverride->integer) {
- size = sw_surfcacheoverride->integer;
+ size = Cvar_ClampInteger(sw_surfcacheoverride,
+ SURFCACHE_SIZE_AT_320X240,
+ SURFCACHE_SIZE_AT_320X240 * 25);
} else {
size = SURFCACHE_SIZE_AT_320X240;
@@ -185,6 +187,8 @@ void R_InitCaches(void)
size += (pix - 64000) * 3;
}
+ size *= TEX_BYTES;
+
// round up to page size
size = (size + 8191) & ~8191;