gnunet-svn
[Top][All Lists]
Advanced

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

[libmicrohttpd] 05/05: Calculate size of error responses at compile time


From: gnunet
Subject: [libmicrohttpd] 05/05: Calculate size of error responses at compile time
Date: Wed, 26 May 2021 20:24:36 +0200

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

karlson2k pushed a commit to branch master
in repository libmicrohttpd.

commit 23943a2da6f27050c21edc709a12acc7625596a9
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
AuthorDate: Wed May 26 21:20:31 2021 +0300

    Calculate size of error responses at compile time
---
 src/microhttpd/connection.c | 108 +++++++++++++++++++++++++-------------------
 1 file changed, 61 insertions(+), 47 deletions(-)

diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c
index b304ca25..4bbe2683 100644
--- a/src/microhttpd/connection.c
+++ b/src/microhttpd/connection.c
@@ -1669,11 +1669,13 @@ build_header_response (struct MHD_Connection 
*connection)
  * @param connection the connection
  * @param status_code the response code to send (400, 413 or 414)
  * @param message the error message to send
+ * @param message_len the length of the @a message
  */
 static void
-transmit_error_response (struct MHD_Connection *connection,
-                         unsigned int status_code,
-                         const char *message)
+transmit_error_response_len (struct MHD_Connection *connection,
+                             unsigned int status_code,
+                             const char *message,
+                             size_t message_len)
 {
   struct MHD_Response *response;
   enum MHD_Result iret;
@@ -1702,7 +1704,7 @@ transmit_error_response (struct MHD_Connection 
*connection,
     MHD_destroy_response (connection->response);
     connection->response = NULL;
   }
-  response = MHD_create_response_from_buffer (strlen (message),
+  response = MHD_create_response_from_buffer (message_len,
                                               (void *) message,
                                               MHD_RESPMEM_PERSISTENT);
   if (NULL == response)
@@ -1740,6 +1742,12 @@ transmit_error_response (struct MHD_Connection 
*connection,
 }
 
 
+/**
+ * Transmit static string as error response
+ */
+#define transmit_error_response_static(c, code, msg) \
+  transmit_error_response_len (c, code, msg, MHD_STATICSTR_LEN_(msg))
+
 /**
  * Update the 'event_loop_info' field of this connection based on the state
  * that the connection is now in.  May also close the connection or
@@ -1791,11 +1799,14 @@ MHD_connection_update_event_loop_info (struct 
MHD_Connection *connection)
       if ( (connection->read_buffer_offset == connection->read_buffer_size) &&
            (! try_grow_read_buffer (connection, true)) )
       {
-        transmit_error_response (connection,
-                                 (connection->url != NULL)
-                                 ? MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE
-                                 : MHD_HTTP_URI_TOO_LONG,
-                                 REQUEST_TOO_BIG);
+        if (connection->url != NULL)
+          transmit_error_response_static (connection,
+                                          
MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE,
+                                          REQUEST_TOO_BIG);
+        else
+          transmit_error_response_static (connection,
+                                          MHD_HTTP_URI_TOO_LONG,
+                                          REQUEST_TOO_BIG);
         continue;
       }
       if (! connection->read_closed)
@@ -1831,9 +1842,9 @@ MHD_connection_update_event_loop_info (struct 
MHD_Connection *connection)
              on the connection (if a timeout is even
              set!).
              Solution: we kill the connection with an error */
-          transmit_error_response (connection,
-                                   MHD_HTTP_INTERNAL_SERVER_ERROR,
-                                   INTERNAL_ERROR);
+          transmit_error_response_static (connection,
+                                          MHD_HTTP_INTERNAL_SERVER_ERROR,
+                                          INTERNAL_ERROR);
           continue;
         }
       }
