From a445d8f1ad028f5ffcf17cf394574267e55c6e3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Mon, 20 Feb 2017 12:06:28 +0100 Subject: util: add overflow safe unsigned addition function --- util.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/util.h b/util.h index f2e3d65..a53deda 100644 --- a/util.h +++ b/util.h @@ -1,6 +1,9 @@ #ifndef UTIL_H #define UTIL_H +#include +#include + #define LENGTH(x) ((int)(sizeof (x) / sizeof *(x))) #define MIN(a, b) ((a) > (b) ? (b) : (a)) #define MAX(a, b) ((a) < (b) ? (b) : (a)) @@ -9,4 +12,15 @@ #define ISUTF8(c) (((c)&0xC0)!=0x80) #define ISASCII(ch) ((unsigned char)ch < 0x80) +#if GCC_VERSION>=5004000 || CLANG_VERSION>=4000000 +#define addu __builtin_add_overflow +#else +static inline bool addu(size_t a, size_t b, size_t *c) { + if (SIZE_MAX - a < b) + return false; + *c = a + b; + return true; +} +#endif + #endif -- cgit v1.2.3