diff --git a/ChangeLog b/ChangeLog index c8ca7ad8d0c9457b1cf00e8e72605a89d29c107b..fc1b85416ee341cc57f2c7ce287c22588adc4304 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,10 @@ * Version 2.0.2 released +2021-11-12 Uwe Schulzweida + + * grib2: fix unsigned integer overflow for key scaledValueOfFirstFixedSurface + 2021-11-08 Uwe Schulzweida * changed chunk_size_lim from 1073741823 to 16777216 (bug fix) diff --git a/src/stream_gribapi.c b/src/stream_gribapi.c index fb39bbea19dc7401d540f7ac549c0bc9079b6a26..0544e8dcbf8d482ff4c9260b872c88099ed1d677 100644 --- a/src/stream_gribapi.c +++ b/src/stream_gribapi.c @@ -2468,14 +2468,15 @@ void gribapiDefGrid(int editionNumber, grib_handle *gh, int gridID, int comptype static void getLevelFactor(double level, long *factor, long *out_scaled_value) { + const double eps = 1.0e-7; + double scaled_value = level; long iscaled_value = lround(scaled_value); - long i; - const double eps = 1.e-8; - for ( i=0; (fabs(scaled_value - (double) iscaled_value) >= eps) && i < 7; i++ ) + long i; + for (i = 0; (iscaled_value < (4294967295/10)) && (fabs(scaled_value - (double) iscaled_value) >= eps) && i < 7; i++) { - scaled_value *= 10.; + scaled_value *= 10.0; iscaled_value = lround(scaled_value); } @@ -2587,7 +2588,7 @@ void gribapiDefLevel(int editionNumber, grib_handle *gh, int zaxisID, int levelI The key/value pairs that are set in "grib2DefLevel" do not exist for this template. */ - if ( proddef_template_num != 32 ) + if (proddef_template_num != 32) grib2DefLevel(gh, gcinit, grib_ltype, grib_ltype2, hasBounds, level, dlevel1, dlevel2); }