@@ -1939,11 +1950,14 @@ get_next_header_line (struct MHD_Connection *connection,
     if ( (connection->read_buffer_offset == connection->read_buffer_size) &&
          (! try_grow_read_buffer (connection, true)) )
     {
-      transmit_error_response (connection,
-                               (NULL != connection->url)
-                               ? MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE
-                               : MHD_HTTP_URI_TOO_LONG,
-                               REQUEST_TOO_BIG);
+      if (NULL != connection->url)
+        transmit_error_response_static (connection,
+                                        
MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE,
+                                        REQUEST_TOO_BIG);
+      else
+        transmit_error_response_static (connection,
+                                        MHD_HTTP_URI_TOO_LONG,
+                                        REQUEST_TOO_BIG);
     }
     if (line_len)
       *line_len = 0;
@@ -1997,9 +2011,9 @@ connection_add_header (struct MHD_Connection *connection,
     MHD_DLOG (connection->daemon,
               _ ("Not enough memory in pool to allocate header record!\n"));
 #endif
-    transmit_error_response (connection,
-                             MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE,
-                             REQUEST_TOO_BIG);
+    transmit_error_response_static (connection,
+                                    MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE,
+                                    REQUEST_TOO_BIG);
     return MHD_NO;
   }
   return MHD_YES;
@@ -2044,9 +2058,9 @@ parse_cookie_header (struct MHD_Connection *connection)
     MHD_DLOG (connection->daemon,
               _ ("Not enough memory in pool to parse cookies!\n"));
 #endif
-    transmit_error_response (connection,
-                             MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE,
-                             REQUEST_TOO_BIG);
+    transmit_error_response_static (connection,
+                                    MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE,
+                                    REQUEST_TOO_BIG);
     return MHD_NO;
   }
   memcpy (cpy,
@@ -2157,9 +2171,9 @@ parse_http_version (struct MHD_Connection *connection,
       ((h[7] < '0') || (h[7] > '9')))
   {
     connection->http_ver = MHD_HTTP_VER_INVALID;
-    transmit_error_response (connection,
-                             MHD_HTTP_BAD_REQUEST,
-                             REQUEST_MALFORMED);
+    transmit_error_response_static (connection,
+                                    MHD_HTTP_BAD_REQUEST,
+                                    REQUEST_MALFORMED);
     return MHD_NO;
   }
   if (1 == h[5] - '0')
@@ -2179,16 +2193,16 @@ parse_http_version (struct MHD_Connection *connection,
   {
     /* Too old major version */
     connection->http_ver = MHD_HTTP_VER_TOO_OLD;
-    transmit_error_response (connection,
-                             MHD_HTTP_HTTP_VERSION_NOT_SUPPORTED,
-                             REQ_HTTP_VER_IS_TOO_OLD);
+    transmit_error_response_static (connection,
+                                    MHD_HTTP_HTTP_VERSION_NOT_SUPPORTED,
+                                    REQ_HTTP_VER_IS_TOO_OLD);
     return MHD_NO;
   }
 
   connection->http_ver = MHD_HTTP_VER_FUTURE;
-  transmit_error_response (connection,
-                           MHD_HTTP_HTTP_VERSION_NOT_SUPPORTED,
-                           REQ_HTTP_VER_IS_NOT_SUPPORTED);
+  transmit_error_response_static (connection,
+                                  MHD_HTTP_HTTP_VERSION_NOT_SUPPORTED,
+                                  REQ_HTTP_VER_IS_NOT_SUPPORTED);
   return MHD_NO;
 }
 
@@ -2731,9 +2745,9 @@ process_broken_line (struct MHD_Connection *connection,
                                 last_len + tmp_len + 1);
     if (NULL == last)
     {
-      transmit_error_response (connection,
-                               MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE,
-                               REQUEST_TOO_BIG);
+      transmit_error_response_static (connection,
+                                      MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE,
+                                      REQUEST_TOO_BIG);
       return MHD_NO;
     }
     memcpy (&last[last_len],
@@ -2752,9 +2766,9 @@ process_broken_line (struct MHD_Connection *connection,
                              strlen (connection->colon),
                              kind))
   {
-    transmit_error_response (connection,
-                             MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE,
-                             REQUEST_TOO_BIG);
+    transmit_error_response_static (connection,
+                                    MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE,
+                                    REQUEST_TOO_BIG);
     return MHD_NO;
   }
   /* we still have the current line to deal with... */
@@ -2763,9 +2777,9 @@ process_broken_line (struct MHD_Connection *connection,
     if (MHD_NO == process_header_line (connection,
                                        line))
     {
-      transmit_error_response (connection,
-                               MHD_HTTP_BAD_REQUEST,
-                               REQUEST_MALFORMED);
+      transmit_error_response_static (connection,
+                                      MHD_HTTP_BAD_REQUEST,
+                                      REQUEST_MALFORMED);
       return MHD_NO;
     }
   }
@@ -3542,9 +3556,9 @@ MHD_connection_handle_idle (struct MHD_Connection 
*connection)
       if (MHD_NO == process_header_line (connection,
                                          line))
       {
-        transmit_error_response (connection,
-                                 MHD_HTTP_BAD_REQUEST,
-                                 REQUEST_MALFORMED);
+        transmit_error_response_static (connection,
+                                        MHD_HTTP_BAD_REQUEST,
+                                        REQUEST_MALFORMED);
         break;
       }
       connection->state = MHD_CONNECTION_HEADER_PART_RECEIVED;
@@ -3665,9 +3679,9 @@ MHD_connection_handle_idle (struct MHD_Connection 
*connection)
       if (MHD_NO == process_header_line (connection,
                                          line))
       {
-        transmit_error_response (connection,
-                                 MHD_HTTP_BAD_REQUEST,
-                                 REQUEST_MALFORMED);
+        transmit_error_response_static (connection,
+                                        MHD_HTTP_BAD_REQUEST,
+                                        REQUEST_MALFORMED);
         break;
       }
       connection->state = MHD_CONNECTION_FOOTER_PART_RECEIVED;

-- 
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]