aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Evers <kristianevers@gmail.com>2017-05-23 21:57:04 +0200
committerKristian Evers <kristianevers@gmail.com>2017-05-23 21:57:04 +0200
commitfe843d11b4b5f58e09e896848ce4354170bf14bc (patch)
treeede1f40b256cdde94055bb724972222107950363
parent28818777f9050ba78d9955839d2763380dcc4612 (diff)
downloadPROJ-fe843d11b4b5f58e09e896848ce4354170bf14bc.tar.gz
PROJ-fe843d11b4b5f58e09e896848ce4354170bf14bc.zip
Avoid zero division in PJ_stere e_forward().
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=1797 Credit to OSS-Fuzz.
-rw-r--r--src/PJ_stere.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/PJ_stere.c b/src/PJ_stere.c
index c7fb02e3..f338d16d 100644
--- a/src/PJ_stere.c
+++ b/src/PJ_stere.c
@@ -34,7 +34,7 @@ static double ssfn_ (double phit, double sinphi, double eccen) {
static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */
XY xy = {0.0,0.0};
struct pj_opaque *Q = P->opaque;
- double coslam, sinlam, sinX = 0.0, cosX = 0.0, X, A, sinphi;
+ double coslam, sinlam, sinX = 0.0, cosX = 0.0, X, A = 0.0, sinphi;
coslam = cos (lp.lam);
sinlam = sin (lp.lam);
@@ -52,8 +52,13 @@ static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */
goto xmul; /* but why not just xy.x = A * cosX; break; ? */
case EQUIT:
- A = Q->akm1 / (1. + cosX * coslam);
- xy.y = A * sinX;
+ /* avoid zero division */
+ if (1. + cosX * coslam == 0.0) {
+ xy.y = HUGE_VAL;
+ } else {
+ A = Q->akm1 / (1. + cosX * coslam);
+ xy.y = A * sinX;
+ }
xmul:
xy.x = A * cosX;
break;