fd.o #BZ 9684
authorZou Nan hai <nanhai.zou@intel.com>
Mon, 12 Feb 2007 04:16:49 +0000 (12:16 +0800)
committerZou Nan hai <nanhai.zou@intel.com>
Mon, 12 Feb 2007 04:16:49 +0000 (12:16 +0800)
  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.

src/mesa/main/light.h

index f47fe58a83932f832b9a4358d8ba3f5c1521f1cc..b97e17b5be4e5f55ad4babd3bd71b124ed47c456 100644 (file)
@@ -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]);     \