summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZou Nan hai <[email protected]>2007-02-12 12:16:49 +0800
committerZou Nan hai <[email protected]>2007-02-12 12:16:49 +0800
commitebcc9b5d12995cc83c032beeff468c5ecb30b33f (patch)
tree6f2585374a0cf1055c7d361a3ef0b5369237a47f
parentee5417bca883d82d618e1c0b65011940253555dd (diff)
fd.o #BZ 9684
gcc may cast an overflowed float value to an negative int value on i386, fix it to make sure at least some apps will not crash if it contains wrong normal data.
-rw-r--r--src/mesa/main/light.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/mesa/main/light.h b/src/mesa/main/light.h
index f47fe58a839..b97e17b5be4 100644
--- a/src/mesa/main/light.h
+++ b/src/mesa/main/light.h
@@ -92,7 +92,8 @@ do { \
struct gl_shine_tab *_tab = table; \
float f = (dp * (SHINE_TABLE_SIZE-1)); \
int k = (int) f; \
- if (k > SHINE_TABLE_SIZE-2) \
+ if (k < 0 /* gcc may cast an overflow float value to negative int value*/ \
+ || k > SHINE_TABLE_SIZE-2) \
result = (GLfloat) _mesa_pow( dp, _tab->shininess ); \
else \
result = _tab->tab[k] + (f-k)*(_tab->tab[k+1]-_tab->tab[k]); \