From 41ac8f6b2c1c4b94873393df0b3fa595ff4f0b2d Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 27 Sep 2017 22:18:05 +0200 Subject: decimalyear_to_mjd(): avoid almost infinite loop in case of crazy input. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3449. Credit to OSS Fuzz --- src/PJ_unitconvert.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/PJ_unitconvert.c b/src/PJ_unitconvert.c index 7ce6035c..8581dcad 100644 --- a/src/PJ_unitconvert.c +++ b/src/PJ_unitconvert.c @@ -112,9 +112,16 @@ static double decimalyear_to_mjd(double decimalyear) { /*********************************************************************** Epoch of modified julian date is 1858-11-16 00:00 ************************************************************************/ - int year = (int)floor(decimalyear); - double fractional_year = decimalyear - year; - double mjd = (year - 1859)*365 + 14 + 31; + int year; + double fractional_year; + double mjd; + + if( decimalyear < -10000 || decimalyear > 10000 ) + return 0; + + year = (int)floor(decimalyear); + fractional_year = decimalyear - year; + mjd = (year - 1859)*365 + 14 + 31; mjd += fractional_year*days_in_year(year); /* take care of leap days */ -- cgit v1.2.3