aboutsummaryrefslogtreecommitdiff
path: root/src/iso19111
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2021-09-03 22:48:41 +0200
committerEven Rouault <even.rouault@spatialys.com>2021-09-03 22:49:12 +0200
commit126991dea06eb7160fe572b147f8a74a306b5c58 (patch)
tree68fb2d4f930a44d011aabec81b4c8b57ba8126bc /src/iso19111
parent24baa80540947808a3fb76457c918415b3ed0ab8 (diff)
downloadPROJ-126991dea06eb7160fe572b147f8a74a306b5c58.tar.gz
PROJ-126991dea06eb7160fe572b147f8a74a306b5c58.zip
pj_obj_create(): avoid passing invalid ellipsoid parameters ot pj_calc_ellipsoid_params(). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=31964
Diffstat (limited to 'src/iso19111')
-rw-r--r--src/iso19111/c_api.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/iso19111/c_api.cpp b/src/iso19111/c_api.cpp
index 1bf6cbf0..b27ac005 100644
--- a/src/iso19111/c_api.cpp
+++ b/src/iso19111/c_api.cpp
@@ -222,6 +222,13 @@ static PJ *pj_obj_create(PJ_CONTEXT *ctx, const IdentifiedObjectNNPtr &objIn) {
const auto &ellps = geodCRS->ellipsoid();
const double a = ellps->semiMajorAxis().getSIValue();
const double es = ellps->squaredEccentricity();
+ if (!(a > 0 && es >= 0)) {
+ proj_log_error(pj, _("Invalid ellipsoid parameters"));
+ proj_errno_set(pj,
+ PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ proj_destroy(pj);
+ return nullptr;
+ }
pj_calc_ellipsoid_params(pj, a, es);
assert(pj->geod == nullptr);
pj->geod = static_cast<struct geod_geodesic *>(