aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2021-10-17 21:04:29 +0200
committerEven Rouault <even.rouault@spatialys.com>2021-10-17 21:04:29 +0200
commit8671b8e7ff07197167b666bd490f42411274bd81 (patch)
tree2130205a2e26f80826539b11125347330e79f781 /src
parent33683634ee17a6718c2ff8d18bdc12b2a74eb3e1 (diff)
downloadPROJ-8671b8e7ff07197167b666bd490f42411274bd81.tar.gz
PROJ-8671b8e7ff07197167b666bd490f42411274bd81.zip
exportToPROJStringGeneric(): avoid harmless floating-point division by zero if conversion factor is 0. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=40050
Diffstat (limited to 'src')
-rw-r--r--src/iso19111/operation/singleoperation.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/iso19111/operation/singleoperation.cpp b/src/iso19111/operation/singleoperation.cpp
index 2f60828e..4dadfa40 100644
--- a/src/iso19111/operation/singleoperation.cpp
+++ b/src/iso19111/operation/singleoperation.cpp
@@ -2118,15 +2118,18 @@ bool SingleOperation::exportToPROJStringGeneric(
}
if (methodEPSGCode == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT) {
- double convFactor = parameterValueNumericAsSI(
+ const double convFactor = parameterValueNumericAsSI(
EPSG_CODE_PARAMETER_UNIT_CONVERSION_SCALAR);
- auto uom = common::UnitOfMeasure(std::string(), convFactor,
- common::UnitOfMeasure::Type::LINEAR)
- .exportToPROJString();
- auto reverse_uom =
- common::UnitOfMeasure(std::string(), 1.0 / convFactor,
+ const auto uom =
+ common::UnitOfMeasure(std::string(), convFactor,
common::UnitOfMeasure::Type::LINEAR)
.exportToPROJString();
+ const auto reverse_uom =
+ convFactor == 0.0
+ ? std::string()
+ : common::UnitOfMeasure(std::string(), 1.0 / convFactor,
+ common::UnitOfMeasure::Type::LINEAR)
+ .exportToPROJString();
if (uom == "m") {
// do nothing
} else if (!uom.empty()) {