From 83237997b54cef731a1b72679503bfbafee7b880 Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 12 Oct 2008 09:56:53 +0000 Subject: [PATCH] Fix freeze when invalid heightfield is given --- panda/src/grutil/geoMipTerrain.cxx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/panda/src/grutil/geoMipTerrain.cxx b/panda/src/grutil/geoMipTerrain.cxx index 14cb2f472e..572021feae 100644 --- a/panda/src/grutil/geoMipTerrain.cxx +++ b/panda/src/grutil/geoMipTerrain.cxx @@ -359,6 +359,10 @@ make_slope_image() { //////////////////////////////////////////////////////////////////// void GeoMipTerrain:: generate() { + if (_xsize < 3 || _ysize < 3) { + grutil_cat.error() << "No valid heightfield image has been set!\n"; + return; + } calc_levels(); _root.node()->remove_all_children(); _blocks.clear(); @@ -400,6 +404,10 @@ generate() { //////////////////////////////////////////////////////////////////// bool GeoMipTerrain:: update() { + if (_xsize < 3 || _ysize < 3) { + grutil_cat.error() << "No valid heightfield image has been set!\n"; + return false; + } if (_is_dirty) { generate(); return true; @@ -488,7 +496,7 @@ root_flattened() { if (total != _root.node()->get_num_children()) { grutil_cat.error() << "GeoMipTerrain: root node unexpectedly mangled: " << total << " vs " << (_root.node()->get_num_children()) << "\n"; return true; - } + } // The default. return false; @@ -530,6 +538,7 @@ auto_flatten() { //////////////////////////////////////////////////////////////////// void GeoMipTerrain:: calc_levels() { + nassertv(_xsize >= 3 && _ysize >= 3); _levels.clear(); for (unsigned int mx = 0; mx < (_xsize - 1) / _block_size; mx++) { pvector tvector; //create temporary row