mirror of
https://github.com/json-c/json-c.git
synced 2026-04-05 21:39:06 +08:00
Issue #175: disable the fast-and-loose code in hashlittle() when running with AddressSanitizer.
This commit is contained in:
13
linkhash.c
13
linkhash.c
@@ -289,8 +289,19 @@ static uint32_t hashlittle( const void *key, size_t length, uint32_t initval)
|
|||||||
* does it on word boundaries, so is OK with this. But VALGRIND will
|
* does it on word boundaries, so is OK with this. But VALGRIND will
|
||||||
* still catch it and complain. The masking trick does make the hash
|
* still catch it and complain. The masking trick does make the hash
|
||||||
* noticably faster for short strings (like English words).
|
* noticably faster for short strings (like English words).
|
||||||
|
* AddressSanitizer is similarly picky about overrunning
|
||||||
|
* the buffer. (http://clang.llvm.org/docs/AddressSanitizer.html
|
||||||
*/
|
*/
|
||||||
#ifndef VALGRIND
|
#ifdef VALGRIND
|
||||||
|
# define PRECISE_MEMORY_ACCESS 1
|
||||||
|
#elif defined(__SANITIZE_ADDRESS__) /* GCC's ASAN */
|
||||||
|
# define PRECISE_MEMORY_ACCESS 1
|
||||||
|
#elif defined(__has_feature)
|
||||||
|
# if __has_feature(address_sanitizer) /* Clang's ASAN */
|
||||||
|
# define PRECISE_MEMORY_ACCESS 1
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#ifndef PRECISE_MEMORY_ACCESS
|
||||||
|
|
||||||
switch(length)
|
switch(length)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user