Mesa (master): draw: added new assertions to clipping code

Brian Paul brianp at kemper.freedesktop.org
Thu Jul 22 17:19:34 UTC 2010


Module: Mesa
Branch: master
Commit: ca3238f3fce89b4641833d1722d03c5d23b3e081
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=ca3238f3fce89b4641833d1722d03c5d23b3e081

Author: Brian Paul <brianp at vmware.com>
Date:   Thu Jul 22 11:18:45 2010 -0600

draw: added new assertions to clipping code

---

 src/gallium/auxiliary/draw/draw_pipe_clip.c |   11 ++++++++++-
 1 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_pipe_clip.c b/src/gallium/auxiliary/draw/draw_pipe_clip.c
index 122b1c7..1cf6ee7 100644
--- a/src/gallium/auxiliary/draw/draw_pipe_clip.c
+++ b/src/gallium/auxiliary/draw/draw_pipe_clip.c
@@ -262,6 +262,7 @@ do_clip_tri( struct draw_stage *stage,
 
       clipmask &= ~(1<<plane_idx);
 
+      assert(n < MAX_CLIPPED_VERTICES);
       inlist[n] = inlist[0]; /* prevent rotation of vertices */
 
       for (i = 1; i <= n; i++) {
@@ -270,11 +271,17 @@ do_clip_tri( struct draw_stage *stage,
 	 float dp = dot4( vert->clip, plane );
 
 	 if (!IS_NEGATIVE(dp_prev)) {
+            assert(outcount < MAX_CLIPPED_VERTICES);
 	    outlist[outcount++] = vert_prev;
 	 }
 
 	 if (DIFFERENT_SIGNS(dp, dp_prev)) {
-	    struct vertex_header *new_vert = clipper->stage.tmp[tmpnr++];
+	    struct vertex_header *new_vert;
+
+            assert(tmpnr < MAX_CLIPPED_VERTICES+1);
+            new_vert = clipper->stage.tmp[tmpnr++];
+
+            assert(outcount < MAX_CLIPPED_VERTICES);
 	    outlist[outcount++] = new_vert;
 
 	    if (IS_NEGATIVE(dp)) {
@@ -317,12 +324,14 @@ do_clip_tri( struct draw_stage *stage,
    if (clipper->flat) {
       if (stage->draw->rasterizer->flatshade_first) {
          if (inlist[0] != header->v[0]) {
+            assert(tmpnr < MAX_CLIPPED_VERTICES + 1);
             inlist[0] = dup_vert(stage, inlist[0], tmpnr++);
             copy_colors(stage, inlist[0], header->v[0]);
          }
       }
       else {
          if (inlist[0] != header->v[2]) {
+            assert(tmpnr < MAX_CLIPPED_VERTICES + 1);
             inlist[0] = dup_vert(stage, inlist[0], tmpnr++);
             copy_colors(stage, inlist[0], header->v[2]);
          }




More information about the mesa-commit mailing list