gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [libmicrohttpd] GNU libmicrohttpd branch master updated. 24


From: gitolite
Subject: [GNUnet-SVN] [libmicrohttpd] GNU libmicrohttpd branch master updated. 24725d33d9074b880b7f993165dd408153004862
Date: Mon, 7 Nov 2016 19:03:47 +0100 (CET)

The branch, master has been updated
       via  24725d33d9074b880b7f993165dd408153004862 (commit)
      from  45dabc9d2503645cbf7a4154ff1f428adfb2b8f4 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 24725d33d9074b880b7f993165dd408153004862
Author: Evgeny Grin (Karlson2k) <address@hidden>
Date:   Mon Nov 7 19:35:02 2016 +0300

    Used calloc() where possible with fallback to malloc()+memset().

-----------------------------------------------------------------------

Summary of changes:
 configure.ac                   | 14 ++++++++++++++
 src/microhttpd/daemon.c        | 15 +++------------
 src/microhttpd/mhd_compat.c    | 34 ++++++++++++++++++++++++++++++++++
 src/microhttpd/mhd_compat.h    | 12 ++++++++++++
 src/microhttpd/postprocessor.c |  6 ++----
 src/microhttpd/response.c      | 19 +++++--------------
 6 files changed, 70 insertions(+), 30 deletions(-)

