[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38119] trunk/blender/intern/smoke/intern/ WAVELET_NOISE.h: Fix #27855: crash on enabling high resolution smoke.

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Jul 5 14:25:57 CEST 2011


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;
 }
 




More information about the Bf-blender-cvs mailing list