diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2017-09-27 22:18:05 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2017-09-27 22:18:05 +0200 |
| commit | 41ac8f6b2c1c4b94873393df0b3fa595ff4f0b2d (patch) | |
| tree | 0e80fcfd35b0b296ac9f9292f1e8dedb32a031dc /src | |
| parent | 6ea5a3cbe601bc14cb18614fdaa97092abf96f3c (diff) | |
| download | PROJ-41ac8f6b2c1c4b94873393df0b3fa595ff4f0b2d.tar.gz PROJ-41ac8f6b2c1c4b94873393df0b3fa595ff4f0b2d.zip | |
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
Diffstat (limited to 'src')
| -rw-r--r-- | src/PJ_unitconvert.c | 13 |
1 files changed, 10 insertions, 3 deletions
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 */ |
