Revision: 38119
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38119
Author:   blendix
Date:     2011-07-05 12:25:56 +0000 (Tue, 05 Jul 2011)
Log Message:
-----------
Fix #27855: crash on enabling high resolution smoke.

Wavelet tile generation code was reading outside of array bounds, and as a
result could give a noise.wavelets file with nan values. Now that problem
is fixed, and existing files with nan are ignored.

Modified Paths:
--------------
    trunk/blender/intern/smoke/intern/WAVELET_NOISE.h

Modified: trunk/blender/intern/smoke/intern/WAVELET_NOISE.h
===================================================================
--- trunk/blender/intern/smoke/intern/WAVELET_NOISE.h   2011-07-05 10:57:29 UTC 
(rev 38118)
+++ trunk/blender/intern/smoke/intern/WAVELET_NOISE.h   2011-07-05 12:25:56 UTC 
(rev 38119)
@@ -69,7 +69,7 @@
        const float *a = &downCoeffs[16];
        for (int i = 0; i < n / 2; i++) {
                to[i] = 0;
-               for (int k = 2 * i - 16; k <= 2 * i + 16; k++)
+               for (int k = 2 * i - 16; k < 2 * i + 16; k++)
                        to[i] += a[k - 2 * i] * from[modFast128(k)];
        }
 }
@@ -79,7 +79,7 @@
        const float *a = &downCoeffs[16];
        for (int i = 0; i < n / 2; i++) {
                to[i * n] = 0;
-               for (int k = 2 * i - 16; k <= 2 * i + 16; k++)
+               for (int k = 2 * i - 16; k < 2 * i + 16; k++)
                        to[i * n] += a[k - 2 * i] * from[modFast128(k) * n];
        }
 }
@@ -89,7 +89,7 @@
        const float *a = &downCoeffs[16];
        for (int i = 0; i < n / 2; i++) {
                to[i * n * n] = 0;
-               for (int k = 2 * i - 16; k <= 2 * i + 16; k++)
+               for (int k = 2 * i - 16; k < 2 * i + 16; k++)
                        to[i * n * n] += a[k - 2 * i] * from[modFast128(k) * n 
* n];
        }
 }
@@ -262,6 +262,14 @@
                printf("loadTile: Noise tile '%s' is wrong size %d.\n", 
filename.c_str(), (int)bread);
                return false;
        } 
+
+       // check for invalid nan tile data that could be generated. bug is now
+       // fixed, but invalid files may still hang around
+       if (isnan(noiseTileData[0])) {
+               printf("loadTile: Noise tile '%s' contains nan values.\n", 
filename.c_str());
+               return false;
+       }
+
        return true;
 }
 

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to