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
This commit is contained in:
parent
dadf01672a
commit
d08d05cb62
@ -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…
Reference in New Issue
Block a user