From c7261a095121bc4e483df64d3dfb1fa74e0e48d7 Mon Sep 17 00:00:00 2001 From: Triang3l Date: Wed, 17 Apr 2019 02:17:56 +0300 Subject: [PATCH] Prevent shift overflow in FloatTo7e3/FloatTo6e4 (#129) --- DirectXTex/DirectXTexConvert.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DirectXTex/DirectXTexConvert.cpp b/DirectXTex/DirectXTexConvert.cpp index 4aaa624..ced4e55 100644 --- a/DirectXTex/DirectXTexConvert.cpp +++ b/DirectXTex/DirectXTexConvert.cpp @@ -37,7 +37,7 @@ namespace { // The number is too small to be represented as a normalized 7e3. // Convert it to a denormalized value. - uint32_t Shift = 125U - (IValue >> 23U); + uint32_t Shift = std::min(125U - (IValue >> 23U), 24U); IValue = (0x800000U | (IValue & 0x7FFFFFU)) >> Shift; } else @@ -103,7 +103,7 @@ namespace { // The number is too small to be represented as a normalized 6e4. // Convert it to a denormalized value. - uint32_t Shift = 121U - (IValue >> 23U); + uint32_t Shift = std::min(121U - (IValue >> 23U), 24U); IValue = (0x800000U | (IValue & 0x7FFFFFU)) >> Shift; } else