aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-03-26 15:49:42 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-03-26 15:49:42 +0100
commite08b7bddd25349a24a294616e4d9c984c138e531 (patch)
tree2bbc58a065084238be74c56b247d0646ba6e78eb
parenta199edb807eea4439b98865d5cd33fa7e3fd0706 (diff)
downloadPROJ-e08b7bddd25349a24a294616e4d9c984c138e531.tar.gz
PROJ-e08b7bddd25349a24a294616e4d9c984c138e531.zip
omerc inverse: fix division
Test case https://oss-fuzz.com/testcase-detail/5739351578771456 of https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13894 Credit to OSS Fuzz
-rw-r--r--src/projections/omerc.cpp4
-rw-r--r--test/gie/builtins.gie7
2 files changed, 11 insertions, 0 deletions
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);
diff --git a/test/gie/builtins.gie b/test/gie/builtins.gie
index 0855bec7..a4fb5055 100644
--- a/test/gie/builtins.gie
+++ b/test/gie/builtins.gie
@@ -3801,6 +3801,13 @@ expect 0.000898315 -0.001808739
accept -200 -100
expect -0.000898315 -0.001808739
+-------------------------------------------------------------------------------
+operation +proj=omerc +R=1 +lat_0=1 +lat_1=2 +no_rot
+-------------------------------------------------------------------------------
+direction inverse
+accept 0 1e200
+expect failure errno invalid_x_or_y
+
===============================================================================
Ortelius Oval