gnunet-svn
[Top][All Lists]
Advanced

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

[libmicrohttpd] branch master updated: add tests for empty reply in HTTP


From: gnunet
Subject: [libmicrohttpd] branch master updated: add tests for empty reply in HTTPS
Date: Sat, 26 Oct 2019 18:55:21 +0200

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 5e5dbf98 add tests for empty reply in HTTPS
5e5dbf98 is described below

commit 5e5dbf980de763480f7957f64af78bbb2159d9a0
Author: Christian Grothoff <address@hidden>
AuthorDate: Sat Oct 26 18:52:53 2019 +0200

    add tests for empty reply in HTTPS
---
 src/examples/.gitignore                       |   2 +
 src/examples/Makefile.am                      |   9 +-
 src/examples/minimal_example_empty_tls.c      | 150 +++++++++++++++++++++++++
 src/microhttpd/mhd_send.c                     |  23 +++-
 src/testcurl/.gitignore                       |   1 +
 src/testcurl/https/test_https_get.c           | 156 +++++++++++++++++++++++++-
 src/testcurl/https/tls_test_common.c          |  61 +++++++---
 src/testcurl/test_get.c                       |  20 +++-
 src/testcurl/{test_get.c => test_get_empty.c} |  87 +++-----------
 9 files changed, 408 insertions(+), 101 deletions(-)

diff --git a/src/examples/.gitignore b/src/examples/.gitignore
index 9da24b59..7fa3e9b8 100644
--- a/src/examples/.gitignore
+++ b/src/examples/.gitignore
@@ -35,3 +35,5 @@ upgrade_example
 /timeout
 http_chunked_compression
 http_compression
+minimal_example_empty
+minimal_example_empty_tls
diff --git a/src/examples/Makefile.am b/src/examples/Makefile.am
index 7ffddff5..5dcee4d2 100644
--- a/src/examples/Makefile.am
+++ b/src/examples/Makefile.am
@@ -39,7 +39,9 @@ EXTRA_DIST = msgs_i18n.c
 noinst_EXTRA_DIST = msgs_i18n.c
 
 if ENABLE_HTTPS
-noinst_PROGRAMS += https_fileserver_example
+noinst_PROGRAMS += \
+ https_fileserver_example \
+ minimal_example_empty_tls
 endif
 if HAVE_POSTPROCESSOR
 noinst_PROGRAMS += \
@@ -89,6 +91,11 @@ minimal_example_empty_SOURCES = \
 minimal_example_empty_LDADD = \
  $(top_builddir)/src/microhttpd/libmicrohttpd.la
 
+minimal_example_empty_tls_SOURCES = \
+ minimal_example_empty_tls.c
+minimal_example_empty_tls_LDADD = \
+ $(top_builddir)/src/microhttpd/libmicrohttpd.la
+
 upgrade_example_SOURCES = \
  upgrade_example.c
 upgrade_example_CFLAGS = \
