From 7dd4dbe285d820c54d94a178806861a9973b5116 Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Fri, 23 Jan 2026 17:13:03 +0000 Subject: [PATCH] fixes Signed-off-by: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> --- include/xrpl/basics/Number.h | 8 ++++++-- sanitizers/suppressions/asan.supp | 5 +++++ sanitizers/suppressions/ubsan.supp | 1 - src/libxrpl/protocol/STParsedJSON.cpp | 2 +- src/test/app/ValidatorSite_test.cpp | 2 +- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/include/xrpl/basics/Number.h b/include/xrpl/basics/Number.h index 2f467fb036..2724b2939b 100644 --- a/include/xrpl/basics/Number.h +++ b/include/xrpl/basics/Number.h @@ -733,8 +733,12 @@ Number::normalizeToRange(T minMantissa, T maxMantissa) const "Number is non-negative for unsigned range."); Number::normalize(negative, mantissa, exponent, minMantissa, maxMantissa); - auto const sign = negative ? -1 : 1; - return std::make_pair(static_cast(sign * mantissa), exponent); + // Cast mantissa to signed type first to avoid unsigned integer overflow + // when multiplying by negative sign + T signedMantissa = static_cast(mantissa); + if (negative) + signedMantissa = -signedMantissa; + return std::make_pair(signedMantissa, exponent); } inline constexpr Number diff --git a/sanitizers/suppressions/asan.supp b/sanitizers/suppressions/asan.supp index 75436e27eb..f501094cfd 100644 --- a/sanitizers/suppressions/asan.supp +++ b/sanitizers/suppressions/asan.supp @@ -21,3 +21,8 @@ # Boost - false positives from stackful coroutines interceptor_name:boost +interceptor_name:clock_gettime +interceptor_name:memcpy +interceptor_name:__bzero +interceptor_name:__asan_memset +interceptor_name:__asan_memcpy diff --git a/sanitizers/suppressions/ubsan.supp b/sanitizers/suppressions/ubsan.supp index a5faf565af..dc821f8d30 100644 --- a/sanitizers/suppressions/ubsan.supp +++ b/sanitizers/suppressions/ubsan.supp @@ -129,7 +129,6 @@ unsigned-integer-overflow:string_view # runtime error: unsigned integer overflow: 0 - 1 cannot be represented in type 'std::size_t' (aka 'unsigned long') unsigned-integer-overflow:src/libxrpl/basics/base64.cpp unsigned-integer-overflow:src/libxrpl/basics/Number.cpp -unsigned-integer-overflow:src/libxrpl/basics/Number.h unsigned-integer-overflow:src/libxrpl/crypto/RFC1751.cpp unsigned-integer-overflow:rc/libxrpl/json/json_value.cpp unsigned-integer-overflow:src/libxrpl/ledger/ApplyView.cpp diff --git a/src/libxrpl/protocol/STParsedJSON.cpp b/src/libxrpl/protocol/STParsedJSON.cpp index 34c8b70e45..a2a1e21cdc 100644 --- a/src/libxrpl/protocol/STParsedJSON.cpp +++ b/src/libxrpl/protocol/STParsedJSON.cpp @@ -71,7 +71,7 @@ make_name(std::string const& object, std::string const& field) if (field.empty()) return object; - return object + "." + field; + return {object + "." + field}; } static inline Json::Value diff --git a/src/test/app/ValidatorSite_test.cpp b/src/test/app/ValidatorSite_test.cpp index 1118818d7a..466e81417e 100644 --- a/src/test/app/ValidatorSite_test.cpp +++ b/src/test/app/ValidatorSite_test.cpp @@ -156,7 +156,7 @@ private: std::vector emptyCfgKeys; struct publisher { - publisher(FetchListConfig const& c) : cfg{c} + publisher(FetchListConfig const& c) : cfg{c}, isRetry{false} { } std::shared_ptr server;