Blob Blame History Raw
From 95756dbf034f6df8869ef933a8c3cc4b8a6ce162 Mon Sep 17 00:00:00 2001
From: Mamoru TASAKA <mtasaka@fedorapeoject.org>
Date: Wed, 3 Sep 2014 12:46:43 +0900
Subject: [PATCH] sproingies/RenderSproingie: limit shift value

gcc49 sanitizer detected the following error:
../../../hacks/glx/sproingies.c:554:24: runtime error: shift exponent 32 is too large for 32-bit type 'int'

This means that thisSproingie->frame - BOOM_FRAME can be no less than
32. So just clipping this value to 31 to make it sure that shift exponent
is in the range for int.
---
 hacks/glx/sproingies.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/hacks/glx/sproingies.c b/hacks/glx/sproingies.c
index 0892eff..42ccf2b 100644
--- a/hacks/glx/sproingies.c
+++ b/hacks/glx/sproingies.c
@@ -551,7 +551,11 @@ RenderSproingie(int t, sp_instance * si)
 		glTranslatef((GLfloat) (thisSproingie->x) + 0.5,
 			     (GLfloat) (thisSproingie->y) + 0.5,
 			     (GLfloat) (thisSproingie->z) - 0.5);
-		scale = (GLfloat) (1 << (thisSproingie->frame - BOOM_FRAME));
+		{
+			int boom_scale = thisSproingie->frame - BOOM_FRAME;
+			if (boom_scale >= 31) boom_scale = 31;
+			scale = (GLfloat) (1 << boom_scale);
+		}
 		glScalef(scale, scale, scale);
 		if (!si->wireframe) {
 			if (!si->mono)
-- 
1.9.3