aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2017-09-27 22:18:05 +0200
committerEven Rouault <even.rouault@spatialys.com>2017-09-27 22:18:05 +0200
commit41ac8f6b2c1c4b94873393df0b3fa595ff4f0b2d (patch)
tree0e80fcfd35b0b296ac9f9292f1e8dedb32a031dc /src
parent6ea5a3cbe601bc14cb18614fdaa97092abf96f3c (diff)
downloadPROJ-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.c13
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 */