[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] xalloc: x2nrealloc check for ptrdiff_t overflow
From: |
Paul Eggert |
Subject: |
[PATCH] xalloc: x2nrealloc check for ptrdiff_t overflow |
Date: |
Thu, 29 Dec 2016 01:17:39 -0800 |
* lib/xalloc.h (x2nrealloc): Check for ptrdiff_t overflow, too.
* modules/xalloc, modules/xvasprintf (Depends-on): Add stdint.
---
ChangeLog | 6 ++++++
lib/xalloc.h | 10 ++++++----
modules/xalloc | 1 +
modules/xvasprintf | 1 +
4 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index b1f41bb..92dda3a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2016-12-29 Paul Eggert <address@hidden>
+
+ xalloc: x2nrealloc check for ptrdiff_t overflow
+ * lib/xalloc.h (x2nrealloc): Check for ptrdiff_t overflow, too.
+ * modules/xalloc, modules/xvasprintf (Depends-on): Add stdint.
+
2016-12-24 Bruno Haible <address@hidden>
lock test: Fix performance problem on multi-core machines.
diff --git a/lib/xalloc.h b/lib/xalloc.h
index a4fddbf..3aad4e3 100644
--- a/lib/xalloc.h
+++ b/lib/xalloc.h
@@ -19,6 +19,7 @@
#define XALLOC_H_
#include <stddef.h>
+#include <stdint.h>
#include "xalloc-oversized.h"
@@ -197,10 +198,11 @@ x2nrealloc (void *p, size_t *pn, size_t s)
else
{
/* Set N = floor (1.5 * N) + 1 so that progress is made even if N == 0.
- Check for overflow, so that N * S stays in size_t range.
- The check may be slightly conservative, but an exact check isn't
- worth the trouble. */
- if ((size_t) -1 / 3 * 2 / s <= n)
+ Check for overflow, so that N * S stays in both ptrdiff_t and
+ size_t range. The check may be slightly conservative, but an
+ exact check isn't worth the trouble. */
+ if ((PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX) / 3 * 2 / s
+ <= n)
xalloc_die ();
n += n / 2 + 1;
}
diff --git a/modules/xalloc b/modules/xalloc
index c6c2083..b107da9 100644
--- a/modules/xalloc
+++ b/modules/xalloc
@@ -8,6 +8,7 @@ m4/xalloc.m4
Depends-on:
extern-inline
+stdint
xalloc-die
xalloc-oversized
diff --git a/modules/xvasprintf b/modules/xvasprintf
index a931d7c..410b45f 100644
--- a/modules/xvasprintf
+++ b/modules/xvasprintf
@@ -17,6 +17,7 @@ vasprintf
xalloc-die
xsize
stdarg
+stdint
errno
configure.ac:
--
2.7.4
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] xalloc: x2nrealloc check for ptrdiff_t overflow,
Paul Eggert <=