diff options
Diffstat (limited to 'www/mod_gnutls/files/patch-src_gnutls__io.c')
-rw-r--r-- | www/mod_gnutls/files/patch-src_gnutls__io.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/www/mod_gnutls/files/patch-src_gnutls__io.c b/www/mod_gnutls/files/patch-src_gnutls__io.c new file mode 100644 index 000000000000..2d3441f460b0 --- /dev/null +++ b/www/mod_gnutls/files/patch-src_gnutls__io.c @@ -0,0 +1,36 @@ +--- src/gnutls_io.c.orig 2016-12-25 18:36:37 UTC ++++ src/gnutls_io.c +@@ -23,7 +23,8 @@ + APLOG_USE_MODULE(gnutls); + #endif + +-#if defined(__GNUC__) && __GNUC__ < 5 && !defined(__clang__) ++#if defined(__GNUC__) && __GNUC__ < 5 && \ ++ !(defined(__clang__) && __has_builtin(__builtin_add_overflow)) + #include <inttypes.h> + #endif + +@@ -572,18 +573,21 @@ apr_status_t mgs_filter_input(ap_filter_t * f, + * might have different lengths. Read sizes should be too + * small for 32 or 64 bit to matter, but we have to make + * sure. */ +-#if defined(__GNUC__) && __GNUC__ < 5 && !defined(__clang__) ++#if defined(__GNUC__) && __GNUC__ < 5 && \ ++ !(defined(__clang__) && __has_builtin(__builtin_add_overflow)) + if ((apr_size_t) readbytes < len) + { ++#if INTMAX_MAX > SIZE_MAX + /* If readbytes is negative the function fails in the + * check above, but the compiler doesn't get that. */ +- if (__builtin_expect(imaxabs(readbytes) > SIZE_MAX, 0)) ++ if (__builtin_expect(imaxabs(readbytes) > (intmax_t) SIZE_MAX, 0)) + { + ap_log_cerror(APLOG_MARK, APLOG_CRIT, APR_EINVAL, ctxt->c, + "%s: prevented buffer length overflow", + __func__); + return APR_EINVAL; + } ++#endif + len = (apr_size_t) readbytes; + } + #else |