diff --git a/src/util/strencodings.h b/src/util/strencodings.h --- a/src/util/strencodings.h +++ b/src/util/strencodings.h @@ -177,10 +177,13 @@ * Takes time proportional to length of first argument. */ template bool TimingResistantEqual(const T &a, const T &b) { - if (b.size() == 0) return a.size() == 0; + if (b.size() == 0) { + return a.size() == 0; + } size_t accumulator = a.size() ^ b.size(); - for (size_t i = 0; i < a.size(); i++) - accumulator |= a[i] ^ b[i % b.size()]; + for (size_t i = 0; i < a.size(); i++) { + accumulator |= size_t(a[i] ^ b[i % b.size()]); + } return accumulator == 0; } diff --git a/src/util/strencodings.cpp b/src/util/strencodings.cpp --- a/src/util/strencodings.cpp +++ b/src/util/strencodings.cpp @@ -95,7 +95,7 @@ if (c == (signed char)-1) { break; } - uint8_t n = (c << 4); + auto n{uint8_t(c << 4)}; c = HexDigit(*psz++); if (c == (signed char)-1) { break; @@ -153,7 +153,7 @@ } std::vector DecodeBase64(const char *p, bool *pf_invalid) { - static const int decode64_table[256] = { + static const int8_t decode64_table[256] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, @@ -178,7 +178,7 @@ if (x == -1) { break; } - val.push_back(x); + val.push_back(uint8_t(x)); ++p; } @@ -234,7 +234,7 @@ } std::vector DecodeBase32(const char *p, bool *pf_invalid) { - static const int decode32_table[256] = { + static const int8_t decode32_table[256] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, @@ -259,7 +259,7 @@ if (x == -1) { break; } - val.push_back(x); + val.push_back(uint8_t(x)); ++p; } diff --git a/test/sanitizer_suppressions/ubsan b/test/sanitizer_suppressions/ubsan --- a/test/sanitizer_suppressions/ubsan +++ b/test/sanitizer_suppressions/ubsan @@ -62,7 +62,6 @@ implicit-integer-sign-change:test/streams_tests.cpp implicit-integer-sign-change:test/transaction_tests.cpp implicit-integer-sign-change:txmempool.cpp -implicit-integer-sign-change:util/strencodings.* implicit-integer-sign-change:zmq/zmqpublishnotifier.cpp implicit-signed-integer-truncation,implicit-integer-sign-change:chain.h implicit-signed-integer-truncation,implicit-integer-sign-change:test/skiplist_tests.cpp