diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2019-04-05 13:30:57 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2019-04-05 13:30:57 +0200 |
| commit | a90a5c0b9ac58c322daa8f339719b2c0e09d3d45 (patch) | |
| tree | a679016c8d7b6de81e5d009be87fdeac1c18126c /src/projections/krovak.cpp | |
| parent | 97de772e16281fad460a1469c34cd37ff42bcefb (diff) | |
| download | PROJ-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.cpp | 6 |
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); |
