From a7c26b586f1bd04a11cca944e0bd83e5deeb5b55 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 20 Sep 2022 09:59:50 -0400 Subject: [PATCH] COMP: Fix comparison of integer expressions of different signedness Use CastWithRangeCheck to safely convert size_t to int. --- .../IO/MeshVTK/src/itkVTKPolyDataMeshIO.cxx | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/Modules/IO/MeshVTK/src/itkVTKPolyDataMeshIO.cxx b/Modules/IO/MeshVTK/src/itkVTKPolyDataMeshIO.cxx index 4c365ca65f4..5d34aa5673d 100644 --- a/Modules/IO/MeshVTK/src/itkVTKPolyDataMeshIO.cxx +++ b/Modules/IO/MeshVTK/src/itkVTKPolyDataMeshIO.cxx @@ -58,20 +58,18 @@ ReadFloatingPointsAsASCII(std::ifstream & inputFile, { return -NumericLimits::infinity(); } - const auto numberOfChars = str.size(); - if (numberOfChars <= std::numeric_limits::max()) - { - constexpr auto double_NaN = std::numeric_limits::quiet_NaN(); - int processedCharCount{ 0 }; - const double_conversion::StringToDoubleConverter converter(0, double_NaN, double_NaN, "inf", "nan"); - const auto conversionResult = - converter.StringTo(str.c_str(), static_cast(numberOfChars), &processedCharCount); + const int numberOfChars = Math::CastWithRangeCheck(str.size()); - if (processedCharCount == static_cast(numberOfChars) && !std::isnan(conversionResult)) - { - return conversionResult; - } + constexpr auto double_NaN = std::numeric_limits::quiet_NaN(); + int processedCharCount{ 0 }; + const double_conversion::StringToDoubleConverter converter(0, double_NaN, double_NaN, "inf", "nan"); + const auto conversionResult = + converter.StringTo(str.c_str(), numberOfChars, &processedCharCount); + + if (processedCharCount == numberOfChars && !std::isnan(conversionResult)) + { + return conversionResult; } } itkGenericExceptionMacro("Failed to read a floating point component from the specified ASCII input file!"