disable UBSAN for functions with intentional -ve shift / overflow

Summary:
disable UBSAN for functions with intentional left shift on -ve number / overflow

These functions are
rocksdb:: Hash
FixedLengthColBufEncoder::Append
FaultInjectionTest:: Key
Closes https://github.com/facebook/rocksdb/pull/1577

Differential Revision: D4240801

Pulled By: IslamAbdelRahman

fbshipit-source-id: 3e1caf6
main
Islam AbdelRahman 8 years ago committed by Facebook Github Bot
parent 1886c435b9
commit 52fd1ff2c2
  1. 5
      db/fault_injection_test.cc
  2. 6
      util/hash.cc
  3. 5
      utilities/col_buf_encoder.cc

@ -228,6 +228,11 @@ class FaultInjectionTest : public testing::Test,
return Status::OK(); return Status::OK();
} }
#if defined(__clang__)
__attribute__((__no_sanitize__("undefined")))
#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)
__attribute__((__no_sanitize_undefined__))
#endif
// Return the ith key // Return the ith key
Slice Key(int i, std::string* storage) const { Slice Key(int i, std::string* storage) const {
int num = i; int num = i;

@ -13,6 +13,12 @@
namespace rocksdb { namespace rocksdb {
// This function may intentionally do a left shift on a -ve number
#if defined(__clang__)
__attribute__((__no_sanitize__("undefined")))
#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)
__attribute__((__no_sanitize_undefined__))
#endif
uint32_t Hash(const char* data, size_t n, uint32_t seed) { uint32_t Hash(const char* data, size_t n, uint32_t seed) {
// Similar to murmur hash // Similar to murmur hash
const uint32_t m = 0xc6a4a793; const uint32_t m = 0xc6a4a793;

@ -46,6 +46,11 @@ ColBufEncoder *ColBufEncoder::NewColBufEncoder(
return nullptr; return nullptr;
} }
#if defined(__clang__)
__attribute__((__no_sanitize__("undefined")))
#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)
__attribute__((__no_sanitize_undefined__))
#endif
size_t FixedLengthColBufEncoder::Append(const char *buf) { size_t FixedLengthColBufEncoder::Append(const char *buf) {
if (nullable_) { if (nullable_) {
if (buf == nullptr) { if (buf == nullptr) {

Loading…
Cancel
Save