* commit '4f0a7cb8e15ce50f7da6a71c96335bd0b7394492': libutils: cleanups for -fsanitize=integer
This commit is contained in:
commit
567bb22650
3 changed files with 17 additions and 0 deletions
|
|
@ -29,6 +29,9 @@ namespace android {
|
||||||
/* The Jenkins hash of a sequence of 32 bit words A, B, C is:
|
/* The Jenkins hash of a sequence of 32 bit words A, B, C is:
|
||||||
* Whiten(Mix(Mix(Mix(0, A), B), C)) */
|
* Whiten(Mix(Mix(Mix(0, A), B), C)) */
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
__attribute__((no_sanitize("integer")))
|
||||||
|
#endif
|
||||||
inline uint32_t JenkinsHashMix(uint32_t hash, uint32_t data) {
|
inline uint32_t JenkinsHashMix(uint32_t hash, uint32_t data) {
|
||||||
hash += data;
|
hash += data;
|
||||||
hash += (hash << 10);
|
hash += (hash << 10);
|
||||||
|
|
|
||||||
|
|
@ -19,10 +19,14 @@
|
||||||
* should still be quite good.
|
* should still be quite good.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
#include <utils/JenkinsHash.h>
|
#include <utils/JenkinsHash.h>
|
||||||
|
|
||||||
namespace android {
|
namespace android {
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
__attribute__((no_sanitize("integer")))
|
||||||
|
#endif
|
||||||
hash_t JenkinsHashWhiten(uint32_t hash) {
|
hash_t JenkinsHashWhiten(uint32_t hash) {
|
||||||
hash += (hash << 3);
|
hash += (hash << 3);
|
||||||
hash ^= (hash >> 11);
|
hash ^= (hash >> 11);
|
||||||
|
|
@ -31,6 +35,9 @@ hash_t JenkinsHashWhiten(uint32_t hash) {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t JenkinsHashMixBytes(uint32_t hash, const uint8_t* bytes, size_t size) {
|
uint32_t JenkinsHashMixBytes(uint32_t hash, const uint8_t* bytes, size_t size) {
|
||||||
|
if (size > UINT32_MAX) {
|
||||||
|
abort();
|
||||||
|
}
|
||||||
hash = JenkinsHashMix(hash, (uint32_t)size);
|
hash = JenkinsHashMix(hash, (uint32_t)size);
|
||||||
size_t i;
|
size_t i;
|
||||||
for (i = 0; i < (size & -4); i += 4) {
|
for (i = 0; i < (size & -4); i += 4) {
|
||||||
|
|
@ -47,6 +54,9 @@ uint32_t JenkinsHashMixBytes(uint32_t hash, const uint8_t* bytes, size_t size) {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t JenkinsHashMixShorts(uint32_t hash, const uint16_t* shorts, size_t size) {
|
uint32_t JenkinsHashMixShorts(uint32_t hash, const uint16_t* shorts, size_t size) {
|
||||||
|
if (size > UINT32_MAX) {
|
||||||
|
abort();
|
||||||
|
}
|
||||||
hash = JenkinsHashMix(hash, (uint32_t)size);
|
hash = JenkinsHashMix(hash, (uint32_t)size);
|
||||||
size_t i;
|
size_t i;
|
||||||
for (i = 0; i < (size & -2); i += 2) {
|
for (i = 0; i < (size & -2); i += 2) {
|
||||||
|
|
|
||||||
|
|
@ -551,6 +551,10 @@ size_t SortedVectorImpl::orderOf(const void* item) const
|
||||||
|
|
||||||
ssize_t SortedVectorImpl::_indexOrderOf(const void* item, size_t* order) const
|
ssize_t SortedVectorImpl::_indexOrderOf(const void* item, size_t* order) const
|
||||||
{
|
{
|
||||||
|
if (order) *order = 0;
|
||||||
|
if (isEmpty()) {
|
||||||
|
return NAME_NOT_FOUND;
|
||||||
|
}
|
||||||
// binary search
|
// binary search
|
||||||
ssize_t err = NAME_NOT_FOUND;
|
ssize_t err = NAME_NOT_FOUND;
|
||||||
ssize_t l = 0;
|
ssize_t l = 0;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue