qbsp: fix memory corruption in SplitBrush

This commit is contained in:
Eric Wasylishen 2017-07-23 01:51:31 -06:00
parent 9629134612
commit 578d24951d
3 changed files with 10 additions and 5 deletions

View File

@ -38,6 +38,7 @@ winding_t *BaseWindingForPlane(const qbsp_plane_t *p);
void CheckWinding(const winding_t *w);
winding_t *NewWinding(int points);
winding_t *CopyWinding(const winding_t *w);
void CopyWindingInto(winding_t *dest, const winding_t *src); // FIXME: get rid of this
winding_t *FlipWinding(const winding_t *w);
winding_t *ClipWinding(winding_t *in, const qbsp_plane_t *split, bool keepon);
void DivideWinding(const winding_t *in, const qbsp_plane_t *split, winding_t **front,

View File

@ -1564,7 +1564,7 @@ void SplitBrush (const brush_t *brush,
*/
face_t *newface = CopyFace(face);
newface->w = *cw[j];
CopyWindingInto(&newface->w, cw[j]);
UpdateFaceSphere(newface);
// link it into the front or back brush we are building
@ -1624,16 +1624,14 @@ void SplitBrush (const brush_t *brush,
if (i == 0) {
winding_t *newwinding = FlipWinding(midwinding);
newface->w = *newwinding;
CopyWindingInto(&newface->w, newwinding);
newface->planenum = planenum;
newface->planeside = !planeside;
FreeMem(newwinding, WINDING, 1);
} else {
winding_t *newwinding = CopyWinding(midwinding);
newface->w = *newwinding;
CopyWindingInto(&newface->w, midwinding);
newface->planenum = planenum;
newface->planeside = planeside;
FreeMem(newwinding, WINDING, 1);
}
UpdateFaceSphere(newface);

View File

@ -112,6 +112,12 @@ CopyWinding(const winding_t *w)
return c;
}
void CopyWindingInto(winding_t *dest, const winding_t *src) // FIXME: get rid of this
{
dest->numpoints = src->numpoints;
memcpy(dest->points, src->points, sizeof(vec3_t) * src->numpoints);
}
/*
==================
FlipWinding