aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-02-03 15:16:01 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-02-03 15:16:01 +0100
commite121dc35abafd9a2eda01b05aa5fa13b13e6196e (patch)
tree7f49c0ccf0c9792da32cf1fdbd6868bd6f6aded3 /src
parent24c1272cf4397614fb7ea5502bba9258e6a8f972 (diff)
downloadPROJ-e121dc35abafd9a2eda01b05aa5fa13b13e6196e.tar.gz
PROJ-e121dc35abafd9a2eda01b05aa5fa13b13e6196e.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/iso19111/datum.cpp10
1 files changed, 7 insertions, 3 deletions
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<Ellipsoid>(
- semiMajorAxisIn, invFlattening, celestialBody));
+ auto ellipsoid(invFlattening.value() == 0
+ ? Ellipsoid::nn_make_shared<Ellipsoid>(semiMajorAxisIn,
+ celestialBody)
+ : Ellipsoid::nn_make_shared<Ellipsoid>(
+ semiMajorAxisIn, invFlattening, celestialBody));
ellipsoid->setProperties(properties);
return ellipsoid;
}