diff --git a/src/examples/minimal_example_empty_tls.c 
b/src/examples/minimal_example_empty_tls.c
new file mode 100644
index 00000000..e3daca5f
--- /dev/null
+++ b/src/examples/minimal_example_empty_tls.c
@@ -0,0 +1,150 @@
+/*
+     This file is part of libmicrohttpd
+     Copyright (C) 2007 Christian Grothoff (and other contributing authors)
+
+     This library is free software; you can redistribute it and/or
+     modify it under the terms of the GNU Lesser General Public
+     License as published by the Free Software Foundation; either
+     version 2.1 of the License, or (at your option) any later version.
+
+     This library is distributed in the hope that it will be useful,
+     but WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     Lesser General Public License for more details.
+
+     You should have received a copy of the GNU Lesser General Public
+     License along with this library; if not, write to the Free Software
+     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 
 USA
+*/
+/**
+ * @file minimal_example_empty_ssl.c
+ * @brief minimal example for how to use libmicrohttpd
+ * @author Christian Grothoff
+ */
+
+#include "platform.h"
+#include <microhttpd.h>
+
+
+static int
+ahc_echo (void *cls,
+          struct MHD_Connection *connection,
+          const char *url,
+          const char *method,
+          const char *version,
+          const char *upload_data,
+          size_t *upload_data_size,
+          void **ptr)
+{
+  static int aptr;
+  struct MHD_Response *response;
+  int ret;
+
+  (void) url;               /* Unused. Silent compiler warning. */
+  (void) version;           /* Unused. Silent compiler warning. */
+  (void) upload_data;       /* Unused. Silent compiler warning. */
+  (void) upload_data_size;  /* Unused. Silent compiler warning. */
+
+  if (0 != strcmp (method, "GET"))
+    return MHD_NO;              /* unexpected method */
+  if (&aptr != *ptr)
+  {
+    /* do never respond on first call */
+    *ptr = &aptr;
+    return MHD_YES;
+  }
+  *ptr = NULL;                  /* reset when done */
+  response = MHD_create_response_from_buffer (0,
+                                              NULL,
+                                              MHD_RESPMEM_PERSISTENT);
+  ret = MHD_queue_response (connection,
+                            MHD_HTTP_NO_CONTENT,
+                            response);
+  MHD_destroy_response (response);
+  return ret;
+}
+
+
+/* test server key */
+const char srv_signed_key_pem[] = "-----BEGIN RSA PRIVATE KEY-----\n"
+                                  
"MIIEowIBAAKCAQEAvfTdv+3fgvVTKRnP/HVNG81cr8TrUP/iiyuve/THMzvFXhCW\n"
+                                  
"+K03KwEku55QvnUndwBfU/ROzLlv+5hotgiDRNFT3HxurmhouySBrJNJv7qWp8IL\n"
+                                  
"q4sw32vo0fbMu5BZF49bUXK9L3kW2PdhTtSQPWHEzNrCxO+YgCilKHkY3vQNfdJ0\n"
+                                  
"20Q5EAAEseD1YtWCIpRvJzYlZMpjYB1ubTl24kwrgOKUJYKqM4jmF4DVQp4oOK/6\n"
+                                  
"QYGGh1QmHRPAy3CBII6sbb+sZT9cAqU6GYQVB35lm4XAgibXV6KgmpVxVQQ69U6x\n"
+                                  
"yoOl204xuekZOaG9RUPId74Rtmwfi1TLbBzo2wIDAQABAoIBADu09WSICNq5cMe4\n"
+                                  
"+NKCLlgAT1NiQpLls1gKRbDhKiHU9j8QWNvWWkJWrCya4QdUfLCfeddCMeiQmv3K\n"
+                                  
"lJMvDs+5OjJSHFoOsGiuW2Ias7IjnIojaJalfBml6frhJ84G27IXmdz6gzOiTIer\n"
+                                  
"DjeAgcwBaKH5WwIay2TxIaScl7AwHBauQkrLcyb4hTmZuQh6ArVIN6+pzoVuORXM\n"
+                                  
"bpeNWl2l/HSN3VtUN6aCAKbN/X3o0GavCCMn5Fa85uJFsab4ss/uP+2PusU71+zP\n"
+                                  
"sBm6p/2IbGvF5k3VPDA7X5YX61sukRjRBihY8xSnNYx1UcoOsX6AiPnbhifD8+xQ\n"
+                                  
"Tlf8oJUCgYEA0BTfzqNpr9Wxw5/QXaSdw7S/0eP5a0C/nwURvmfSzuTD4equzbEN\n"
+                                  
"d+dI/s2JMxrdj/I4uoAfUXRGaabevQIjFzC9uyE3LaOyR2zhuvAzX+vVcs6bSXeU\n"
+                                  
"pKpCAcN+3Z3evMaX2f+z/nfSUAl2i4J2R+/LQAWJW4KwRky/m+cxpfUCgYEA6bN1\n"
+                                  
"b73bMgM8wpNt6+fcmS+5n0iZihygQ2U2DEud8nZJL4Nrm1dwTnfZfJBnkGj6+0Q0\n"
+                                  
"cOwj2KS0/wcEdJBP0jucU4v60VMhp75AQeHqidIde0bTViSRo3HWKXHBIFGYoU3T\n"
+                                  
"LyPyKndbqsOObnsFXHn56Nwhr2HLf6nw4taGQY8CgYBoSW36FLCNbd6QGvLFXBGt\n"
+                                  
"2lMhEM8az/K58kJ4WXSwOLtr6MD/WjNT2tkcy0puEJLm6BFCd6A6pLn9jaKou/92\n"
+                                  
"SfltZjJPb3GUlp9zn5tAAeSSi7YMViBrfuFiHObij5LorefBXISLjuYbMwL03MgH\n"
+                                  
"Ocl2JtA2ywMp2KFXs8GQWQKBgFyIVv5ogQrbZ0pvj31xr9HjqK6d01VxIi+tOmpB\n"
+                                  
"4ocnOLEcaxX12BzprW55ytfOCVpF1jHD/imAhb3YrHXu0fwe6DXYXfZV4SSG2vB7\n"
+                                  
"IB9z14KBN5qLHjNGFpMQXHSMek+b/ftTU0ZnPh9uEM5D3YqRLVd7GcdUhHvG8P8Q\n"
+                                  
"C9aXAoGBAJtID6h8wOGMP0XYX5YYnhlC7dOLfk8UYrzlp3xhqVkzKthTQTj6wx9R\n"
+                                  
"GtC4k7U1ki8oJsfcIlBNXd768fqDVWjYju5rzShMpo8OCTS6ipAblKjCxPPVhIpv\n"
+                                  
"tWPlbSn1qj6wylstJ5/3Z+ZW5H4wIKp5jmLiioDhcP0L/Ex3Zx8O\n"
+                                  "-----END RSA PRIVATE KEY-----\n";
+
+/* test server CA signed certificates */
+const char srv_signed_cert_pem[] = "-----BEGIN CERTIFICATE-----\n"
+                                   
"MIIDGzCCAgWgAwIBAgIES0KCvTALBgkqhkiG9w0BAQUwFzEVMBMGA1UEAxMMdGVz\n"
+                                   
"dF9jYV9jZXJ0MB4XDTEwMDEwNTAwMDcyNVoXDTQ1MDMxMjAwMDcyNVowFzEVMBMG\n"
+                                   
"A1UEAxMMdGVzdF9jYV9jZXJ0MIIBHzALBgkqhkiG9w0BAQEDggEOADCCAQkCggEA\n"
+                                   
"vfTdv+3fgvVTKRnP/HVNG81cr8TrUP/iiyuve/THMzvFXhCW+K03KwEku55QvnUn\n"
+                                   
"dwBfU/ROzLlv+5hotgiDRNFT3HxurmhouySBrJNJv7qWp8ILq4sw32vo0fbMu5BZ\n"
+                                   
"F49bUXK9L3kW2PdhTtSQPWHEzNrCxO+YgCilKHkY3vQNfdJ020Q5EAAEseD1YtWC\n"
+                                   
"IpRvJzYlZMpjYB1ubTl24kwrgOKUJYKqM4jmF4DVQp4oOK/6QYGGh1QmHRPAy3CB\n"
+                                   
"II6sbb+sZT9cAqU6GYQVB35lm4XAgibXV6KgmpVxVQQ69U6xyoOl204xuekZOaG9\n"
+                                   
"RUPId74Rtmwfi1TLbBzo2wIDAQABo3YwdDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQM\n"
+                                   
"MAoGCCsGAQUFBwMBMA8GA1UdDwEB/wQFAwMHIAAwHQYDVR0OBBYEFOFi4ilKOP1d\n"
+                                   
"XHlWCMwmVKr7mgy8MB8GA1UdIwQYMBaAFP2olB4s2T/xuoQ5pT2RKojFwZo2MAsG\n"
+                                   
"CSqGSIb3DQEBBQOCAQEAHVWPxazupbOkG7Did+dY9z2z6RjTzYvurTtEKQgzM2Vz\n"
+                                   
"GQBA+3pZ3c5mS97fPIs9hZXfnQeelMeZ2XP1a+9vp35bJjZBBhVH+pqxjCgiUflg\n"
+                                   
"A3Zqy0XwwVCgQLE2HyaU3DLUD/aeIFK5gJaOSdNTXZLv43K8kl4cqDbMeRpVTbkt\n"
+                                   
"YmG4AyEOYRNKGTqMEJXJoxD5E3rBUNrVI/XyTjYrulxbNPcMWEHKNeeqWpKDYTFo\n"
+                                   
"Bb01PCthGXiq/4A2RLAFosadzRa8SBpoSjPPfZ0b2w4MJpReHqKbR5+T2t6hzml6\n"
+                                   
"4ToyOKPDmamiTuN5KzLN3cw7DQlvWMvqSOChPLnA3Q==\n"
+                                   "-----END CERTIFICATE-----\n";
+
+
+int
+main (int argc,
+      char *const *argv)
+{
+  struct MHD_Daemon *d;
+
+  if (argc != 2)
+  {
+    printf ("%s PORT\n", argv[0]);
+    return 1;
+  }
+  d = MHD_start_daemon (/* MHD_USE_INTERNAL_POLLING_THREAD | 
MHD_USE_ERROR_LOG, */
+    MHD_USE_AUTO | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG
+    | MHD_USE_TLS,
+    /* MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | MHD_USE_POLL, */
+    /* MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | 
MHD_USE_ERROR_LOG | MHD_USE_POLL, */
+    /* MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | 
MHD_USE_ERROR_LOG, */
+    atoi (argv[1]),
+    NULL, NULL, &ahc_echo, NULL,
+    MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 120,
+    MHD_OPTION_STRICT_FOR_CLIENT, (int) 1,
+    /* Optionally, the gnutls_load_file() can be used to
+       load the key and the certificate from file. */
+    MHD_OPTION_HTTPS_MEM_KEY, srv_signed_key_pem,
+    MHD_OPTION_HTTPS_MEM_CERT, srv_signed_cert_pem,
+    MHD_OPTION_END);
+  if (d == NULL)
+    return 1;
+  (void) getc (stdin);
+  MHD_stop_daemon (d);
+  return 0;
+}
diff --git a/src/microhttpd/mhd_send.c b/src/microhttpd/mhd_send.c
index e50be96e..db621cb2 100644
--- a/src/microhttpd/mhd_send.c
+++ b/src/microhttpd/mhd_send.c
@@ -240,7 +240,8 @@ MHD_send_on_connection_ (struct MHD_Connection *connection,
   ssize_t ret;
 
   /* error handling from send_param_adapter() */
-  if ((MHD_INVALID_SOCKET == s) || (MHD_CONNECTION_CLOSED == 
connection->state))
+  if ( (MHD_INVALID_SOCKET == s) ||
+       (MHD_CONNECTION_CLOSED == connection->state) )
   {
     return MHD_ERR_NOTCONN_;
   }
@@ -382,10 +383,22 @@ MHD_send_on_connection2_ (struct MHD_Connection 
*connection,
 {
 #ifdef HTTPS_SUPPORT
   if (0 != (connection->daemon->options & MHD_USE_TLS))
-    return MHD_send_on_connection_ (connection,
-                                    header,
-                                    header_size,
-                                    MHD_SSO_HDR_CORK);
+  {
+    ssize_t ret;
+
+    ret = MHD_send_on_connection_ (connection,
+                                   header,
+                                   header_size,
+                                   MHD_SSO_HDR_CORK);
+    if ( (ret == header_size) &&
+         (0 == buffer_size) &&
+         connection->sk_cork_on)
+    {
+      (void) gnutls_record_uncork (connection->tls_session, 0);
+      connection->sk_cork_on = false;
+    }
+    return ret;
+  }
 #endif
 #if defined(HAVE_SENDMSG) || defined(HAVE_WRITEV)
   MHD_socket s = connection->socket_fd;
diff --git a/src/testcurl/.gitignore b/src/testcurl/.gitignore
index 800bdffe..52457fa4 100644
--- a/src/testcurl/.gitignore
+++ b/src/testcurl/.gitignore
@@ -108,3 +108,4 @@ test_large_put_inc11
 test_delete
 test_digestauth_sha256
 perf_get_concurrent11
+test_get_empty
diff --git a/src/testcurl/https/test_https_get.c 
b/src/testcurl/https/test_https_get.c
index 17248bf7..8f62e46c 100644
--- a/src/testcurl/https/test_https_get.c
+++ b/src/testcurl/https/test_https_get.c
@@ -37,6 +37,10 @@
 extern const char srv_signed_cert_pem[];
 extern const char srv_signed_key_pem[];
 
+
+static int global_port;
+
+
 /* perform a HTTP GET request via SSL/TLS */
 static int
 test_secure_get (FILE *test_fd,
@@ -55,7 +59,8 @@ test_secure_get (FILE *test_fd,
   d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION
                         | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS
                         | MHD_USE_ERROR_LOG, port,
-                        NULL, NULL, &http_ahc, NULL,
+                        NULL, NULL,
+                        &http_ahc, NULL,
                         MHD_OPTION_HTTPS_MEM_KEY, srv_signed_key_pem,
                         MHD_OPTION_HTTPS_MEM_CERT, srv_signed_cert_pem,
                         MHD_OPTION_END);
@@ -76,13 +81,156 @@ test_secure_get (FILE *test_fd,
     port = (int) dinfo->port;
   }
 
-  ret = test_https_transfer (test_fd, port, cipher_suite, proto_version);
+  ret = test_https_transfer (test_fd,
+                             port,
+                             cipher_suite,
+                             proto_version);
 
   MHD_stop_daemon (d);
   return ret;
 }
 
 
+static int
+ahc_empty (void *cls,
+           struct MHD_Connection *connection,
+           const char *url,
+           const char *method,
+           const char *version,
+           const char *upload_data,
+           size_t *upload_data_size,
+           void **unused)
+{
+  static int ptr;
+  struct MHD_Response *response;
+  int ret;
+  (void) cls;
+  (void) url;
+  (void) url;
+  (void) version;  /* Unused. Silent compiler warning. */
+  (void) upload_data;
+  (void) upload_data_size;     /* Unused. Silent compiler warning. */
+
+  if (0 != strcasecmp ("GET",
+                       method))
+    return MHD_NO;              /* unexpected method */
+  if (&ptr != *unused)
+  {
+    *unused = &ptr;
+    return MHD_YES;
+  }
+  *unused = NULL;
+  response = MHD_create_response_from_buffer (0,
+                                              NULL,
+                                              MHD_RESPMEM_PERSISTENT);
+  ret = MHD_queue_response (connection,
+                            MHD_HTTP_OK,
+                            response);
+  MHD_destroy_response (response);
+  if (ret == MHD_NO)
+  {
+    fprintf (stderr, "Failed to queue response.\n");
+    _exit (20);
+  }
+  return ret;
+}
+
+
+static int
+curlExcessFound (CURL *c,
+                 curl_infotype type,
+                 char *data,
+                 size_t size,
+                 void *cls)
+{
+  static const char *excess_found = "Excess found";
+  const size_t str_size = strlen (excess_found);
+  (void) c;      /* Unused. Silence compiler warning. */
+
+  if ((CURLINFO_TEXT == type)
+      &&(size >= str_size)
+      &&(0 == strncmp (excess_found, data, str_size)))
+    *(int *) cls = 1;
+  return 0;
+}
+
+
+static int
+testEmptyGet (int poll_flag)
+{
+  struct MHD_Daemon *d;
+  CURL *c;
+  char buf[2048];
+  struct CBC cbc;
+  CURLcode errornum;
+  int excess_found = 0;
+
+
+  if ( (0 == global_port) &&
+       (MHD_NO == MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) 
)
+  {
+    global_port = 1225;
+
+  }
+
+  cbc.buf = buf;
+  cbc.size = 2048;
+  cbc.pos = 0;
+  d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG
+                        | poll_flag | MHD_USE_TLS,
+                        global_port, NULL, NULL,
+                        &ahc_empty, NULL,
+                        MHD_OPTION_HTTPS_MEM_KEY, srv_signed_key_pem,
+                        MHD_OPTION_HTTPS_MEM_CERT, srv_signed_cert_pem,
+                        MHD_OPTION_END);
+  if (d == NULL)
+    return 4194304;
+  if (0 == global_port)
+  {
+    const union MHD_DaemonInfo *dinfo;
+    dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT);
+    if ((NULL == dinfo) ||(0 == dinfo->port) )
+    {
+      MHD_stop_daemon (d); return 32;
+    }
+    global_port = (int) dinfo->port;
+  }
+  c = curl_easy_init ();
+  curl_easy_setopt (c, CURLOPT_URL, "https://127.0.0.1/";);
+  curl_easy_setopt (c, CURLOPT_PORT, (long) global_port);
+  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
+  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
+  curl_easy_setopt (c, CURLOPT_DEBUGFUNCTION, &curlExcessFound);
+  curl_easy_setopt (c, CURLOPT_DEBUGDATA, &excess_found);
+  curl_easy_setopt (c, CURLOPT_VERBOSE, 1L);
+  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1L);
+  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
+  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 150L);
+  curl_easy_setopt (c, CURLOPT_SSL_VERIFYPEER, 0L);
+  curl_easy_setopt (c, CURLOPT_SSL_VERIFYHOST, 0L);
+  /* NOTE: use of CONNECTTIMEOUT without also
+     setting NOSIGNAL results in really weird
+     crashes on my system!*/
+  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1L);
+  if (CURLE_OK != (errornum = curl_easy_perform (c)))
+  {
+    fprintf (stderr,
+             "curl_easy_perform failed: `%s'\n",
+             curl_easy_strerror (errornum));
+    curl_easy_cleanup (c);
+    MHD_stop_daemon (d);
+    return 8388608;
+  }
+  curl_easy_cleanup (c);
+  MHD_stop_daemon (d);
+  if (cbc.pos != 0)
+    return 16777216;
+  if (excess_found)
+    return 33554432;
+  return 0;
+}
+
+
 int
 main (int argc, char *const *argv)
 {
@@ -109,11 +257,9 @@ main (int argc, char *const *argv)
   {
     aes256_sha_tlsv1 = "rsa_aes_256_sha";
   }
-
   errorCount +=
     test_secure_get (NULL, aes256_sha_tlsv1, CURL_SSLVERSION_TLSv1);
-  print_test_result (errorCount, argv[0]);
-
+  errorCount += testEmptyGet (0);
   curl_global_cleanup ();
 
   return errorCount != 0 ? 1 : 0;
diff --git a/src/testcurl/https/tls_test_common.c 
b/src/testcurl/https/tls_test_common.c
index eb7cb14c..9d988451 100644
--- a/src/testcurl/https/tls_test_common.c
+++ b/src/testcurl/https/tls_test_common.c
@@ -62,7 +62,8 @@ setup_ca_cert ()
  */
 int
 test_daemon_get (void *cls,
-                 const char *cipher_suite, int proto_version,
+                 const char *cipher_suite,
+                 int proto_version,
                  int port,
                  int ver_peer)
 {
@@ -71,7 +72,7 @@ test_daemon_get (void *cls,
   CURLcode errornum;
   char url[255];
   size_t len;
-  (void) cls;    /* Unused. Silent compiler warning. */
+  (void) cls;    /* Unused. Silence compiler warning. */
 
   len = strlen (test_data);
   if (NULL == (cbc.buf = malloc (sizeof (char) * len)))
@@ -138,20 +139,29 @@ test_daemon_get (void *cls,
 
 
 void
-print_test_result (int test_outcome, char *test_name)
+print_test_result (int test_outcome,
+                   char *test_name)
 {
   if (test_outcome != 0)
-    fprintf (stderr, "running test: %s [fail: %u]\n", test_name, (unsigned
-                                                                  int)
+    fprintf (stderr,
+             "running test: %s [fail: %u]\n",
+             test_name, (unsigned
+                         int)
              test_outcome);
 #if 0
   else
-    fprintf (stdout, "running test: %s [pass]\n", test_name);
+    fprintf (stdout,
+             "running test: %s [pass]\n",
+             test_name);
 #endif
 }
 
+
 size_t
-copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
+copyBuffer (void *ptr,
+            size_t size,
+            size_t nmemb,
+            void *ctx)
 {
   struct CBC *cbc = ctx;
 
@@ -162,13 +172,19 @@ copyBuffer (void *ptr, size_t size, size_t nmemb, void 
*ctx)
   return size * nmemb;
 }
 
+
 /**
  *  HTTP access handler call back
  */
 int
-http_ahc (void *cls, struct MHD_Connection *connection,
-          const char *url, const char *method, const char *version,
-          const char *upload_data, size_t *upload_data_size, void **ptr)
+http_ahc (void *cls,
+          struct MHD_Connection *connection,
+          const char *url,
+          const char *method,
+          const char *version,
+          const char *upload_data,
+          size_t *upload_data_size,
+          void **ptr)
 {
   static int aptr;
   struct MHD_Response *response;
@@ -193,15 +209,26 @@ http_ahc (void *cls, struct MHD_Connection *connection,
   return ret;
 }
 
+
 /* HTTP access handler call back */
 int
-http_dummy_ahc (void *cls, struct MHD_Connection *connection,
-                const char *url, const char *method, const char *version,
-                const char *upload_data, size_t *upload_data_size,
+http_dummy_ahc (void *cls,
+                struct MHD_Connection *connection,
+                const char *url,
+                const char *method,
+                const char *version,
+                const char *upload_data,
+                size_t *upload_data_size,
                 void **ptr)
 {
-  (void) cls; (void) connection; (void) url; (void) method; (void) version;    
  /* Unused. Silent compiler warning. */
-  (void) upload_data; (void) upload_data_size; (void) ptr;                   
/* Unused. Silent compiler warning. */
+  (void) cls;
+  (void) connection;
+  (void) url;
+  (void) method;
+  (void) version;      /* Unused. Silent compiler warning. */
+  (void) upload_data;
+  (void) upload_data_size;
+  (void) ptr;                   /* Unused. Silent compiler warning. */
   return 0;
 }
 
@@ -215,7 +242,9 @@ http_dummy_ahc (void *cls, struct MHD_Connection 
*connection,
  */
 /* TODO have test wrap consider a NULL cbc */
 int
-send_curl_req (char *url, struct CBC *cbc, const char *cipher_suite,
+send_curl_req (char *url,
+               struct CBC *cbc,
+               const char *cipher_suite,
                int proto_version)
 {
   CURL *c;
diff --git a/src/testcurl/test_get.c b/src/testcurl/test_get.c
index dee5a9c1..09cae5f6 100644
--- a/src/testcurl/test_get.c
+++ b/src/testcurl/test_get.c
@@ -719,14 +719,19 @@ ahc_empty (void *cls,
            const char *url,
            const char *method,
            const char *version,
-           const char *upload_data, size_t *upload_data_size,
+           const char *upload_data,
+           size_t *upload_data_size,
            void **unused)
 {
   static int ptr;
   struct MHD_Response *response;
   int ret;
-  (void) cls; (void) url; (void) url; (void) version;  /* Unused. Silent 
compiler warning. */
-  (void) upload_data; (void) upload_data_size;     /* Unused. Silent compiler 
warning. */
+  (void) cls;
+  (void) url;
+  (void) url;
+  (void) version;  /* Unused. Silent compiler warning. */
+  (void) upload_data;
+  (void) upload_data_size;     /* Unused. Silent compiler warning. */
 
   if (0 != strcasecmp ("GET", method))
     return MHD_NO;              /* unexpected method */
@@ -739,7 +744,9 @@ ahc_empty (void *cls,
   response = MHD_create_response_from_buffer (0,
                                               NULL,
                                               MHD_RESPMEM_PERSISTENT);
-  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
+  ret = MHD_queue_response (connection,
+                            MHD_HTTP_OK,
+                            response);
   MHD_destroy_response (response);
   if (ret == MHD_NO)
   {
@@ -751,7 +758,10 @@ ahc_empty (void *cls,
 
 
 static int
-curlExcessFound (CURL *c, curl_infotype type, char *data, size_t size,
+curlExcessFound (CURL *c,
+                 curl_infotype type,
+                 char *data,
+                 size_t size,
                  void *cls)
 {
   static const char *excess_found = "Excess found";
diff --git a/src/testcurl/test_get.c b/src/testcurl/test_get_empty.c
similarity index 90%
copy from src/testcurl/test_get.c
copy to src/testcurl/test_get_empty.c
index dee5a9c1..0fffb37d 100644
--- a/src/testcurl/test_get.c
+++ b/src/testcurl/test_get_empty.c
@@ -1,6 +1,6 @@
 /*
      This file is part of libmicrohttpd
-     Copyright (C) 2007, 2009, 2011 Christian Grothoff
+     Copyright (C) 2007, 2009, 2011, 2019 Christian Grothoff
 
      libmicrohttpd is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -18,9 +18,8 @@
      Boston, MA 02110-1301, USA.
 */
 /**
- * @file test_get.c
- * @brief  Testcase for libmicrohttpd GET operations
- *         TODO: test parsing of query
+ * @file test_get_empty.c
+ * @brief  Testcase for libmicrohttpd GET operations returning an empty body
  * @author Christian Grothoff
  */
 #include "MHD_config.h"
@@ -111,7 +110,6 @@ ahc_echo (void *cls,
   const char *me = cls;
   struct MHD_Response *response;
   int ret;
-  const char *v;
   (void) version;
   (void) upload_data;
   (void) upload_data_size;       /* Unused. Silence compiler warning. */
@@ -124,41 +122,11 @@ ahc_echo (void *cls,
     return MHD_YES;
   }
   *unused = NULL;
-  v = MHD_lookup_connection_value (connection,
-                                   MHD_GET_ARGUMENT_KIND,
-                                   "a");
-  if ( (NULL == v) ||
-       (0 != strcmp ("&",
-                     v)) )
-  {
-    fprintf (stderr, "Found while looking for 'a=&': 'a=%s'\n",
-             NULL == v ? "NULL" : v);
-    _exit (17);
-  }
-  v = NULL;
-  if (MHD_YES != MHD_lookup_connection_value_n (connection,
-                                                MHD_GET_ARGUMENT_KIND,
-                                                "b",
-                                                1,
-                                                &v,
-                                                NULL))
-  {
-    fprintf (stderr, "Not found 'b' GET argument.\n");
-    _exit (18);
-  }
-  if ( (NULL == v) ||
-       (0 != strcmp ("c",
-                     v)) )
-  {
-    fprintf (stderr, "Found while looking for 'b=c': 'b=%s'\n",
-             NULL == v ? "NULL" : v);
-    _exit (19);
-  }
-  response = MHD_create_response_from_buffer (strlen (url),
-                                              (void *) url,
-                                              MHD_RESPMEM_MUST_COPY);
+  response = MHD_create_response_from_buffer (0,
+                                              NULL,
+                                              MHD_RESPMEM_PERSISTENT);
   ret = MHD_queue_response (connection,
-                            MHD_HTTP_OK,
+                            MHD_HTTP_NO_CONTENT,
                             response);
   MHD_destroy_response (response);
   if (ret == MHD_NO)
@@ -235,10 +203,8 @@ testInternalGet (int poll_flag)
   }
   curl_easy_cleanup (c);
   MHD_stop_daemon (d);
-  if (cbc.pos != strlen ("/hello_world"))
+  if (cbc.pos != 0)
     return 4;
-  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
-    return 8;
   return 0;
 }
 
@@ -309,10 +275,8 @@ testMultithreadedGet (int poll_flag)
   }
   curl_easy_cleanup (c);
   MHD_stop_daemon (d);
-  if (cbc.pos != strlen ("/hello_world"))
+  if (cbc.pos != 0)
     return 64;
-  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
-    return 128;
   return 0;
 }
 
@@ -383,10 +347,8 @@ testMultithreadedPoolGet (int poll_flag)
   }
   curl_easy_cleanup (c);
   MHD_stop_daemon (d);
-  if (cbc.pos != strlen ("/hello_world"))
+  if (cbc.pos != 0)
     return 64;
-  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
-    return 128;
   return 0;
 }
 
@@ -546,10 +508,8 @@ testExternalGet ()
     curl_multi_cleanup (multi);
   }
   MHD_stop_daemon (d);
-  if (cbc.pos != strlen ("/hello_world"))
+  if (cbc.pos != 0)
     return 8192;
-  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
-    return 16384;
   return 0;
 }
 
@@ -637,10 +597,8 @@ testUnknownPortGet (int poll_flag)
   }
   curl_easy_cleanup (c);
   MHD_stop_daemon (d);
-  if (cbc.pos != strlen ("/hello_world"))
+  if (cbc.pos != 0)
     return 1048576;
-  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
-    return 2097152;
   return 0;
 }
 
@@ -725,8 +683,12 @@ ahc_empty (void *cls,
   static int ptr;
   struct MHD_Response *response;
   int ret;
-  (void) cls; (void) url; (void) url; (void) version;  /* Unused. Silent 
compiler warning. */
-  (void) upload_data; (void) upload_data_size;     /* Unused. Silent compiler 
warning. */
+  (void) cls;
+  (void) url;
+  (void) url;
+  (void) version;  /* Unused. Silence compiler warning. */
+  (void) upload_data;
+  (void) upload_data_size;     /* Unused. Silent compiler warning. */
 
   if (0 != strcasecmp ("GET", method))
     return MHD_NO;              /* unexpected method */
@@ -890,12 +852,6 @@ main (int argc, char *const *argv)
     else if (verbose)
       printf ("PASSED: testUnknownPortGet (0).\n");
     errorCount += test_result;
-    test_result += testStopRace (0);
-    if (test_result)
-      fprintf (stderr, "FAILED: testStopRace (0) - %u.\n", test_result);
-    else if (verbose)
-      printf ("PASSED: testStopRace (0).\n");
-    errorCount += test_result;
     test_result += testEmptyGet (0);
     if (test_result)
       fprintf (stderr, "FAILED: testEmptyGet (0) - %u.\n", test_result);
@@ -933,13 +889,6 @@ main (int argc, char *const *argv)
       else if (verbose)
         printf ("PASSED: testUnknownPortGet (MHD_USE_POLL).\n");
       errorCount += test_result;
-      test_result += testStopRace (MHD_USE_POLL);
-      if (test_result)
-        fprintf (stderr, "FAILED: testStopRace (MHD_USE_POLL) - %u.\n",
-                 test_result);
-      else if (verbose)
-        printf ("PASSED: testStopRace (MHD_USE_POLL).\n");
-      errorCount += test_result;
       test_result += testEmptyGet (MHD_USE_POLL);
       if (test_result)
         fprintf (stderr, "FAILED: testEmptyGet (MHD_USE_POLL) - %u.\n",

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



reply via email to

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