diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2019-04-12 18:21:22 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2019-04-12 18:21:22 +0200 |
| commit | 33f81359efd93ccd4bf59cc4f6b68c6363042f97 (patch) | |
| tree | 45821c19e95199e58a70f52a1b2bfe4699b3992f /src/projections/eqdc.cpp | |
| parent | 2117c151d62cd0267068075b9e7cf7cc0d404a63 (diff) | |
| download | PROJ-33f81359efd93ccd4bf59cc4f6b68c6363042f97.tar.gz PROJ-33f81359efd93ccd4bf59cc4f6b68c6363042f97.zip | |
Validate lat_0 range in general case, lat_1 and lat_2 for lcc and eqdc
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14211
Credit to OSS Fuzz
Diffstat (limited to 'src/projections/eqdc.cpp')
| -rw-r--r-- | src/projections/eqdc.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/projections/eqdc.cpp b/src/projections/eqdc.cpp index d175d4a1..49cfc0ae 100644 --- a/src/projections/eqdc.cpp +++ b/src/projections/eqdc.cpp @@ -84,12 +84,14 @@ PJ *PROJECTION(eqdc) { Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; Q->phi2 = pj_param(P->ctx, P->params, "rlat_2").f; + if (fabs(Q->phi1) > M_HALFPI || fabs(Q->phi2) > M_HALFPI) + return destructor(P, PJD_ERR_LAT_LARGER_THAN_90); if (fabs(Q->phi1 + Q->phi2) < EPS10) - return pj_default_destructor (P, PJD_ERR_CONIC_LAT_EQUAL); + return destructor (P, PJD_ERR_CONIC_LAT_EQUAL); if (!(Q->en = pj_enfn(P->es))) - return pj_default_destructor(P, ENOMEM); + return destructor(P, ENOMEM); Q->n = sinphi = sin(Q->phi1); cosphi = cos(Q->phi1); @@ -104,6 +106,10 @@ PJ *PROJECTION(eqdc) { cosphi = cos(Q->phi2); Q->n = (m1 - pj_msfn(sinphi, cosphi, P->es)) / (pj_mlfn(Q->phi2, sinphi, cosphi, Q->en) - ml1); + if (Q->n == 0) { + // Not quite, but es is very close to 1... + return destructor(P, PJD_ERR_INVALID_ECCENTRICITY); + } } Q->c = ml1 + m1 / Q->n; Q->rho0 = Q->c - pj_mlfn(P->phi0, sin(P->phi0), |
