aboutsummaryrefslogtreecommitdiff
path: root/src/projections/krovak.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-04-05 13:30:57 +0200
committerEven Rouault <even.rouault@spatialys.com>2019-04-05 13:30:57 +0200
commita90a5c0b9ac58c322daa8f339719b2c0e09d3d45 (patch)
treea679016c8d7b6de81e5d009be87fdeac1c18126c /src/projections/krovak.cpp
parent97de772e16281fad460a1469c34cd37ff42bcefb (diff)
downloadPROJ-a90a5c0b9ac58c322daa8f339719b2c0e09d3d45.tar.gz
PROJ-a90a5c0b9ac58c322daa8f339719b2c0e09d3d45.zip
krovak: avoid division by zero
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14061 Credit to OSS Fuzz
Diffstat (limited to 'src/projections/krovak.cpp')
-rw-r--r--src/projections/krovak.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/projections/krovak.cpp b/src/projections/krovak.cpp
index c30be411..c3f61f3d 100644
--- a/src/projections/krovak.cpp
+++ b/src/projections/krovak.cpp
@@ -222,7 +222,11 @@ PJ *PROJECTION(krovak) {
Q->alpha = sqrt(1. + (P->es * pow(cos(P->phi0), 4)) / (1. - P->es));
u0 = asin(sin(P->phi0) / Q->alpha);
g = pow( (1. + P->e * sin(P->phi0)) / (1. - P->e * sin(P->phi0)) , Q->alpha * P->e / 2. );
- Q->k = tan( u0 / 2. + M_PI_4) / pow (tan(P->phi0 / 2. + M_PI_4) , Q->alpha) * g;
+ double tan_half_phi0_plus_pi_4 = tan(P->phi0 / 2. + M_PI_4);
+ if( tan_half_phi0_plus_pi_4 == 0.0 ) {
+ return pj_default_destructor(P, PJD_ERR_INVALID_ARG);
+ }
+ Q->k = tan( u0 / 2. + M_PI_4) / pow (tan_half_phi0_plus_pi_4 , Q->alpha) * g;
n0 = sqrt(1. - P->es) / (1. - P->es * pow(sin(P->phi0), 2));
Q->n = sin(S0);
Q->rho0 = P->k0 * n0 / tan(S0);