86 lines
2.6 KiB
Diff
86 lines
2.6 KiB
Diff
From 44e7a0d5f7a7e2c167a8a4196a5358830f695ab0 Mon Sep 17 00:00:00 2001
|
|
From: Nick Wellnhofer <wellnhofer@aevum.de>
|
|
Date: Thu, 16 May 2019 21:17:28 +0200
|
|
Subject: [PATCH] Annotate functions with __attribute__((no_sanitize))
|
|
|
|
---
|
|
dict.c | 2 ++
|
|
hash.c | 2 ++
|
|
libxml.h | 7 +++++++
|
|
xpath.c | 1 +
|
|
4 files changed, 12 insertions(+)
|
|
|
|
diff --git a/dict.c b/dict.c
|
|
index 14fe398..13a7b93 100644
|
|
--- a/dict.c
|
|
+++ b/dict.c
|
|
@@ -372,6 +372,7 @@ found_pool:
|
|
* http://burtleburtle.net/bob/hash/doobs.html
|
|
*/
|
|
|
|
+ATTRIBUTE_NO_SANITIZE("unsigned-integer-overflow")
|
|
static uint32_t
|
|
xmlDictComputeBigKey(const xmlChar* data, int namelen, int seed) {
|
|
uint32_t hash;
|
|
@@ -404,6 +405,7 @@ xmlDictComputeBigKey(const xmlChar* data, int namelen, int seed) {
|
|
*
|
|
* Neither of the two strings must be NULL.
|
|
*/
|
|
+ATTRIBUTE_NO_SANITIZE("unsigned-integer-overflow")
|
|
static unsigned long
|
|
xmlDictComputeBigQKey(const xmlChar *prefix, int plen,
|
|
const xmlChar *name, int len, int seed)
|
|
diff --git a/hash.c b/hash.c
|
|
index 1145cb9..f037af6 100644
|
|
--- a/hash.c
|
|
+++ b/hash.c
|
|
@@ -79,6 +79,7 @@ struct _xmlHashTable {
|
|
* xmlHashComputeKey:
|
|
* Calculate the hash key
|
|
*/
|
|
+ATTRIBUTE_NO_SANITIZE("unsigned-integer-overflow")
|
|
static unsigned long
|
|
xmlHashComputeKey(xmlHashTablePtr table, const xmlChar *name,
|
|
const xmlChar *name2, const xmlChar *name3) {
|
|
@@ -109,6 +110,7 @@ xmlHashComputeKey(xmlHashTablePtr table, const xmlChar *name,
|
|
return (value % table->size);
|
|
}
|
|
|
|
+ATTRIBUTE_NO_SANITIZE("unsigned-integer-overflow")
|
|
static unsigned long
|
|
xmlHashComputeQKey(xmlHashTablePtr table,
|
|
const xmlChar *prefix, const xmlChar *name,
|
|
diff --git a/libxml.h b/libxml.h
|
|
index 64e30f7..7762331 100644
|
|
--- a/libxml.h
|
|
+++ b/libxml.h
|
|
@@ -72,6 +72,13 @@ int vfprintf(FILE *, const char *, va_list);
|
|
#define XML_POP_WARNINGS
|
|
#endif
|
|
|
|
+#if defined(__clang__) || \
|
|
+ (defined(__GNUC__) && (__GNUC__ >= 8))
|
|
+#define ATTRIBUTE_NO_SANITIZE(arg) __attribute__((no_sanitize(arg)))
|
|
+#else
|
|
+#define ATTRIBUTE_NO_SANITIZE(arg)
|
|
+#endif
|
|
+
|
|
/*
|
|
* Internal variable indicating if a callback has been registered for
|
|
* node creation/destruction. It avoids spending a lot of time in locking
|
|
diff --git a/xpath.c b/xpath.c
|
|
index 031772c..e68975e 100644
|
|
--- a/xpath.c
|
|
+++ b/xpath.c
|
|
@@ -7497,6 +7497,7 @@ xmlXPathMultValues(xmlXPathParserContextPtr ctxt) {
|
|
* The numeric operators convert their operands to numbers as if
|
|
* by calling the number function.
|
|
*/
|
|
+ATTRIBUTE_NO_SANITIZE("float-divide-by-zero")
|
|
void
|
|
xmlXPathDivValues(xmlXPathParserContextPtr ctxt) {
|
|
xmlXPathObjectPtr arg;
|
|
--
|
|
1.7.12.4
|
|
|