gnunet-svn
[Top][All Lists]
Advanced

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

[libmicrohttpd] 01/03: parse_cookie_header(): moved outside error report


From: gnunet
Subject: [libmicrohttpd] 01/03: parse_cookie_header(): moved outside error reporting
Date: Sun, 15 May 2022 19:30:56 +0200

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

karlson2k pushed a commit to branch master
in repository libmicrohttpd.

commit c4b0c4bc95d328f66a0c86544fc2a3b4100fb4d0
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
AuthorDate: Sun May 15 14:32:23 2022 +0300

    parse_cookie_header(): moved outside error reporting
---
 src/microhttpd/connection.c | 68 ++++++++++++++++++++++++++-------------------
 1 file changed, 40 insertions(+), 28 deletions(-)

diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c
index 949e6ec4..5d795b47 100644
--- a/src/microhttpd/connection.c
+++ b/src/microhttpd/connection.c
@@ -2752,13 +2752,23 @@ connection_add_header (struct MHD_Connection 
*connection,
 }
 
 
+/**
+ * Cookie parsing result
+ */
+enum _MHD_ParseCookie
+{
+  MHD_PARSE_COOKIE_OK = MHD_YES,      /**< Success or no cookies in headers */
+  MHD_PARSE_COOKIE_MALFORMED = -1,    /**< Invalid cookie header */
+  MHD_PARSE_COOKIE_NO_MEMORY = MHD_NO /**< Not enough memory in the pool */
+};
+
 /**
  * Parse the cookie header (see RFC 2109).
  *
  * @param connection connection to parse header of
  * @return #MHD_YES for success, #MHD_NO for failure (malformed, out of memory)
  */
-static enum MHD_Result
+static enum _MHD_ParseCookie
 parse_cookie_header (struct MHD_Connection *connection)
 {
   const char *hdr;
@@ -2780,20 +2790,12 @@ parse_cookie_header (struct MHD_Connection *connection)
                                                  MHD_HTTP_HEADER_COOKIE),
                                                &hdr,
                                                &hdr_len))
-    return MHD_YES;
+    return MHD_PARSE_COOKIE_OK;
   cpy = connection_alloc_memory (connection,
                                  hdr_len + 1);
   if (NULL == cpy)
-  {
-#ifdef HAVE_MESSAGES
-    MHD_DLOG (connection->daemon,
-              _ ("Not enough memory in pool to parse cookies!\n"));
-#endif
-    transmit_error_response_static (connection,
-                                    MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE,
-                                    REQUEST_TOO_BIG);
-    return MHD_NO;
-  }
+    return MHD_PARSE_COOKIE_NO_MEMORY;
+
   memcpy (cpy,
           hdr,
           hdr_len);
@@ -2822,13 +2824,13 @@ parse_cookie_header (struct MHD_Connection *connection)
       /* value part omitted, use empty string... */
       mhd_assert (ekill >= pos);
       if (MHD_NO ==
-          connection_add_header (connection,
-                                 pos,
-                                 (size_t) (ekill - pos + 1),
-                                 "",
-                                 0,
-                                 MHD_COOKIE_KIND))
-        return MHD_NO;
+          MHD_set_connection_value_n_nocheck_ (connection,
+                                               MHD_COOKIE_KIND,
+                                               pos,
+                                               (size_t) (ekill - pos + 1),
+                                               "",
+                                               0))
+        return MHD_PARSE_COOKIE_NO_MEMORY;
       if (old == '\0')
         break;
       pos = sce + 1;
@@ -2865,16 +2867,16 @@ parse_cookie_header (struct MHD_Connection *connection)
     mhd_assert (ekill >= pos);
     mhd_assert (end >= equals);
     if (MHD_NO ==
-        connection_add_header (connection,
-                               pos,
-                               (size_t) (ekill - pos + 1),
-                               equals,
-                               (size_t) (end - equals),
-                               MHD_COOKIE_KIND))
-      return MHD_NO;
+        MHD_set_connection_value_n_nocheck_ (connection,
+                                             MHD_COOKIE_KIND,
+                                             pos,
+                                             (size_t) (ekill - pos + 1),
+                                             equals,
+                                             (size_t) (end - equals)))
+      return MHD_PARSE_COOKIE_NO_MEMORY;
     pos = semicolon;
   }
-  return MHD_YES;
+  return MHD_PARSE_COOKIE_OK;
 }
 
 
@@ -3618,7 +3620,17 @@ parse_connection_headers (struct MHD_Connection 
*connection)
   const char *enc;
   size_t val_len;
 
-  parse_cookie_header (connection);
+  if (MHD_PARSE_COOKIE_NO_MEMORY == parse_cookie_header (connection))
+  {
+#ifdef HAVE_MESSAGES
+    MHD_DLOG (connection->daemon,
+              _ ("Not enough memory in pool to parse cookies!\n"));
+#endif
+    transmit_error_response_static (connection,
+                                    MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE,
+                                    REQUEST_TOO_BIG);
+    return;
+  }
   if ( (1 <= connection->daemon->strict_for_client) &&
        (MHD_IS_HTTP_VER_1_1_COMPAT (connection->http_ver)) &&
        (MHD_NO ==

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

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