diff --git a/configure.ac b/configure.ac
index 7a74e24..60ad6c1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1173,6 +1173,20 @@ AS_VAR_IF([[enable_httpupgrade]],[["yes"]],
 AM_CONDITIONAL([ENABLE_UPGRADE], [[test "x$enable_httpupgrade" = "xyes"]])
 AC_MSG_RESULT([[$enable_httpupgrade]])
 
+AC_CACHE_CHECK([[for calloc()]], [[mhd_cv_have_func_calloc]],
+  [
+   AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#include <stdlib.h>
+       ]],[[void * ptr = calloc(1, 2)]])
+     ],
+     [[mhd_cv_have_func_calloc='yes']],
+     [[mhd_cv_have_func_calloc='no']]
+   )
+  ]
+)
+AS_VAR_IF([[mhd_cv_have_func_calloc]], [["yes"]],
+  [AC_DEFINE([[HAVE_CALLOC]], [[1]], [Define to 1 if you have the usable 
`calloc' function.])])
+
 # Check for fork() and waitpid(). They are used for tests.
 AC_MSG_CHECKING([[for fork()]])
 AC_LINK_IFELSE(
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index 02a2f14..d769175 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -2062,7 +2062,7 @@ internal_add_connection (struct MHD_Daemon *daemon,
       return MHD_NO;
     }
 
-  if (NULL == (connection = malloc (sizeof (struct MHD_Connection))))
+  if (NULL == (connection = MHD_calloc_ (1, sizeof (struct MHD_Connection))))
     {
       eno = errno;
 #ifdef HAVE_MESSAGES
@@ -2077,9 +2077,6 @@ internal_add_connection (struct MHD_Daemon *daemon,
       errno = eno;
       return MHD_NO;
     }
-  memset (connection,
-          0,
-          sizeof (struct MHD_Connection));
   connection->pool = MHD_pool_create (daemon->pool_size);
   if (NULL == connection->pool)
     {
@@ -3248,7 +3245,7 @@ MHD_poll_all (struct MHD_Daemon *daemon,
     int poll_itc_idx;
     struct pollfd *p;
 
-    p = malloc (sizeof (struct pollfd) * (2 + num_connections));
+    p = MHD_calloc_ ((2 + num_connections), sizeof (struct pollfd));
     if (NULL == p)
       {
 #ifdef HAVE_MESSAGES
@@ -3258,9 +3255,6 @@ MHD_poll_all (struct MHD_Daemon *daemon,
 #endif
         return MHD_NO;
       }
-    memset (p,
-            0,
-            sizeof (struct pollfd) * (2 + num_connections));
     poll_server = 0;
     poll_listen = -1;
     if ( (MHD_INVALID_SOCKET != daemon->socket_fd) &&
@@ -4746,11 +4740,8 @@ MHD_start_daemon_va (unsigned int flags,
     }
   if (NULL == dh)
     return NULL;
-  if (NULL == (daemon = malloc (sizeof (struct MHD_Daemon))))
+  if (NULL == (daemon = MHD_calloc_ (1, sizeof (struct MHD_Daemon))))
     return NULL;
-  memset (daemon,
-          0,
-          sizeof (struct MHD_Daemon));
 #ifdef EPOLL_SUPPORT
   daemon->epoll_fd = -1;
 #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
diff --git a/src/microhttpd/mhd_compat.c b/src/microhttpd/mhd_compat.c
index 976ed03..3abdc36 100644
--- a/src/microhttpd/mhd_compat.c
+++ b/src/microhttpd/mhd_compat.c
@@ -34,6 +34,9 @@
 #endif  /* HAVE_SNPRINTF */
 #endif /* _WIN32  && !__CYGWIN__ */
 
+#ifndef HAVE_CALLOC
+#include <string.h> /* for memset() */
+#endif /* ! HAVE_CALLOC */
 
 #if defined(_WIN32) && !defined(__CYGWIN__)
 
@@ -78,3 +81,34 @@ W32_snprintf (char *__restrict s,
 
 #endif  /* HAVE_SNPRINTF */
 #endif /* _WIN32  && !__CYGWIN__ */
+
+#ifndef HAVE_CALLOC
+
+#ifdef __has_builtin
+#  if __has_builtin(__builtin_mul_overflow)
+#    define MHD_HAVE_NUL_OVERFLOW 1
+#  endif
+#elif __GNUC__+0 >= 5
+#  define MHD_HAVE_NUL_OVERFLOW 1
+#endif /* __GNUC__ >= 5 */
+
+
+void *MHD_calloc_(size_t nelem, size_t elsize)
+{
+  size_t alloc_size;
+  void *ptr;
+#ifdef MHD_HAVE_NUL_OVERFLOW
+  if (__builtin_mul_overflow(nelem, elsize, &alloc_size) || 0 == alloc_size)
+    return NULL;
+#else  /* ! MHD_HAVE_NUL_OVERFLOW */
+  alloc_size = nelem * elsize;
+  if (0 == alloc_size || elsize != alloc_size / nelem)
+    return NULL;
+#endif /* ! MHD_HAVE_NUL_OVERFLOW */
+  ptr = malloc (alloc_size);
+  if (NULL == ptr)
+    return NULL;
+  memset(ptr, 0, alloc_size);
+  return ptr;
+}
+#endif /* ! HAVE_CALLOC */
diff --git a/src/microhttpd/mhd_compat.h b/src/microhttpd/mhd_compat.h
index 19ebac5..fca84b8 100644
--- a/src/microhttpd/mhd_compat.h
+++ b/src/microhttpd/mhd_compat.h
@@ -72,4 +72,16 @@ int W32_snprintf(char *__restrict s, size_t n, const char 
*__restrict format, ..
 #endif /* HAVE_RAND */
 #endif /* HAVE_RANDOM */
 
+#ifdef HAVE_CALLOC
+/**
+ * MHD_calloc_ is platform-independent calloc()
+ */
+#define MHD_calloc_(n,s) calloc((n),(s))
+#else  /* ! HAVE_CALLOC */
+/**
+ * MHD_calloc_ is platform-independent calloc()
+ */
+void *MHD_calloc_(size_t nelem, size_t elsize);
+#endif /* ! HAVE_CALLOC */
+
 #endif /* MHD_COMPAT_H */
diff --git a/src/microhttpd/postprocessor.c b/src/microhttpd/postprocessor.c
index 287e03a..cf3c31e 100644
--- a/src/microhttpd/postprocessor.c
+++ b/src/microhttpd/postprocessor.c
@@ -25,6 +25,7 @@
 
 #include "internal.h"
 #include "mhd_str.h"
+#include "mhd_compat.h"
 
 /**
  * Size of on-stack buffer that we use for un-escaping of the value.
@@ -325,11 +326,8 @@ MHD_create_post_processor (struct MHD_Connection 
*connection,
   buffer_size += 4; /* round up to get nice block sizes despite boundary 
search */
 
   /* add +1 to ensure we ALWAYS have a zero-termination at the end */
-  if (NULL == (ret = malloc (sizeof (struct MHD_PostProcessor) + buffer_size + 
1)))
+  if (NULL == (ret = MHD_calloc_ (1, sizeof (struct MHD_PostProcessor) + 
buffer_size + 1)))
     return NULL;
-  memset (ret,
-          0,
-          sizeof (struct MHD_PostProcessor) + buffer_size + 1);
   ret->connection = connection;
   ret->ikvi = iter;
   ret->cls = iter_cls;
diff --git a/src/microhttpd/response.c b/src/microhttpd/response.c
index 17fe812..8b89c5f 100644
--- a/src/microhttpd/response.c
+++ b/src/microhttpd/response.c
@@ -38,6 +38,7 @@
 #include "mhd_itc.h"
 #include "connection.h"
 #include "memorypool.h"
+#include "mhd_compat.h"
 
 
 #if defined(_WIN32) && defined(MHD_W32_MUTEX_)
@@ -270,11 +271,8 @@ MHD_create_response_from_callback (uint64_t size,
 
   if ((NULL == crc) || (0 == block_size))
     return NULL;
-  if (NULL == (response = malloc (sizeof (struct MHD_Response) + block_size)))
+  if (NULL == (response = MHD_calloc_ (1, sizeof (struct MHD_Response) + 
block_size)))
     return NULL;
-  memset (response,
-          0,
-          sizeof (struct MHD_Response));
   response->fd = -1;
   response->data = (void *) &response[1];
   response->data_buffer_size = block_size;
@@ -554,11 +552,8 @@ MHD_create_response_from_data (size_t size,
 
   if ((NULL == data) && (size > 0))
     return NULL;
-  if (NULL == (response = malloc (sizeof (struct MHD_Response))))
+  if (NULL == (response = MHD_calloc_ (1, sizeof (struct MHD_Response))))
     return NULL;
-  memset (response,
-          0,
-          sizeof (struct MHD_Response));
   response->fd = -1;
   if (! MHD_mutex_init_ (&response->mutex))
     {
@@ -706,12 +701,9 @@ MHD_response_execute_upgrade_ (struct MHD_Response 
*response,
       return MHD_NO;
     }
 
-  urh = malloc (sizeof (struct MHD_UpgradeResponseHandle));
+  urh = MHD_calloc_ (1, sizeof (struct MHD_UpgradeResponseHandle));
   if (NULL == urh)
     return MHD_NO;
-  memset (urh,
-          0,
-          sizeof (struct MHD_UpgradeResponseHandle));
   urh->connection = connection;
   rbo = connection->read_buffer_offset;
   connection->read_buffer_offset = 0;
@@ -960,10 +952,9 @@ MHD_create_response_for_upgrade (MHD_UpgradeHandler 
upgrade_handler,
 
   if (NULL == upgrade_handler)
     return NULL; /* invalid request */
-  response = malloc (sizeof (struct MHD_Response));
+  response = MHD_calloc_ (1, sizeof (struct MHD_Response));
   if (NULL == response)
     return NULL;
-  memset (response, 0, sizeof (struct MHD_Response));
   if (! MHD_mutex_init_ (&response->mutex))
     {
       free (response);


hooks/post-receive
-- 
GNU libmicrohttpd



reply via email to

[Prev in Thread] Current Thread [Next in Thread]