diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2021-10-17 21:04:29 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2021-10-17 21:04:29 +0200 |
| commit | 8671b8e7ff07197167b666bd490f42411274bd81 (patch) | |
| tree | 2130205a2e26f80826539b11125347330e79f781 /src | |
| parent | 33683634ee17a6718c2ff8d18bdc12b2a74eb3e1 (diff) | |
| download | PROJ-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.cpp | 15 |
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()) { |
