From e121dc35abafd9a2eda01b05aa5fa13b13e6196e Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sun, 3 Feb 2019 15:16:01 +0100 Subject: Avoid division by zero in Ellipsoid::computeSemiMinorAxis(). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=12867. Credit to OSS Fuzz. master only --- src/iso19111/datum.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/iso19111/datum.cpp') diff --git a/src/iso19111/datum.cpp b/src/iso19111/datum.cpp index 4df1b319..66717f70 100644 --- a/src/iso19111/datum.cpp +++ b/src/iso19111/datum.cpp @@ -646,7 +646,8 @@ EllipsoidNNPtr Ellipsoid::createSphere(const util::PropertyMap &properties, * @param properties See \ref general_properties. * At minimum the name should be defined. * @param semiMajorAxisIn the semi-major axis. - * @param invFlattening the inverse/reverse flattening. + * @param invFlattening the inverse/reverse flattening. If set to 0, this will + * be considered as a sphere. * @param celestialBody Name of the celestial body on which the ellipsoid refers * to. * @return new Ellipsoid. @@ -654,8 +655,11 @@ EllipsoidNNPtr Ellipsoid::createSphere(const util::PropertyMap &properties, EllipsoidNNPtr Ellipsoid::createFlattenedSphere( const util::PropertyMap &properties, const common::Length &semiMajorAxisIn, const common::Scale &invFlattening, const std::string &celestialBody) { - auto ellipsoid(Ellipsoid::nn_make_shared( - semiMajorAxisIn, invFlattening, celestialBody)); + auto ellipsoid(invFlattening.value() == 0 + ? Ellipsoid::nn_make_shared(semiMajorAxisIn, + celestialBody) + : Ellipsoid::nn_make_shared( + semiMajorAxisIn, invFlattening, celestialBody)); ellipsoid->setProperties(properties); return ellipsoid; } -- cgit v1.2.3