From 33683634ee17a6718c2ff8d18bdc12b2a74eb3e1 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sat, 16 Oct 2021 16:54:31 +0200 Subject: createOperations(): avoid harmless floating-point division by zero if conversion factor of target unit is 0. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=39969 --- src/iso19111/operation/coordinateoperationfactory.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src') diff --git a/src/iso19111/operation/coordinateoperationfactory.cpp b/src/iso19111/operation/coordinateoperationfactory.cpp index b59eeb91..e9bd3cfe 100644 --- a/src/iso19111/operation/coordinateoperationfactory.cpp +++ b/src/iso19111/operation/coordinateoperationfactory.cpp @@ -4347,6 +4347,9 @@ void CoordinateOperationFactory::Private::createOperationsBoundToGeog( const bool heightDepthReversal = ((srcIsUp && dstIsDown) || (srcIsDown && dstIsUp)); + if (convDst == 0) + throw InvalidOperation( + "Conversion factor of target unit is 0"); const double factor = convSrc / convDst; auto conv = Conversion::createChangeVerticalUnit( util::PropertyMap().set( @@ -4460,6 +4463,8 @@ void CoordinateOperationFactory::Private::createOperationsVertToVert( const bool heightDepthReversal = ((srcIsUp && dstIsDown) || (srcIsDown && dstIsUp)); + if (convDst == 0) + throw InvalidOperation("Conversion factor of target unit is 0"); const double factor = convSrc / convDst; if (!equivalentVDatum) { auto name = buildTransfName(sourceCRS->nameStr(), targetCRS->nameStr()); @@ -4557,6 +4562,8 @@ void CoordinateOperationFactory::Private::createOperationsVertToGeogBallpark( const bool heightDepthReversal = ((srcIsUp && dstIsDown) || (srcIsDown && dstIsUp)); + if (convDst == 0) + throw InvalidOperation("Conversion factor of target unit is 0"); const double factor = convSrc / convDst; const auto &sourceCRSExtent = getExtent(sourceCRS); -- cgit v1.2.3