Commits

vrld committed 254cd24

Fix buffer over-read in draw_overdraw() (thanks, Boolsheet!).

  • Participants
  • Parent commits f76b286

Comments (0)

Files changed (1)

src/modules/graphics/opengl/Graphics.cpp

 		GLfloat c[4];
 		glGetFloatv(GL_CURRENT_COLOR, c);
 
-		Color *colors = new Color[2*count+1];
-		for (size_t i = 0; i < 2*count+1; ++i)
+		Color *colors = new Color[2*count+2];
+		for (size_t i = 0; i < 2*count+2; ++i)
 		{
 			colors[i] = Color(GLubyte(c[0] * 255.f),
 					GLubyte(c[1] * 255.f),
 		Vector p,q,r;
 		bool looping = (coords[0] == coords[count-2]) && (coords[1] == coords[count-1]);
 
-		if (lineStyle == LINE_SMOOTH)
-			overdraw = new Vector[2*count+2];
-
 		float halfwidth = lineWidth/2.f;
 		float inv_hw    = 1.f / halfwidth;
 
-		// Overdraw changes visible line width. account for that.
-		// Value of 0.15 chosen empirically.
-		if (lineStyle == LINE_SMOOTH)
-			halfwidth -= .15f;
+		if (lineStyle == LINE_SMOOTH) {
+			overdraw = new Vector[2*count+2];
+			// Overdraw changes visible line width. account for that.
+			// Value of 0.2 chosen empirically.
+			halfwidth -= .2f;
+		}
 
 		// get line vertex boundaries
 		// if not looping, extend the line at the beginning, else use last point as `p'