diff options
-rw-r--r-- | src/ChangeLog | 4 | ||||
-rw-r--r-- | src/assuan-util.c | 17 |
2 files changed, 18 insertions, 3 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 3e04b78..b74f0a1 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2005-04-04 Werner Koch <[email protected]> + + * assuan-util.c (_assuan_calloc): Avoid integer overflow. + 2005-03-22 Werner Koch <[email protected]> * assuan-defs.h (struct assuan_io): Renamed elements READ and diff --git a/src/assuan-util.c b/src/assuan-util.c index 43fa91e..2c9299a 100644 --- a/src/assuan-util.c +++ b/src/assuan-util.c @@ -1,5 +1,5 @@ /* assuan-util.c - Utility functions for Assuan - * Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + * Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. * * This file is part of Assuan. * @@ -23,6 +23,7 @@ #include <stdio.h> #include <string.h> #include <ctype.h> +#include <errno.h> #include "assuan-defs.h" @@ -55,9 +56,19 @@ _assuan_realloc (void *a, size_t n) void * _assuan_calloc (size_t n, size_t m) { - void *p = _assuan_malloc (n*m); + void *p; + size_t nbytes; + + nbytes = n * m; + if (m && nbytes / m != n) + { + errno = ENOMEM; + return NULL; + } + + p = _assuan_malloc (nbytes); if (p) - memset (p, 0, n* m); + memset (p, 0, nbytes); return p; } |