From a768a013f74fa2815167da67b99e23da21c55d38 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 13 Aug 2021 17:52:18 +0200 Subject: Merge pull request #2800 from rouault/fix_gdal_4224 Inverse laea ellipsoidal: return PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN when appropriates (fixes OSGeo/gdal#4224) --- src/projections/laea.cpp | 10 +++++++++- test/gie/builtins.gie | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/projections/laea.cpp b/src/projections/laea.cpp index 8c7797e8..22f00d3f 100644 --- a/src/projections/laea.cpp +++ b/src/projections/laea.cpp @@ -145,6 +145,7 @@ static PJ_LP laea_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse switch (Q->mode) { case EQUIT: case OBLIQ: + { xy.x /= Q->dd; xy.y *= Q->dd; rho = hypot(xy.x, xy.y); @@ -153,7 +154,13 @@ static PJ_LP laea_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse lp.phi = P->phi0; return lp; } - sCe = 2. * asin(.5 * rho / Q->rq); + const double asin_argument = .5 * rho / Q->rq; + if( asin_argument > 1 ) + { + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); + return lp; + } + sCe = 2. * asin(asin_argument); cCe = cos(sCe); sCe = sin(sCe); xy.x *= sCe; @@ -165,6 +172,7 @@ static PJ_LP laea_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse xy.y = rho * cCe; } break; + } case N_POLE: xy.y = -xy.y; /*-fallthrough*/ diff --git a/test/gie/builtins.gie b/test/gie/builtins.gie index 1f3824c8..19719796 100644 --- a/test/gie/builtins.gie +++ b/test/gie/builtins.gie @@ -2582,6 +2582,9 @@ expect -0.001796631 0.000904369 accept -200 -100 expect -0.001796631 -0.000904369 +accept 13000000 0 +expect failure errno coord_transfm_outside_projection_domain + ------------------------------------------------------------------------------- operation +proj=laea +R=6400000 ------------------------------------------------------------------------------- -- cgit v1.2.3