fix UBSAN errors in fault_injection_test

Summary:
This fixes shift and signed-integer-overflow UBSAN checks in fault_injection_test by using a larger and unsigned type.
Closes https://github.com/facebook/rocksdb/pull/3498

Reviewed By: siying

Differential Revision: D6981116

Pulled By: igorsugak

fbshipit-source-id: 3688f62cce570534b161e9b5f42109ebc9ae5a2c
main
Igor Sugak 7 years ago committed by Facebook Github Bot
parent dadf01672a
commit d08d05cb62
  1. 11
      db/fault_injection_test.cc

@ -228,16 +228,9 @@ class FaultInjectionTest : public testing::Test,
return Status::OK(); return Status::OK();
} }
#ifdef ROCKSDB_UBSAN_RUN
#if defined(__clang__)
__attribute__((__no_sanitize__("shift"), no_sanitize("signed-integer-overflow")))
#elif defined(__GNUC__)
__attribute__((__no_sanitize_undefined__))
#endif
#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; unsigned long long num = i;
if (!sequential_order_) { if (!sequential_order_) {
// random transfer // random transfer
const int m = 0x5bd1e995; const int m = 0x5bd1e995;
@ -245,7 +238,7 @@ __attribute__((__no_sanitize_undefined__))
num ^= num << 24; num ^= num << 24;
} }
char buf[100]; char buf[100];
snprintf(buf, sizeof(buf), "%016d", num); snprintf(buf, sizeof(buf), "%016d", static_cast<int>(num));
storage->assign(buf, strlen(buf)); storage->assign(buf, strlen(buf));
return Slice(*storage); return Slice(*storage);
} }

Loading…
Cancel
Save