aboutsummaryrefslogtreecommitdiff
path: root/src/iso19111/coordinateoperation.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-02-03 14:48:17 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-02-03 14:48:17 +0100
commit24c1272cf4397614fb7ea5502bba9258e6a8f972 (patch)
treed6d3579c439869fb0740dec37844e1cd34c84e56 /src/iso19111/coordinateoperation.cpp
parentb30ed5cba50688cea9ac2af90855177f84efea5a (diff)
downloadPROJ-24c1272cf4397614fb7ea5502bba9258e6a8f972.tar.gz
PROJ-24c1272cf4397614fb7ea5502bba9258e6a8f972.zip
WKT1 export: avoid division by zero. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=12854. Credit to OSS Fuzz
Diffstat (limited to 'src/iso19111/coordinateoperation.cpp')
-rw-r--r--src/iso19111/coordinateoperation.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/iso19111/coordinateoperation.cpp b/src/iso19111/coordinateoperation.cpp
index 6f9b6283..8a10bc5a 100644
--- a/src/iso19111/coordinateoperation.cpp
+++ b/src/iso19111/coordinateoperation.cpp
@@ -2147,11 +2147,19 @@ void ParameterValue::_exportToWKT(io::WKTFormatter *formatter) const {
// registered linear / angular unit.
const auto &unitType = unit.type();
if (unitType == common::UnitOfMeasure::Type::LINEAR) {
- formatter->add(
- l_value.convertToUnit(*(formatter->axisLinearUnit())));
+ const auto &targetUnit = *(formatter->axisLinearUnit());
+ if (targetUnit.conversionToSI() == 0.0) {
+ throw io::FormattingException(
+ "cannot convert value to target linear unit");
+ }
+ formatter->add(l_value.convertToUnit(targetUnit));
} else if (unitType == common::UnitOfMeasure::Type::ANGULAR) {
- formatter->add(
- l_value.convertToUnit(*(formatter->axisAngularUnit())));
+ const auto &targetUnit = *(formatter->axisAngularUnit());
+ if (targetUnit.conversionToSI() == 0.0) {
+ throw io::FormattingException(
+ "cannot convert value to target angular unit");
+ }
+ formatter->add(l_value.convertToUnit(targetUnit));
} else {
formatter->add(l_value.getSIValue());
}