aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKristian Evers <kristianevers@gmail.com>2019-03-27 07:36:19 +0100
committerGitHub <noreply@github.com>2019-03-27 07:36:19 +0100
commit06fe950a32fb9614aea12c31d4733e6a807553c9 (patch)
tree6d6c4b627cb2c95492363a076dfd50c094629db8 /src
parentcc0326748ba04cac6d9409543e6fad112bca36b6 (diff)
parentd0ffa6c9702228aa55c7d2f1c887bf547c46b283 (diff)
downloadPROJ-06fe950a32fb9614aea12c31d4733e6a807553c9.tar.gz
PROJ-06fe950a32fb9614aea12c31d4733e6a807553c9.zip
Merge pull request #1376 from rouault/ossfuzz_13894_follow_up
Ossfuzz 13894 follow up
Diffstat (limited to 'src')
-rw-r--r--src/projections/misrsom.cpp8
-rw-r--r--src/projections/omerc.cpp4
2 files changed, 10 insertions, 2 deletions
diff --git a/src/projections/misrsom.cpp b/src/projections/misrsom.cpp
index c53f22a1..d16dd62d 100644
--- a/src/projections/misrsom.cpp
+++ b/src/projections/misrsom.cpp
@@ -151,10 +151,14 @@ static PJ_LP e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */
lamdp -= TOL;
spp = sin(phidp);
sppsq = spp * spp;
+ const double denom = 1. - sppsq * (1. + Q->u);
+ if( denom == 0.0 ) {
+ proj_errno_set(P, PJD_ERR_NON_CONVERGENT);
+ return proj_coord_error().lp;
+ }
lamt = atan(((1. - sppsq * P->rone_es) * tan(lamdp) *
Q->ca - spp * Q->sa * sqrt((1. + Q->q * dd) * (
- 1. - sppsq) - sppsq * Q->u) / cos(lamdp)) / (1. - sppsq
- * (1. + Q->u)));
+ 1. - sppsq) - sppsq * Q->u) / cos(lamdp)) / denom);
sl = lamt >= 0. ? 1. : -1.;
scl = cos(lamdp) >= 0. ? 1. : -1;
lamt -= M_HALFPI * (1. - scl) * sl;
diff --git a/src/projections/omerc.cpp b/src/projections/omerc.cpp
index e9b7b4a0..c33f6489 100644
--- a/src/projections/omerc.cpp
+++ b/src/projections/omerc.cpp
@@ -97,6 +97,10 @@ static PJ_LP e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */
u = xy.y * Q->cosrot + xy.x * Q->sinrot + Q->u_0;
}
Qp = exp(- Q->BrA * v);
+ if( Qp == 0 ) {
+ proj_errno_set(P, PJD_ERR_INVALID_X_OR_Y);
+ return proj_coord_error().lp;
+ }
Sp = .5 * (Qp - 1. / Qp);
Tp = .5 * (Qp + 1. / Qp);
Vp = sin(Q->BrA * u);