gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [libmicrohttpd] branch master updated: remove requirement f


From: gnunet
Subject: [GNUnet-SVN] [libmicrohttpd] branch master updated: remove requirement for VLA in digestauth.c logic
Date: Tue, 11 Dec 2018 10:06:44 +0100

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository libmicrohttpd.

The following commit(s) were added to refs/heads/master by this push:
     new 273a6df9 remove requirement for VLA in digestauth.c logic
273a6df9 is described below

commit 273a6df932af73d7c84fef8668a53b2e65311e24
Author: Christian Grothoff <address@hidden>
AuthorDate: Tue Dec 11 10:06:21 2018 +0100

    remove requirement for VLA in digestauth.c logic
---
 ChangeLog                   |  3 +++
 configure.ac                |  1 +
 src/include/microhttpd.h    |  2 +-
 src/microhttpd/digestauth.c | 40 +++++++++++++++++++++++++++++++++-------
 w32/common/MHD_config.h     |  3 +++
 5 files changed, 41 insertions(+), 8 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 5ff5acc9..c250ef2e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+Tue Dec 11 09:58:32 CET 2018
+       Add logic to avoid VLA arrays with compilers that do not support them. 
-CG
+
 Sat Dec  8 23:15:53 CET 2018
        Fixed missing WSA_FLAG_OVERLAPPED which can cause W32 to block on
        socket races when using threadpool. (See very detailed description
diff --git a/configure.ac b/configure.ac
index 9e0b6e12..a03205dc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -661,6 +661,7 @@ AX_CHECK_LINK_FLAG([-fno-strict-aliasing],
   [AX_APPEND_COMPILE_FLAGS([-fno-strict-aliasing])])
 
 AC_C_BIGENDIAN
+AC_C_VARARRAYS
 
 AC_CHECK_PROG([HAVE_CURL_BINARY],[curl],[yes],[no])
 AM_CONDITIONAL([HAVE_CURL_BINARY],[test "x$HAVE_CURL_BINARY" = "xyes"])
diff --git a/src/include/microhttpd.h b/src/include/microhttpd.h
index 1d966233..dba9a4ca 100644
--- a/src/include/microhttpd.h
+++ b/src/include/microhttpd.h
@@ -126,7 +126,7 @@ typedef intptr_t ssize_t;
  * Current version of the library.
  * 0x01093001 = 1.9.30-1.
  */
-#define MHD_VERSION 0x00096201
+#define MHD_VERSION 0x00096202
 
 /**
  * MHD-internal return code for "YES".
diff --git a/src/microhttpd/digestauth.c b/src/microhttpd/digestauth.c
index 424c3761..af146c31 100644
--- a/src/microhttpd/digestauth.c
+++ b/src/microhttpd/digestauth.c
@@ -52,6 +52,32 @@
 #define NONCE_STD_LEN(digest_size) \
   ((digest_size) * 2 + TIMESTAMP_BIN_SIZE * 2)
 
+
+/**
+ * Maximum size of any digest hash supported by MHD.
+ * (SHA-256 > MD5).
+ */
+#define MAX_DIGEST SHA256_DIGEST_SIZE
+
+/**
+ * Macro to avoid using VLAs if the compiler does not support them.
+ */
+#if __STDC_NO_VLA__
+/**
+ * Check that @a n is below #MAX_DIGEST, then return #MAX_DIGEST.
+ *
+ * @param n length of the digest to be used for a VLA
+ */
+#define VLA_ARRAY_LEN_DIGEST(n) (((n) <= 
MAX_DIGEST?1:(mhd_panic(mhd_panic_cls, __FILE__, __LINE__, "VLA too 
big"),1)),MAX_DIGEST)
+#else
+/**
+ * Check that @a n is below #MAX_DIGEST, then return @a n.
+ *
+ * @param n length of the digest to be used for a VLA
+ */
+#define VLA_ARRAY_LEN_DIGEST(n) (((n) <= 
MAX_DIGEST?1:(mhd_panic(mhd_panic_cls, __FILE__, __LINE__, "VLA too big"),1)),n)
+#endif
+
 /**
  * Beginning string for any valid Digest authentication header.
  */
@@ -185,7 +211,7 @@ digest_calc_ha1_from_digest (const char *alg,
        (MHD_str_equal_caseless_(alg,
                                 "sha-256-sess")) )
     {
-      uint8_t dig[da->digest_size];
+      uint8_t dig[VLA_ARRAY_LEN_DIGEST(da->digest_size)];
 
       da->init (da->ctx);
       da->update (da->ctx,
@@ -241,7 +267,7 @@ digest_calc_ha1_from_user (const char *alg,
                           const char *cnonce,
                            struct DigestAlgorithm *da)
 {
-  unsigned char ha1[da->digest_size];
+  unsigned char ha1[VLA_ARRAY_LEN_DIGEST(da->digest_size)];
 
   da->init (da->ctx);
   da->update (da->ctx,
@@ -296,8 +322,8 @@ digest_calc_response (const char *ha1,
                      const char *hentity,
                      struct DigestAlgorithm *da)
 {
-  unsigned char ha2[da->digest_size];
-  unsigned char resphash[da->digest_size];
+  unsigned char ha2[VLA_ARRAY_LEN_DIGEST(da->digest_size)];
+  unsigned char resphash[VLA_ARRAY_LEN_DIGEST(da->digest_size)];
   (void)hentity; /* Unused. Silence compiler warning. */
 
   da->init (da->ctx);
@@ -638,7 +664,7 @@ calculate_nonce (uint32_t nonce_time,
                 char *nonce)
 {
   unsigned char timestamp[TIMESTAMP_BIN_SIZE];
-  unsigned char tmpnonce[da->digest_size];
+  unsigned char tmpnonce[VLA_ARRAY_LEN_DIGEST(da->digest_size)];
   char timestamphex[TIMESTAMP_BIN_SIZE * 2 + 1];
 
   da->init (da->ctx);
@@ -815,12 +841,12 @@ digest_auth_check_all (struct MHD_Connection *connection,
   const char *header;
   char nonce[MAX_NONCE_LENGTH];
   char cnonce[MAX_NONCE_LENGTH];
-  char ha1[da->digest_size * 2 + 1];
+  char ha1[VLA_ARRAY_LEN_DIGEST(da->digest_size) * 2 + 1];
   char qop[15]; /* auth,auth-int */
   char nc[20];
   char response[MAX_AUTH_RESPONSE_LENGTH];
   const char *hentity = NULL; /* "auth-int" is not supported */
-  char noncehashexp[NONCE_STD_LEN(da->digest_size) + 1];
+  char noncehashexp[NONCE_STD_LEN(VLA_ARRAY_LEN_DIGEST(da->digest_size)) + 1];
   uint32_t nonce_time;
   uint32_t t;
   size_t left; /* number of characters left in 'header' for 'uri' */
diff --git a/w32/common/MHD_config.h b/w32/common/MHD_config.h
index 21db7eae..964df10d 100644
--- a/w32/common/MHD_config.h
+++ b/w32/common/MHD_config.h
@@ -9,6 +9,9 @@
 /* Define if MS VC compiler is used */
 #define MSVC 1
 
+/* Define that MS VC does not support VLAs */
+#define __STDC_NO_VLA__ 1
+
 /* Define to 1 if your C compiler supports inline functions. */
 #define INLINE_FUNC 1
 

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

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