commit beb7fa828c59c31d4a5178b82121435f2069b181 parent 1d9f940dca89a5ee95a3247e43440ebd16c903af Author: Christian Grothoff <christian@grothoff.org> Date: Sun, 27 Sep 2020 22:12:13 +0200 fix transmission stall issue with upgraded TLS connections reported by Nguyen Xuan Viet on the mailinglist Diffstat:
49 files changed, 530 insertions(+), 333 deletions(-)
diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,9 @@ +Sun 27 Sep 2020 10:08:03 PM CEST + Fixed incorrect triggering of epoll edge polling for + "upgraded" TLS connections. Fixed a few cases where + gnutls_record_uncork() return value was still ignored, + possibly causing buffer to not be flushed correctly. -CG + Sat 26 Sep 2020 08:18:02 PM CEST Make MHD_USE_NO_LISTEN_SOCKET work in conjunction with MHD internal threads. -CG/DE diff --git a/src/examples/connection_close.c b/src/examples/connection_close.c @@ -102,10 +102,10 @@ main (int argc, char *const *argv) 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_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | MHD_USE_POLL, */ + /* MHD_USE_AUTO | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, */ + /* 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_ITC, + | MHD_USE_ERROR_LOG | MHD_USE_POLL, // | MHD_USE_ITC, /* MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, */ atoi (argv[1]), NULL, NULL, &ahc_echo, PAGE, diff --git a/src/examples/demo.c b/src/examples/demo.c @@ -283,11 +283,11 @@ list_directory (struct ResponseDataContext *rdc, snprintf (fullname, sizeof (fullname), "%s/%s", dirname, de->d_name)) - continue; /* ugh, file too long? how can this be!? */ + continue; /* ugh, file too long? how can this be!? */ if (0 != stat (fullname, &sbuf)) - continue; /* ugh, failed to 'stat' */ + continue; /* ugh, failed to 'stat' */ if (! S_ISREG (sbuf.st_mode)) - continue; /* not a regular file, skip */ + continue; /* not a regular file, skip */ if (rdc->off + 1024 > rdc->buf_len) { void *r; diff --git a/src/examples/demo_https.c b/src/examples/demo_https.c @@ -286,11 +286,11 @@ list_directory (struct ResponseDataContext *rdc, snprintf (fullname, sizeof (fullname), "%s/%s", dirname, de->d_name)) - continue; /* ugh, file too long? how can this be!? */ + continue; /* ugh, file too long? how can this be!? */ if (0 != stat (fullname, &sbuf)) - continue; /* ugh, failed to 'stat' */ + continue; /* ugh, failed to 'stat' */ if (! S_ISREG (sbuf.st_mode)) - continue; /* not a regular file, skip */ + continue; /* not a regular file, skip */ if (rdc->off + 1024 > rdc->buf_len) { void *r; diff --git a/src/examples/fileserver_example.c b/src/examples/fileserver_example.c @@ -69,13 +69,13 @@ ahc_echo (void *cls, *ptr = &aptr; return MHD_YES; } - *ptr = NULL; /* reset when done */ + *ptr = NULL; /* reset when done */ /* WARNING: direct usage of url as filename is for example only! * NEVER pass received data directly as parameter to file manipulation * functions. Always check validity of data before using. */ if (NULL != strstr (url, "../")) /* Very simplified check! */ - fd = -1; /* Do not allow usage of parent directories. */ + fd = -1; /* Do not allow usage of parent directories. */ else fd = open (url + 1, O_RDONLY); if (-1 != fd) diff --git a/src/examples/websocket_threaded_example.c b/src/examples/websocket_threaded_example.c @@ -36,40 +36,40 @@ "<title>WebSocket chat</title>\n" \ "<script>\n" \ "document.addEventListener('DOMContentLoaded', function() {\n" \ - " const ws = new WebSocket('ws://' + window.location.host);\n" \ - " const btn = document.getElementById('send');\n" \ - " const msg = document.getElementById('msg');\n" \ - " const log = document.getElementById('log');\n" \ - " ws.onopen = function() {\n" \ - " log.value += 'Connected\\n';\n" \ - " };\n" \ - " ws.onclose = function() {\n" \ - " log.value += 'Disconnected\\n';\n" \ - " };\n" \ - " ws.onmessage = function(ev) {\n" \ - " log.value += ev.data + '\\n';\n" \ - " };\n" \ - " btn.onclick = function() {\n" \ - " log.value += '<You>: ' + msg.value + '\\n';\n" \ - " ws.send(msg.value);\n" \ - " };\n" \ - " msg.onkeyup = function(ev) {\n" \ - " if (ev.keyCode === 13) {\n" \ - " ev.preventDefault();\n" \ - " ev.stopPropagation();\n" \ - " btn.click();\n" \ - " msg.value = '';\n" \ - " }\n" \ - " };\n" \ - "});\n" \ - "</script>\n" \ - "</head>\n" \ - "<body>\n" \ - "<input type='text' id='msg' autofocus/>\n" \ - "<input type='button' id='send' value='Send' /><br /><br />\n" \ - "<textarea id='log' rows='20' cols='28'></textarea>\n" \ - "</body>\n" \ - "</html>" + " const ws = new WebSocket('ws:// ' + window.location.host);\n" \ + // " const btn = document.getElementById('send');\n" \ + // " const msg = document.getElementById('msg');\n" \ + // " const log = document.getElementById('log');\n" \ + // " ws.onopen = function() {\n" \ + // " log.value += 'Connected\\n';\n" \ + // " };\n" \ + // " ws.onclose = function() {\n" \ + // " log.value += 'Disconnected\\n';\n" \ + // " };\n" \ + // " ws.onmessage = function(ev) {\n" \ + // " log.value += ev.data + '\\n';\n" \ + // " };\n" \ + // " btn.onclick = function() {\n" \ + // " log.value += '<You>: ' + msg.value + '\\n';\n" \ + // " ws.send(msg.value);\n" \ + // " };\n" \ + // " msg.onkeyup = function(ev) {\n" \ + // " if (ev.keyCode === 13) {\n" \ + // " ev.preventDefault();\n" \ + // " ev.stopPropagation();\n" \ + // " btn.click();\n" \ + // " msg.value = '';\n" \ + // " }\n" \ + // " };\n" \ + // "});\n" \ + // "</script>\n" \ + // "</head>\n" \ + // "<body>\n" \ + // "<input type='text' id='msg' autofocus/>\n" \ + // "<input type='button' id='send' value='Send' /><br /><br />\n" \ + // "<textarea id='log' rows='20' cols='28'></textarea>\n" \ + // "</body>\n" \ + // "</html>" #define BAD_REQUEST_PAGE \ "<html>\n" \ "<head>\n" \ diff --git a/src/include/microhttpd.h b/src/include/microhttpd.h @@ -132,7 +132,7 @@ typedef intptr_t ssize_t; * Current version of the library. * 0x01093001 = 1.9.30-1. */ -#define MHD_VERSION 0x00097104 +#define MHD_VERSION 0x00097105 /** * Operational results from MHD calls. diff --git a/src/lib/connection_add.c b/src/lib/connection_add.c @@ -188,8 +188,8 @@ thread_main_handle_connection (void *data) } #endif /* HAVE_POLL */ MHD_itc_clear_ (daemon->itc); - continue; /* Check again for resume. */ - } /* End of "suspended" branch. */ + continue; /* Check again for resume. */ + } /* End of "suspended" branch. */ if (was_suspended) { @@ -1047,7 +1047,7 @@ MHD_accept_connection_ (struct MHD_Daemon *daemon) /* This could be a common occurrence with multiple worker threads */ if (MHD_SCKT_ERR_IS_ (err, MHD_SCKT_EINVAL_)) - return MHD_SC_DAEMON_ALREADY_SHUTDOWN; /* can happen during shutdown, let's hope this is the cause... */ + return MHD_SC_DAEMON_ALREADY_SHUTDOWN; /* can happen during shutdown, let's hope this is the cause... */ if (MHD_SCKT_ERR_IS_DISCNN_BEFORE_ACCEPT_ (err)) return MHD_SC_ACCEPT_FAST_DISCONNECT; /* do not print error if client just disconnected early */ if (MHD_SCKT_ERR_IS_EAGAIN_ (err) ) diff --git a/src/lib/connection_options.c b/src/lib/connection_options.c @@ -90,10 +90,10 @@ MHD_update_last_activity_ (struct MHD_Connection *connection) struct MHD_Daemon *daemon = connection->daemon; if (0 == connection->connection_timeout) - return; /* Skip update of activity for connections + return; /* Skip update of activity for connections without timeout timer. */ if (connection->suspended) - return; /* no activity on suspended connections */ + return; /* no activity on suspended connections */ connection->last_activity = MHD_monotonic_sec_counter (); if (MHD_TM_THREAD_PER_CONNECTION == daemon->threading_mode) diff --git a/src/lib/connection_update_last_activity.c b/src/lib/connection_update_last_activity.c @@ -38,10 +38,10 @@ MHD_connection_update_last_activity_ (struct MHD_Connection *connection) struct MHD_Daemon *daemon = connection->daemon; if (0 == connection->connection_timeout) - return; /* Skip update of activity for connections + return; /* Skip update of activity for connections without timeout timer. */ if (connection->suspended) - return; /* no activity on suspended connections */ + return; /* no activity on suspended connections */ connection->last_activity = MHD_monotonic_sec_counter (); if (MHD_TM_THREAD_PER_CONNECTION == daemon->threading_mode) diff --git a/src/lib/daemon_poll.c b/src/lib/daemon_poll.c @@ -294,9 +294,9 @@ MHD_daemon_poll_all_ (struct MHD_Daemon *daemon, prev = pos->prev; /* first, sanity checks */ if (i >= num_connections) - break; /* connection list changed somehow, retry later ... */ + break; /* connection list changed somehow, retry later ... */ if (p[poll_server + i].fd != pos->socket_fd) - continue; /* fd mismatch, something else happened, retry later ... */ + continue; /* fd mismatch, something else happened, retry later ... */ MHD_connection_call_handlers_ (pos, 0 != (p[poll_server + i].revents & POLLIN), 0 != (p[poll_server + i].revents diff --git a/src/lib/daemon_start.c b/src/lib/daemon_start.c @@ -67,11 +67,11 @@ configure_listen_reuse (struct MHD_Daemon *daemon) } return MHD_SC_OK; #endif /* ! MHD_WINSOCK_SOCKETS */ - /* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms. - * Fail if SO_REUSEPORT is not defined or setsockopt fails. - */ - /* SO_REUSEADDR on W32 has the same semantics - as SO_REUSEPORT on BSD/Linux */ + /* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms. + * Fail if SO_REUSEPORT is not defined or setsockopt fails. + */ + /* SO_REUSEADDR on W32 has the same semantics + as SO_REUSEPORT on BSD/Linux */ #if defined(MHD_WINSOCK_SOCKETS) || defined(SO_REUSEPORT) if (0 > setsockopt (daemon->listen_socket, SOL_SOCKET, @@ -93,8 +93,8 @@ configure_listen_reuse (struct MHD_Daemon *daemon) } return MHD_SC_OK; #else /* !MHD_WINSOCK_SOCKETS && !SO_REUSEPORT */ - /* we're supposed to allow address:port re-use, but - on this platform we cannot; fail hard */ + /* we're supposed to allow address:port re-use, but + on this platform we cannot; fail hard */ #ifdef HAVE_MESSAGES MHD_DLOG (daemon, MHD_SC_LISTEN_ADDRESS_REUSE_ENABLE_NOT_SUPPORTED, diff --git a/src/lib/md5.h b/src/lib/md5.h @@ -26,7 +26,7 @@ struct MD5Context { - uint32_t state[4]; /* state */ + uint32_t state[4]; /* state */ uint64_t count; /* number of bits, mod 2^64 */ uint8_t buffer[MD5_BLOCK_SIZE]; /* input buffer */ }; diff --git a/src/lib/mhd_mono_clock.c b/src/lib/mhd_mono_clock.c @@ -254,8 +254,8 @@ MHD_monotonic_sec_counter_init (void) LARGE_INTEGER freq; LARGE_INTEGER perf_counter; - QueryPerformanceFrequency (&freq); /* never fail on XP and later */ - QueryPerformanceCounter (&perf_counter); /* never fail on XP and later */ + QueryPerformanceFrequency (&freq); /* never fail on XP and later */ + QueryPerformanceCounter (&perf_counter); /* never fail on XP and later */ perf_freq = freq.QuadPart; perf_start = perf_counter.QuadPart; mono_clock_source = _MHD_CLOCK_PERFCOUNTER; diff --git a/src/lib/mhd_threads.c b/src/lib/mhd_threads.c @@ -49,7 +49,8 @@ #if defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) || \ defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI) # define MHD_USE_THREAD_ATTR_SETNAME 1 -#endif /* HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD || HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI */ +#endif \ + /* HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD || HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI */ #if defined(HAVE_PTHREAD_SETNAME_NP_GNU) || \ defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) \ diff --git a/src/lib/tsearch.c b/src/lib/tsearch.c @@ -24,7 +24,7 @@ typedef struct node /* $NetBSD: tsearch.c,v 1.5 2005/11/29 03:12:00 christos Exp $ */ /* find or insert datum into search tree */ void * -tsearch (const void *vkey, /* key to be located */ +tsearch (const void *vkey, /* key to be located */ void **vrootp, /* address of tree root */ int (*compar)(const void *, const void *)) { @@ -38,19 +38,19 @@ tsearch (const void *vkey, /* key to be located */ { /* Knuth's T1: */ int r; - if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */ - return *rootp; /* we found it! */ + if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */ + return *rootp; /* we found it! */ rootp = (r < 0) ? &(*rootp)->llink : /* T3: follow left branch */ &(*rootp)->rlink; /* T4: follow right branch */ } - q = malloc (sizeof(node_t)); /* T5: key not found */ + q = malloc (sizeof(node_t)); /* T5: key not found */ if (q) - { /* make new node */ - *rootp = q; /* link new node to old */ - q->key = vkey; /* initialize new node */ + { /* make new node */ + *rootp = q; /* link new node to old */ + q->key = vkey; /* initialize new node */ q->llink = q->rlink = NULL; } return q; @@ -73,8 +73,8 @@ tfind (const void *vkey, /* key to be found */ { /* T1: */ int r; - if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */ - return *rootp; /* key found */ + if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */ + return *rootp; /* key found */ rootp = (r < 0) ? &(*rootp)->llink : /* T3: follow left branch */ &(*rootp)->rlink; /* T4: follow right branch */ @@ -112,17 +112,17 @@ tdelete (const void *__restrict vkey, &(*rootp)->llink : /* follow llink branch */ &(*rootp)->rlink; /* follow rlink branch */ if (*rootp == NULL) - return NULL; /* key not found */ + return NULL; /* key not found */ } - r = (*rootp)->rlink; /* D1: */ - if ((q = (*rootp)->llink) == NULL) /* Left NULL? */ + r = (*rootp)->rlink; /* D1: */ + if ((q = (*rootp)->llink) == NULL) /* Left NULL? */ { q = r; } else if (r != NULL) { /* Right link is NULL? */ if (r->llink == NULL) - { /* D2: Find successor */ + { /* D2: Find successor */ r->llink = q; q = r; } @@ -135,7 +135,7 @@ tdelete (const void *__restrict vkey, q->rlink = (*rootp)->rlink; } } - free (*rootp); /* D4: Free node */ + free (*rootp); /* D4: Free node */ *rootp = q; /* link parent to new node */ return p; } diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c @@ -115,7 +115,6 @@ #endif - /** * sendfile() chuck size */ @@ -250,9 +249,9 @@ MHD_get_connection_values (struct MHD_Connection *connection, ret++; if ( (NULL != iterator) && (MHD_NO == iterator (iterator_cls, - pos->kind, - pos->header, - pos->value)) ) + pos->kind, + pos->header, + pos->value)) ) return ret; } return ret; @@ -764,7 +763,8 @@ MHD_connection_finish_forward_ (struct MHD_Connection *connection) * used with MHD_UPGRADE_ACTION_CLOSE. They will be * closed by MHD_cleanup_upgraded_connection_() during * connection's final cleanup. - */} + */// +} #endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT*/ @@ -1141,18 +1141,18 @@ try_grow_read_buffer (struct MHD_Connection *connection, avail_size = MHD_pool_get_free (connection->pool); if (0 == avail_size) - return false; /* No more space available */ + return false; /* No more space available */ if (0 == connection->read_buffer_size) - new_size = avail_size / 2; /* Use half of available buffer for reading */ + new_size = avail_size / 2; /* Use half of available buffer for reading */ else { size_t grow_size; grow_size = avail_size / 8; if (MHD_BUF_INC_SIZE > grow_size) - { /* Shortage of space */ + { /* Shortage of space */ if (! required) - return false; /* Grow is not mandatory, leave some space in pool */ + return false; /* Grow is not mandatory, leave some space in pool */ else { /* Shortage of space, but grow is mandatory */ @@ -1403,7 +1403,8 @@ build_header_response (struct MHD_Connection *connection) Note that the change from 'SHOULD NOT' to 'MUST NOT' is a recent development of the HTTP 1.1 specification. - */content_length_len + */// + content_length_len = MHD_snprintf_ (content_length_buf, sizeof (content_length_buf), MHD_HTTP_HEADER_CONTENT_LENGTH ": " @@ -2438,8 +2439,9 @@ static enum MHD_Result check_write_done (struct MHD_Connection *connection, enum MHD_CONNECTION_STATE next_state) { - if (connection->write_buffer_append_offset != - connection->write_buffer_send_offset) + if ( (connection->write_buffer_append_offset != + connection->write_buffer_send_offset) || + (connection->sk_cork_on) ) return MHD_NO; connection->write_buffer_append_offset = 0; connection->write_buffer_send_offset = 0; @@ -2722,10 +2724,10 @@ MHD_update_last_activity_ (struct MHD_Connection *connection) struct MHD_Daemon *daemon = connection->daemon; if (0 == connection->connection_timeout) - return; /* Skip update of activity for connections + return; /* Skip update of activity for connections without timeout timer. */ if (connection->suspended) - return; /* no activity on suspended connections */ + return; /* no activity on suspended connections */ connection->last_activity = MHD_monotonic_sec_counter (); if (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c @@ -1333,6 +1333,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh) * this function. If 'was_closed' changed externally in the middle * of processing - it will be processed on next iteration. */ bool was_closed; + if (daemon->shutdown) { /* Daemon shutting down, application will not receive any more data. */ @@ -1355,10 +1356,9 @@ process_urh (struct MHD_UpgradeResponseHandle *urh) { #ifdef HAVE_MESSAGES MHD_DLOG (daemon, - _ ( - "Failed to forward to application " - MHD_UNSIGNED_LONG_LONG_PRINTF \ - " bytes of data received from remote side: application shut down socket.\n"), + _ ("Failed to forward to application " + MHD_UNSIGNED_LONG_LONG_PRINTF \ + " bytes of data received from remote side: application shut down socket.\n"), (MHD_UNSIGNED_LONG_LONG) urh->in_buffer_used); #endif @@ -1367,7 +1367,8 @@ process_urh (struct MHD_UpgradeResponseHandle *urh) * check for any pending data even if socket is not marked * as 'ready' (signal may arrive after poll()/select()). * Socketpair for forwarding is always in non-blocking mode - * so no risk that recv() will block the thread. */if (0 != urh->out_buffer_size) + * so no risk that recv() will block the thread. */// + if (0 != urh->out_buffer_size) urh->mhd.celi |= MHD_EPOLL_STATE_READ_READY; /* Discard any data received form remote. */ urh->in_buffer_used = 0; @@ -1379,12 +1380,14 @@ process_urh (struct MHD_UpgradeResponseHandle *urh) connection->tls_read_ready = false; } - /* On some platforms (W32, possibly Darwin) failed send() (send() will always - * fail after remote disconnect was detected) may discard data in system - * buffers received by system but not yet read by recv(). - * So, before trying send() on any socket, recv() must be performed at first - * otherwise last part of incoming data may be lost. *//* If disconnect or error was detected - try to read from socket - * to dry data possibly pending is system buffers. */if (0 != (MHD_EPOLL_STATE_ERROR & urh->app.celi)) + /* On some platforms (W32, possibly Darwin) failed send() (send() will + * always fail after remote disconnect was detected) may discard data in + * system buffers received by system but not yet read by recv(). So, before + * trying send() on any socket, recv() must be performed at first otherwise + * last part of incoming data may be lost. If disconnect or error was + * detected - try to read from socket to dry data possibly pending is system + * buffers. */// + if (0 != (MHD_EPOLL_STATE_ERROR & urh->app.celi)) urh->app.celi |= MHD_EPOLL_STATE_READ_READY; if (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi)) urh->mhd.celi |= MHD_EPOLL_STATE_READ_READY; @@ -1424,10 +1427,10 @@ process_urh (struct MHD_UpgradeResponseHandle *urh) else /* 0 < res */ { urh->in_buffer_used += res; - if (buf_size > (size_t) res) - urh->app.celi &= ~MHD_EPOLL_STATE_READ_READY; - else if (0 < gnutls_record_check_pending (connection->tls_session)) + if (0 < gnutls_record_check_pending (connection->tls_session)) + { connection->tls_read_ready = true; + } } if (MHD_EPOLL_STATE_ERROR == ((MHD_EPOLL_STATE_ERROR | MHD_EPOLL_STATE_READ_READY) & urh->app.celi)) @@ -1932,8 +1935,8 @@ thread_main_handle_connection (void *data) } #endif /* HAVE_POLL */ MHD_itc_clear_ (daemon->itc); - continue; /* Check again for resume. */ - } /* End of "suspended" branch. */ + continue; /* Check again for resume. */ + } /* End of "suspended" branch. */ if (was_suspended) { @@ -2228,7 +2231,8 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon); * and if possible. */ #define MHD_TLSLIB_NEED_PUSH_FUNC 1 -#endif /* !MHD_WINSOCK_SOCKETS && !MHD_socket_nosignal_ && (GNUTLS_VERSION_NUMBER+0 < 0x030402) */ +#endif \ + /* !MHD_WINSOCK_SOCKETS && !MHD_socket_nosignal_ && (GNUTLS_VERSION_NUMBER+0 < 0x030402) */ #ifdef MHD_TLSLIB_NEED_PUSH_FUNC /** @@ -3379,7 +3383,8 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon) this is not true as if we fail to do manually remove it, we are still seeing an event for this fd in epoll, causing grief (use-after-free...) --- at least on my - system. */if (0 != epoll_ctl (daemon->epoll_fd, + system. */// + if (0 != epoll_ctl (daemon->epoll_fd, EPOLL_CTL_DEL, pos->socket_fd, NULL)) @@ -3831,9 +3836,9 @@ MHD_select (struct MHD_Daemon *daemon, return MHD_NO; } if (MHD_NO != internal_run_from_select (daemon, - &rs, - &ws, - &es)) + &rs, + &ws, + &es)) return (MHD_NO == err_state) ? MHD_YES : MHD_NO; return MHD_NO; } @@ -3920,7 +3925,7 @@ MHD_poll_all (struct MHD_Daemon *daemon, timeout = 0; else if ( (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) || (MHD_NO == MHD_get_timeout (daemon, - <imeout)) ) + <imeout)) ) timeout = -1; else timeout = (ltimeout > INT_MAX) ? INT_MAX : (int) ltimeout; @@ -4000,9 +4005,9 @@ MHD_poll_all (struct MHD_Daemon *daemon, prev = pos->prev; /* first, sanity checks */ if (i >= num_connections) - break; /* connection list changed somehow, retry later ... */ + break; /* connection list changed somehow, retry later ... */ if (p[poll_server + i].fd != pos->socket_fd) - continue; /* fd mismatch, something else happened, retry later ... */ + continue; /* fd mismatch, something else happened, retry later ... */ call_handlers (pos, 0 != (p[poll_server + i].revents & POLLIN), 0 != (p[poll_server + i].revents & POLLOUT), @@ -4267,22 +4272,26 @@ run_epoll_for_upgrade (struct MHD_Daemon *daemon) /* Update ueh state based on what is ready according to epoll() */ if (0 != (events[i].events & EPOLLIN)) + { ueh->celi |= MHD_EPOLL_STATE_READ_READY; + } if (0 != (events[i].events & EPOLLOUT)) + { ueh->celi |= MHD_EPOLL_STATE_WRITE_READY; + } if (0 != (events[i].events & EPOLLHUP)) + { ueh->celi |= MHD_EPOLL_STATE_READ_READY | MHD_EPOLL_STATE_WRITE_READY; + } if ( (0 == (ueh->celi & MHD_EPOLL_STATE_ERROR)) && (0 != (events[i].events & (EPOLLERR | EPOLLPRI))) ) { - /* Process new error state only one time - * and avoid continuously marking this connection - * as 'ready'. */ + /* Process new error state only one time and avoid continuously + * marking this connection as 'ready'. */ ueh->celi |= MHD_EPOLL_STATE_ERROR; new_err_state = true; } - if (! urh->in_eready_list) { if (new_err_state || @@ -4447,7 +4456,7 @@ MHD_epoll (struct MHD_Daemon *daemon, if (MHD_NO != may_block) { if (MHD_NO != MHD_get_timeout (daemon, - &timeout_ll)) + &timeout_ll)) { if (timeout_ll >= (MHD_UNSIGNED_LONG_LONG) INT_MAX) timeout_ms = INT_MAX; @@ -5406,10 +5415,10 @@ parse_options_va (struct MHD_Daemon *daemon, case MHD_OPTION_CONNECTION_MEMORY_INCREMENT: case MHD_OPTION_THREAD_STACK_SIZE: if (MHD_NO == parse_options (daemon, - servaddr, - opt, - (size_t) oa[i].value, - MHD_OPTION_END)) + servaddr, + opt, + (size_t) oa[i].value, + MHD_OPTION_END)) return MHD_NO; break; /* all options taking 'unsigned int' */ @@ -5423,39 +5432,39 @@ parse_options_va (struct MHD_Daemon *daemon, case MHD_OPTION_LISTEN_BACKLOG_SIZE: case MHD_OPTION_SERVER_INSANITY: if (MHD_NO == parse_options (daemon, - servaddr, - opt, - (unsigned int) oa[i].value, - MHD_OPTION_END)) + servaddr, + opt, + (unsigned int) oa[i].value, + MHD_OPTION_END)) return MHD_NO; break; /* all options taking 'enum' */ #ifdef HTTPS_SUPPORT case MHD_OPTION_HTTPS_CRED_TYPE: if (MHD_NO == parse_options (daemon, - servaddr, - opt, - (gnutls_credentials_type_t) oa[i].value, - MHD_OPTION_END)) + servaddr, + opt, + (gnutls_credentials_type_t) oa[i].value, + MHD_OPTION_END)) return MHD_NO; break; #endif /* HTTPS_SUPPORT */ /* all options taking 'MHD_socket' */ case MHD_OPTION_LISTEN_SOCKET: if (MHD_NO == parse_options (daemon, - servaddr, - opt, - (MHD_socket) oa[i].value, - MHD_OPTION_END)) + servaddr, + opt, + (MHD_socket) oa[i].value, + MHD_OPTION_END)) return MHD_NO; break; /* all options taking 'int' */ case MHD_OPTION_STRICT_FOR_CLIENT: if (MHD_NO == parse_options (daemon, - servaddr, - opt, - (int) oa[i].value, - MHD_OPTION_END)) + servaddr, + opt, + (int) oa[i].value, + MHD_OPTION_END)) return MHD_NO; break; /* all options taking one pointer */ @@ -5470,10 +5479,10 @@ parse_options_va (struct MHD_Daemon *daemon, case MHD_OPTION_HTTPS_CERT_CALLBACK: case MHD_OPTION_HTTPS_CERT_CALLBACK2: if (MHD_NO == parse_options (daemon, - servaddr, - opt, - oa[i].ptr_value, - MHD_OPTION_END)) + servaddr, + opt, + oa[i].ptr_value, + MHD_OPTION_END)) return MHD_NO; break; /* all options taking two pointers */ @@ -5484,21 +5493,21 @@ parse_options_va (struct MHD_Daemon *daemon, case MHD_OPTION_UNESCAPE_CALLBACK: case MHD_OPTION_GNUTLS_PSK_CRED_HANDLER: if (MHD_NO == parse_options (daemon, - servaddr, - opt, - (void *) oa[i].value, - oa[i].ptr_value, - MHD_OPTION_END)) + servaddr, + opt, + (void *) oa[i].value, + oa[i].ptr_value, + MHD_OPTION_END)) return MHD_NO; break; /* options taking size_t-number followed by pointer */ case MHD_OPTION_DIGEST_AUTH_RANDOM: if (MHD_NO == parse_options (daemon, - servaddr, - opt, - (size_t) oa[i].value, - oa[i].ptr_value, - MHD_OPTION_END)) + servaddr, + opt, + (size_t) oa[i].value, + oa[i].ptr_value, + MHD_OPTION_END)) return MHD_NO; break; default: @@ -5761,7 +5770,7 @@ MHD_start_daemon_va (unsigned int flags, #ifdef HAVE_POLL *pflags |= MHD_USE_POLL; #else /* ! HAVE_POLL */ - /* use select() - do not modify flags */ + /* use select() - do not modify flags */ #endif /* ! HAVE_POLL */ } else if (0 != (*pflags & MHD_USE_INTERNAL_POLLING_THREAD)) @@ -5772,7 +5781,7 @@ MHD_start_daemon_va (unsigned int flags, #elif defined(HAVE_POLL) *pflags |= MHD_USE_POLL; #else /* !HAVE_POLL && !EPOLL_SUPPORT */ - /* use select() - do not modify flags */ + /* use select() - do not modify flags */ #endif /* !HAVE_POLL && !EPOLL_SUPPORT */ } else @@ -5781,7 +5790,7 @@ MHD_start_daemon_va (unsigned int flags, #if defined(EPOLL_SUPPORT) *pflags |= MHD_USE_EPOLL; #else /* ! EPOLL_SUPPORT */ - /* use select() - do not modify flags */ + /* use select() - do not modify flags */ #endif /* ! EPOLL_SUPPORT */ } } @@ -5866,8 +5875,8 @@ MHD_start_daemon_va (unsigned int flags, if (MHD_NO == parse_options_va (daemon, - &servaddr, - ap)) + &servaddr, + ap)) { #ifdef HTTPS_SUPPORT if ( (0 != (*pflags & MHD_USE_TLS)) && @@ -6057,11 +6066,11 @@ MHD_start_daemon_va (unsigned int flags, #endif } #endif /* ! MHD_WINSOCK_SOCKETS */ - /* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms. - * Fail if SO_REUSEPORT is not defined or setsockopt fails. - */ - /* SO_REUSEADDR on W32 has the same semantics - as SO_REUSEPORT on BSD/Linux */ + /* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms. + * Fail if SO_REUSEPORT is not defined or setsockopt fails. + */ + /* SO_REUSEADDR on W32 has the same semantics + as SO_REUSEPORT on BSD/Linux */ #if defined(MHD_WINSOCK_SOCKETS) || defined(SO_REUSEPORT) if (0 > setsockopt (listen_fd, SOL_SOCKET, @@ -6081,8 +6090,8 @@ MHD_start_daemon_va (unsigned int flags, goto free_and_fail; } #else /* !MHD_WINSOCK_SOCKETS && !SO_REUSEPORT */ - /* we're supposed to allow address:port re-use, but - on this platform we cannot; fail hard */ + /* we're supposed to allow address:port re-use, but + on this platform we cannot; fail hard */ #ifdef HAVE_MESSAGES MHD_DLOG (daemon, _ ( diff --git a/src/microhttpd/digestauth.c b/src/microhttpd/digestauth.c @@ -604,9 +604,9 @@ check_nonce_nc (struct MHD_Connection *connection, } /* Nonce is larger, shift bitmask and bump limit */ if (64 > nc - nn->nc) - nn->nmask <<= (nc - nn->nc); /* small jump, less than mask width */ + nn->nmask <<= (nc - nn->nc); /* small jump, less than mask width */ else - nn->nmask = 0; /* big jump, unset all bits in the mask */ + nn->nmask = 0; /* big jump, unset all bits in the mask */ nn->nc = nc; #if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS) MHD_mutex_unlock_chk_ (&daemon->nnc_lock); diff --git a/src/microhttpd/internal.c b/src/microhttpd/internal.c @@ -214,11 +214,11 @@ MHD_parse_arguments_ (struct MHD_Connection *connection, connection, args); if (MHD_NO == cb (connection, - args, - key_len, - NULL, - 0, - kind)) + args, + key_len, + NULL, + 0, + kind)) return MHD_NO; (*num_headers)++; break; @@ -235,11 +235,11 @@ MHD_parse_arguments_ (struct MHD_Connection *connection, connection, equals); if (MHD_NO == cb (connection, - args, - key_len, - equals, - value_len, - kind)) + args, + key_len, + equals, + value_len, + kind)) return MHD_NO; (*num_headers)++; break; @@ -256,11 +256,11 @@ MHD_parse_arguments_ (struct MHD_Connection *connection, connection, args); if (MHD_NO == cb (connection, - args, - key_len, - NULL, - 0, - kind)) + args, + key_len, + NULL, + 0, + kind)) return MHD_NO; /* continue with 'bar' */ (*num_headers)++; @@ -280,11 +280,11 @@ MHD_parse_arguments_ (struct MHD_Connection *connection, connection, equals); if (MHD_NO == cb (connection, - args, - key_len, - equals, - value_len, - kind)) + args, + key_len, + equals, + value_len, + kind)) return MHD_NO; (*num_headers)++; args = amper; diff --git a/src/microhttpd/internal.h b/src/microhttpd/internal.h @@ -96,7 +96,7 @@ MHD_PANIC (_ ("Failed to close FD.\n")); \ } while (0) -/* +/* #define EXTRA_CHECKS _MHD_MACRO_NO * Not used. Behaviour is controlled by _DEBUG/NDEBUG macros. */ diff --git a/src/microhttpd/md5.h b/src/microhttpd/md5.h @@ -28,7 +28,7 @@ struct MD5Context { - uint32_t state[4]; /* state */ + uint32_t state[4]; /* state */ uint64_t count; /* number of bytes, mod 2^64 */ uint8_t buffer[MD5_BLOCK_SIZE]; /* input buffer */ }; diff --git a/src/microhttpd/memorypool.c b/src/microhttpd/memorypool.c @@ -336,10 +336,10 @@ MHD_pool_reallocate (struct MemoryPool *pool, { /* "old" block is the last allocated block */ const size_t new_apos = ROUND_TO_ALIGN (old_offset + new_size); if (! shrinking) - { /* Grow in-place, check for enough space. */ + { /* Grow in-place, check for enough space. */ if ( (new_apos > pool->end) || - (new_apos < pool->pos) ) /* Value wrap */ - return NULL; /* No space */ + (new_apos < pool->pos) ) /* Value wrap */ + return NULL; /* No space */ } /* Resized in-place */ pool->pos = new_apos; diff --git a/src/microhttpd/mhd_mono_clock.c b/src/microhttpd/mhd_mono_clock.c @@ -254,8 +254,8 @@ MHD_monotonic_sec_counter_init (void) LARGE_INTEGER freq; LARGE_INTEGER perf_counter; - QueryPerformanceFrequency (&freq); /* never fail on XP and later */ - QueryPerformanceCounter (&perf_counter); /* never fail on XP and later */ + QueryPerformanceFrequency (&freq); /* never fail on XP and later */ + QueryPerformanceCounter (&perf_counter); /* never fail on XP and later */ perf_freq = freq.QuadPart; perf_start = perf_counter.QuadPart; mono_clock_source = _MHD_CLOCK_PERFCOUNTER; diff --git a/src/microhttpd/mhd_send.c b/src/microhttpd/mhd_send.c @@ -405,7 +405,11 @@ MHD_send_on_connection2_ (struct MHD_Connection *connection, (0 == buffer_size) && connection->sk_cork_on) { - (void) gnutls_record_uncork (connection->tls_session, 0); + int err; + + err = gnutls_record_uncork (connection->tls_session, 0); + if (0 > err) + return ret; connection->sk_cork_on = false; } return ret; @@ -434,6 +438,9 @@ MHD_send_on_connection2_ (struct MHD_Connection *connection, msg.msg_iovlen = 2; ret = sendmsg (s, &msg, MAYBE_MSG_NOSIGNAL); + if ( (-1 == ret) && + (EAGAIN == errno) ) + return MHD_ERR_AGAIN_; } #elif HAVE_WRITEV { @@ -441,6 +448,9 @@ MHD_send_on_connection2_ (struct MHD_Connection *connection, iovcnt = sizeof (vector) / sizeof (struct iovec); ret = writev (s, vector, iovcnt); + if ( (-1 == ret) && + (EAGAIN == errno) ) + return MHD_ERR_AGAIN_; } #endif diff --git a/src/microhttpd/mhd_threads.c b/src/microhttpd/mhd_threads.c @@ -49,7 +49,8 @@ #if defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) || \ defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI) # define MHD_USE_THREAD_ATTR_SETNAME 1 -#endif /* HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD || HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI */ +#endif \ + /* HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD || HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI */ #if defined(HAVE_PTHREAD_SETNAME_NP_GNU) || \ defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) \ diff --git a/src/microhttpd/postprocessor.c b/src/microhttpd/postprocessor.c @@ -801,13 +801,13 @@ find_boundary (struct MHD_PostProcessor *pp, '-', pp->buffer_pos); if (NULL == dash) - (*ioffptr) += pp->buffer_pos; /* skip entire buffer */ + (*ioffptr) += pp->buffer_pos; /* skip entire buffer */ else if (dash == buf) - (*ioffptr)++; /* at least skip one byte */ + (*ioffptr)++; /* at least skip one byte */ else - (*ioffptr) += dash - buf; /* skip to first possible boundary */ + (*ioffptr) += dash - buf; /* skip to first possible boundary */ } - return MHD_NO; /* expected boundary */ + return MHD_NO; /* expected boundary */ } /* remove boundary from buffer */ (*ioffptr) += 2 + blen; diff --git a/src/microhttpd/response.c b/src/microhttpd/response.c @@ -263,9 +263,9 @@ MHD_get_response_headers (struct MHD_Response *response, numHeaders++; if ((NULL != iterator) && (MHD_NO == iterator (iterator_cls, - pos->kind, - pos->header, - pos->value))) + pos->kind, + pos->header, + pos->value))) break; } return numHeaders; @@ -919,7 +919,11 @@ MHD_upgrade_action (struct MHD_UpgradeResponseHandle *urh, #ifdef HTTPS_SUPPORT if (0 != (daemon->options & MHD_USE_TLS) ) { - gnutls_record_uncork (connection->tls_session, 0); + int err; + + err = gnutls_record_uncork (connection->tls_session, 0); + if (0 > err) + return MHD_NO; connection->sk_cork_on = false; return MHD_YES; } diff --git a/src/microhttpd/sha256.h b/src/microhttpd/sha256.h @@ -55,7 +55,7 @@ struct sha256_ctx { uint32_t H[_SHA256_DIGEST_LENGTH]; /**< Intermediate hash value / digest at end of calculation */ uint64_t count; /**< number of bytes, mod 2^64 */ - uint8_t buffer[SHA256_BLOCK_SIZE]; /**< SHA256 input data buffer */ + uint8_t buffer[SHA256_BLOCK_SIZE]; /**< SHA256 input data buffer */ }; /** diff --git a/src/microhttpd/test_daemon.c b/src/microhttpd/test_daemon.c @@ -83,9 +83,9 @@ ahc_nothing (void *cls, const char *upload_data, size_t *upload_data_size, void **unused) { - (void) cls; (void) connection; (void) url; /* Unused. Silent compiler warning. */ - (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */ - (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */ + (void) cls; (void) connection; (void) url; /* Unused. Silent compiler warning. */ + (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */ + (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */ return MHD_NO; } diff --git a/src/microhttpd/test_postprocessor_large.c b/src/microhttpd/test_postprocessor_large.c @@ -43,7 +43,7 @@ value_checker (void *cls, const char *data, uint64_t off, size_t size) { unsigned int *pos = cls; - (void) kind; (void) key; (void) filename; (void) content_type; /* Unused. Silent compiler warning. */ + (void) kind; (void) key; (void) filename; (void) content_type; /* Unused. Silent compiler warning. */ (void) transfer_encoding; (void) data; (void) off; /* Unused. Silent compiler warning. */ #if 0 fprintf (stderr, diff --git a/src/microhttpd/test_start_stop.c b/src/microhttpd/test_start_stop.c @@ -44,9 +44,9 @@ ahc_echo (void *cls, const char *upload_data, size_t *upload_data_size, void **unused) { - (void) cls; (void) connection; (void) url; /* Unused. Silent compiler warning. */ - (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */ - (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */ + (void) cls; (void) connection; (void) url; /* Unused. Silent compiler warning. */ + (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */ + (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */ return MHD_NO; } diff --git a/src/microhttpd/test_str.c b/src/microhttpd/test_str.c @@ -50,9 +50,9 @@ static const char *const locale_names[] = { "C", "", /* System default locale */ #if defined(_WIN32) && ! defined(__CYGWIN__) - ".OCP", /* W32 system default OEM code page */ - ".ACP", /* W32 system default ANSI code page */ - ".65001", /* UTF-8 */ + ".OCP", /* W32 system default OEM code page */ + ".ACP", /* W32 system default ANSI code page */ + ".65001", /* UTF-8 */ ".437", ".850", ".857", @@ -455,50 +455,50 @@ static const struct two_neq_strs neq_strings[] = { {D_STR_W_LEN ("zyxwvutsrqponwMLKJIHGFEDCBA"), D_STR_W_LEN ( "ZYXWVUTSRQPON%mlkjihgfedcba"), 13}, - {D_STR_W_LEN ("S\xbdur veulent plus d'\xbdufs."), /* "Sœur veulent plus d'œufs." in ISO-8859-15 */ + {D_STR_W_LEN ("S\xbdur veulent plus d'\xbdufs."), /* "Sœur veulent plus d'œufs." in ISO-8859-15 */ D_STR_W_LEN ("S\xbcUR VEULENT PLUS D'\xbcUFS."), 1}, /* "SŒUR VEULENT PLUS D'ŒUFS." in ISO-8859-15 */ - {D_STR_W_LEN ("S\x9cur veulent plus d'\x9cufs."), /* "Sœur veulent plus d'œufs." in CP1252 */ + {D_STR_W_LEN ("S\x9cur veulent plus d'\x9cufs."), /* "Sœur veulent plus d'œufs." in CP1252 */ D_STR_W_LEN ("S\x8cUR VEULENT PLUS D'\x8cUFS."), 1}, /* "SŒUR VEULENT PLUS D'ŒUFS." in CP1252 */ - {D_STR_W_LEN ("S\xc5\x93ur veulent plus d'\xc5\x93ufs."), /* "Sœur veulent plus d'œufs." in UTF-8 */ + {D_STR_W_LEN ("S\xc5\x93ur veulent plus d'\xc5\x93ufs."), /* "Sœur veulent plus d'œufs." in UTF-8 */ D_STR_W_LEN ("S\xc5\x92UR VEULENT PLUS D'\xc5\x92UFS."), 2}, /* "SŒUR VEULENT PLUS D'ŒUFS." in UTF-8 */ - {D_STR_W_LEN ("Um ein sch\x94nes M\x84" "dchen zu k\x81ssen."), /* "Um ein schönes Mädchen zu küssen." in CP850 */ + {D_STR_W_LEN ("Um ein sch\x94nes M\x84" "dchen zu k\x81ssen."), /* "Um ein schönes Mädchen zu küssen." in CP850 */ D_STR_W_LEN ("UM EIN SCH\x99NES M\x8e" "DCHEN ZU K\x9aSSEN."), 10}, /* "UM EIN SCHÖNES MÄDCHEN ZU KÜSSEN." in CP850 */ - {D_STR_W_LEN ("Um ein sch\xf6nes M\xe4" "dchen zu k\xfcssen."), /* "Um ein schönes Mädchen zu küssen." in ISO-8859-1/ISO-8859-15/CP1250/CP1252 */ + {D_STR_W_LEN ("Um ein sch\xf6nes M\xe4" "dchen zu k\xfcssen."), /* "Um ein schönes Mädchen zu küssen." in ISO-8859-1/ISO-8859-15/CP1250/CP1252 */ D_STR_W_LEN ("UM EIN SCH\xd6NES M\xc4" "DCHEN ZU K\xdcSSEN."), 10}, /* "UM EIN SCHÖNES MÄDCHEN ZU KÜSSEN." in ISO-8859-1/ISO-8859-15/CP1250/CP1252 */ - {D_STR_W_LEN ("Um ein sch\xc3\xb6nes M\xc3\xa4" "dchen zu k\xc3\xbcssen."), /* "Um ein schönes Mädchen zu küssen." in UTF-8 */ + {D_STR_W_LEN ("Um ein sch\xc3\xb6nes M\xc3\xa4" "dchen zu k\xc3\xbcssen."), /* "Um ein schönes Mädchen zu küssen." in UTF-8 */ D_STR_W_LEN ("UM EIN SCH\xc3\x96NES M\xc3\x84" "DCHEN ZU K\xc3\x9cSSEN."), - 11}, /* "UM EIN SCHÖNES MÄDCHEN ZU KÜSSEN." in UTF-8 */ - - {D_STR_W_LEN ("\x98stanbul"), /* "İstanbul" in CP857 */ - D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in CP857 */ - {D_STR_W_LEN ("\xddstanbul"), /* "İstanbul" in ISO-8859-9/CP1254 */ - D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in ISO-8859-9/CP1254 */ - {D_STR_W_LEN ("\xc4\xb0stanbul"), /* "İstanbul" in UTF-8 */ - D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in UTF-8 */ - {D_STR_W_LEN ("Diyarbak\x8dr"), /* "Diyarbakır" in CP857 */ - D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in CP857 */ - {D_STR_W_LEN ("Diyarbak\xfdr"), /* "Diyarbakır" in ISO-8859-9/CP1254 */ - D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in ISO-8859-9/CP1254 */ - {D_STR_W_LEN ("Diyarbak\xc4\xb1r"), /* "Diyarbakır" in UTF-8 */ - D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in UTF-8 */ - - {D_STR_W_LEN ("\x92\xa5\xe1\xe2\xae\xa2\xa0\xef \x91\xe2\xe0\xae\xaa\xa0."), /* "Тестовая Строка." in CP866 */ + 11}, /* "UM EIN SCHÖNES MÄDCHEN ZU KÜSSEN." in UTF-8 */ + + {D_STR_W_LEN ("\x98stanbul"), /* "İstanbul" in CP857 */ + D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in CP857 */ + {D_STR_W_LEN ("\xddstanbul"), /* "İstanbul" in ISO-8859-9/CP1254 */ + D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in ISO-8859-9/CP1254 */ + {D_STR_W_LEN ("\xc4\xb0stanbul"), /* "İstanbul" in UTF-8 */ + D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in UTF-8 */ + {D_STR_W_LEN ("Diyarbak\x8dr"), /* "Diyarbakır" in CP857 */ + D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in CP857 */ + {D_STR_W_LEN ("Diyarbak\xfdr"), /* "Diyarbakır" in ISO-8859-9/CP1254 */ + D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in ISO-8859-9/CP1254 */ + {D_STR_W_LEN ("Diyarbak\xc4\xb1r"), /* "Diyarbakır" in UTF-8 */ + D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in UTF-8 */ + + {D_STR_W_LEN ("\x92\xa5\xe1\xe2\xae\xa2\xa0\xef \x91\xe2\xe0\xae\xaa\xa0."), /* "Тестовая Строка." in CP866 */ D_STR_W_LEN ("\x92\x85\x91\x92\x8e\x82\x80\x9f \x91\x92\x90\x8e\x8a\x80."), - 1}, /* "ТЕСТОВАЯ СТРОКА." in CP866 */ - {D_STR_W_LEN ("\xd2\xe5\xf1\xf2\xee\xe2\xe0\xff \xd1\xf2\xf0\xee\xea\xe0."), /* "Тестовая Строка." in CP1251 */ + 1}, /* "ТЕСТОВАЯ СТРОКА." in CP866 */ + {D_STR_W_LEN ("\xd2\xe5\xf1\xf2\xee\xe2\xe0\xff \xd1\xf2\xf0\xee\xea\xe0."), /* "Тестовая Строка." in CP1251 */ D_STR_W_LEN ("\xd2\xc5\xd1\xd2\xce\xc2\xc0\xdf \xd1\xd2\xd0\xce\xca\xc0."), - 1}, /* "ТЕСТОВАЯ СТРОКА." in CP1251 */ - {D_STR_W_LEN ("\xf4\xc5\xd3\xd4\xcf\xd7\xc1\xd1 \xf3\xd4\xd2\xcf\xcb\xc1."), /* "Тестовая Строка." in KOI8-R */ + 1}, /* "ТЕСТОВАЯ СТРОКА." in CP1251 */ + {D_STR_W_LEN ("\xf4\xc5\xd3\xd4\xcf\xd7\xc1\xd1 \xf3\xd4\xd2\xcf\xcb\xc1."), /* "Тестовая Строка." in KOI8-R */ D_STR_W_LEN ("\xf4\xe5\xf3\xf4\xef\xf7\xe1\xf1 \xf3\xf4\xf2\xef\xeb\xe1."), - 1}, /* "ТЕСТОВАЯ СТРОКА." in KOI8-R */ - {D_STR_W_LEN ("\xc2\xd5\xe1\xe2\xde\xd2\xd0\xef \xc1\xe2\xe0\xde\xda\xd0."), /* "Тестовая Строка." in ISO-8859-5 */ + 1}, /* "ТЕСТОВАЯ СТРОКА." in KOI8-R */ + {D_STR_W_LEN ("\xc2\xd5\xe1\xe2\xde\xd2\xd0\xef \xc1\xe2\xe0\xde\xda\xd0."), /* "Тестовая Строка." in ISO-8859-5 */ D_STR_W_LEN ("\xc2\xb5\xc1\xc2\xbe\xb2\xb0\xcf \xc1\xc2\xc0\xbe\xba\xb0."), - 1}, /* "ТЕСТОВАЯ СТРОКА." in ISO-8859-5 */ + 1}, /* "ТЕСТОВАЯ СТРОКА." in ISO-8859-5 */ {D_STR_W_LEN ("\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82\xd0\xbe\xd0\xb2\xd0\xb0\xd1" - "\x8f \xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0."), /* "Тестовая Строка." in UTF-8 */ + "\x8f \xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0."), /* "Тестовая Строка." in UTF-8 */ D_STR_W_LEN ("\xd0\xa2\xd0\x95\xd0\xa1\xd0\xa2\xd0\x9e\xd0\x92\xd0\x90\xd0" - "\xaf \xd0\xa1\xd0\xa2\xd0\xa0\xd0\x9e\xd0\x9a\xd0\x90."), 3} /* "ТЕСТОВАЯ СТРОКА." in UTF-8 */ + "\xaf \xd0\xa1\xd0\xa2\xd0\xa0\xd0\x9e\xd0\x9a\xd0\x90."), 3} /* "ТЕСТОВАЯ СТРОКА." in UTF-8 */ }; @@ -900,15 +900,15 @@ static const struct str_with_value dstrs_w_values[] = { {D_STR_W_LEN ("00000000000000000000000031295483"), 32, 31295483}, /* numbers below and above limits */ - {D_STR_W_LEN ("127"), 3, 127}, /* 0x7F, SCHAR_MAX */ - {D_STR_W_LEN ("128"), 3, 128}, /* 0x80, SCHAR_MAX+1 */ - {D_STR_W_LEN ("255"), 3, 255}, /* 0xFF, UCHAR_MAX */ - {D_STR_W_LEN ("256"), 3, 256}, /* 0x100, UCHAR_MAX+1 */ - {D_STR_W_LEN ("32767"), 5, 32767}, /* 0x7FFF, INT16_MAX */ - {D_STR_W_LEN ("32768"), 5, 32768}, /* 0x8000, INT16_MAX+1 */ - {D_STR_W_LEN ("65535"), 5, 65535}, /* 0xFFFF, UINT16_MAX */ - {D_STR_W_LEN ("65536"), 5, 65536}, /* 0x10000, UINT16_MAX+1 */ - {D_STR_W_LEN ("2147483647"), 10, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */ + {D_STR_W_LEN ("127"), 3, 127}, /* 0x7F, SCHAR_MAX */ + {D_STR_W_LEN ("128"), 3, 128}, /* 0x80, SCHAR_MAX+1 */ + {D_STR_W_LEN ("255"), 3, 255}, /* 0xFF, UCHAR_MAX */ + {D_STR_W_LEN ("256"), 3, 256}, /* 0x100, UCHAR_MAX+1 */ + {D_STR_W_LEN ("32767"), 5, 32767}, /* 0x7FFF, INT16_MAX */ + {D_STR_W_LEN ("32768"), 5, 32768}, /* 0x8000, INT16_MAX+1 */ + {D_STR_W_LEN ("65535"), 5, 65535}, /* 0xFFFF, UINT16_MAX */ + {D_STR_W_LEN ("65536"), 5, 65536}, /* 0x10000, UINT16_MAX+1 */ + {D_STR_W_LEN ("2147483647"), 10, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */ {D_STR_W_LEN ("2147483648"), 10, UINT64_C (2147483648)}, /* 0x80000000, INT32_MAX+1 */ {D_STR_W_LEN ("4294967295"), 10, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */ {D_STR_W_LEN ("4294967296"), 10, UINT64_C (4294967296)}, /* 0x100000000, UINT32_MAX+1 */ @@ -968,14 +968,14 @@ const struct str_with_len str_ovflw[] = { const struct str_with_len str_no_num[] = { D_STR_W_LEN ("zero"), D_STR_W_LEN ("one"), - D_STR_W_LEN ("\xb9\xb2\xb3"), /* superscript "123" in ISO-8859-1/CP1252 */ - D_STR_W_LEN ("\xc2\xb9\xc2\xb2\xc2\xb3"), /* superscript "123" in UTF-8 */ - D_STR_W_LEN ("\xd9\xa1\xd9\xa2\xd9\xa3"), /* Arabic-Indic "١٢٣" in UTF-8 */ - D_STR_W_LEN ("\xdb\xb1\xdb\xb2\xdb\xb3"), /* Ext Arabic-Indic "۱۲۳" in UTF-8 */ - D_STR_W_LEN ("\xe0\xa5\xa7\xe0\xa5\xa8\xe0\xa5\xa9"), /* Devanagari "१२३" in UTF-8 */ - D_STR_W_LEN ("\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89"), /* Chinese "一二三" in UTF-8 */ - D_STR_W_LEN ("\xd2\xbb\xb6\xfe\xc8\xfd"), /* Chinese "一二三" in GB2312/CP936 */ - D_STR_W_LEN ("\x1B\x24\x29\x41\x0E\x52\x3B\x36\x7E\x48\x7D\x0F") /* Chinese "一二三" in ISO-2022-CN */ + D_STR_W_LEN ("\xb9\xb2\xb3"), /* superscript "123" in ISO-8859-1/CP1252 */ + D_STR_W_LEN ("\xc2\xb9\xc2\xb2\xc2\xb3"), /* superscript "123" in UTF-8 */ + D_STR_W_LEN ("\xd9\xa1\xd9\xa2\xd9\xa3"), /* Arabic-Indic "١٢٣" in UTF-8 */ + D_STR_W_LEN ("\xdb\xb1\xdb\xb2\xdb\xb3"), /* Ext Arabic-Indic "۱۲۳" in UTF-8 */ + D_STR_W_LEN ("\xe0\xa5\xa7\xe0\xa5\xa8\xe0\xa5\xa9"), /* Devanagari "१२३" in UTF-8 */ + D_STR_W_LEN ("\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89"), /* Chinese "一二三" in UTF-8 */ + D_STR_W_LEN ("\xd2\xbb\xb6\xfe\xc8\xfd"), /* Chinese "一二三" in GB2312/CP936 */ + D_STR_W_LEN ("\x1B\x24\x29\x41\x0E\x52\x3B\x36\x7E\x48\x7D\x0F") /* Chinese "一二三" in ISO-2022-CN */ }; /* valid hex string for conversion to unsigned integer value */ @@ -1013,25 +1013,25 @@ static const struct str_with_value xdstrs_w_values[] = { {D_STR_W_LEN ("0000000000000000000000003A29e4C3"), 32, 0x3A29E4C3}, /* numbers below and above limits */ - {D_STR_W_LEN ("7F"), 2, 127}, /* 0x7F, SCHAR_MAX */ - {D_STR_W_LEN ("7f"), 2, 127}, /* 0x7F, SCHAR_MAX */ - {D_STR_W_LEN ("80"), 2, 128}, /* 0x80, SCHAR_MAX+1 */ - {D_STR_W_LEN ("fF"), 2, 255}, /* 0xFF, UCHAR_MAX */ - {D_STR_W_LEN ("Ff"), 2, 255}, /* 0xFF, UCHAR_MAX */ - {D_STR_W_LEN ("FF"), 2, 255}, /* 0xFF, UCHAR_MAX */ - {D_STR_W_LEN ("ff"), 2, 255}, /* 0xFF, UCHAR_MAX */ - {D_STR_W_LEN ("100"), 3, 256}, /* 0x100, UCHAR_MAX+1 */ - {D_STR_W_LEN ("7fff"), 4, 32767}, /* 0x7FFF, INT16_MAX */ - {D_STR_W_LEN ("7FFF"), 4, 32767}, /* 0x7FFF, INT16_MAX */ - {D_STR_W_LEN ("7Fff"), 4, 32767}, /* 0x7FFF, INT16_MAX */ - {D_STR_W_LEN ("8000"), 4, 32768}, /* 0x8000, INT16_MAX+1 */ - {D_STR_W_LEN ("ffff"), 4, 65535}, /* 0xFFFF, UINT16_MAX */ - {D_STR_W_LEN ("FFFF"), 4, 65535}, /* 0xFFFF, UINT16_MAX */ - {D_STR_W_LEN ("FffF"), 4, 65535}, /* 0xFFFF, UINT16_MAX */ - {D_STR_W_LEN ("10000"), 5, 65536}, /* 0x10000, UINT16_MAX+1 */ - {D_STR_W_LEN ("7FFFFFFF"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */ - {D_STR_W_LEN ("7fffffff"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */ - {D_STR_W_LEN ("7FFffFff"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */ + {D_STR_W_LEN ("7F"), 2, 127}, /* 0x7F, SCHAR_MAX */ + {D_STR_W_LEN ("7f"), 2, 127}, /* 0x7F, SCHAR_MAX */ + {D_STR_W_LEN ("80"), 2, 128}, /* 0x80, SCHAR_MAX+1 */ + {D_STR_W_LEN ("fF"), 2, 255}, /* 0xFF, UCHAR_MAX */ + {D_STR_W_LEN ("Ff"), 2, 255}, /* 0xFF, UCHAR_MAX */ + {D_STR_W_LEN ("FF"), 2, 255}, /* 0xFF, UCHAR_MAX */ + {D_STR_W_LEN ("ff"), 2, 255}, /* 0xFF, UCHAR_MAX */ + {D_STR_W_LEN ("100"), 3, 256}, /* 0x100, UCHAR_MAX+1 */ + {D_STR_W_LEN ("7fff"), 4, 32767}, /* 0x7FFF, INT16_MAX */ + {D_STR_W_LEN ("7FFF"), 4, 32767}, /* 0x7FFF, INT16_MAX */ + {D_STR_W_LEN ("7Fff"), 4, 32767}, /* 0x7FFF, INT16_MAX */ + {D_STR_W_LEN ("8000"), 4, 32768}, /* 0x8000, INT16_MAX+1 */ + {D_STR_W_LEN ("ffff"), 4, 65535}, /* 0xFFFF, UINT16_MAX */ + {D_STR_W_LEN ("FFFF"), 4, 65535}, /* 0xFFFF, UINT16_MAX */ + {D_STR_W_LEN ("FffF"), 4, 65535}, /* 0xFFFF, UINT16_MAX */ + {D_STR_W_LEN ("10000"), 5, 65536}, /* 0x10000, UINT16_MAX+1 */ + {D_STR_W_LEN ("7FFFFFFF"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */ + {D_STR_W_LEN ("7fffffff"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */ + {D_STR_W_LEN ("7FFffFff"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */ {D_STR_W_LEN ("80000000"), 8, UINT64_C (2147483648)}, /* 0x80000000, INT32_MAX+1 */ {D_STR_W_LEN ("FFFFFFFF"), 8, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */ {D_STR_W_LEN ("ffffffff"), 8, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */ @@ -1124,8 +1124,8 @@ const struct str_with_len strx_ovflw[] = { D_STR_W_LEN ("434532891232591226417"), D_STR_W_LEN ("10000000000000000a"), D_STR_W_LEN ("10000000000000000E"), - D_STR_W_LEN ("100000000000000000 and nothing"), /* 0x10000000000000000, UINT64_MAX+1 */ - D_STR_W_LEN ("100000000000000000xx"), /* 0x10000000000000000, UINT64_MAX+1 */ + D_STR_W_LEN ("100000000000000000 and nothing"), /* 0x10000000000000000, UINT64_MAX+1 */ + D_STR_W_LEN ("100000000000000000xx"), /* 0x10000000000000000, UINT64_MAX+1 */ D_STR_W_LEN ("99999999999999999999"), D_STR_W_LEN ("18446744073709551616abcd"), D_STR_W_LEN ("20000000000000000000 suffix"), diff --git a/src/microhttpd/test_upgrade_large.c b/src/microhttpd/test_upgrade_large.c @@ -53,10 +53,164 @@ #include "test_helpers.h" #define LARGE_STRING \ - "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelXloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \ + "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello\n" + #define LARGE_REPLY_STRING \ - "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \ + "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld\n" #ifdef HTTPS_SUPPORT #include <gnutls/gnutls.h> @@ -338,6 +492,7 @@ wr_handshake (struct wr_socket *s) /** * Send data to remote by socket. + * * @param s the socket to use * @param buf the buffer with data to send * @param len the length of data in @a buf @@ -351,15 +506,24 @@ wr_send (struct wr_socket *s, size_t len) { if (wr_plain == s->t) - return MHD_send_ (s->fd, buf, len); + { + ssize_t ret; + + ret = MHD_send_ (s->fd, buf, len); + (void) MHD_socket_cork_ (s->fd, + false); + return ret; + } #ifdef HTTPS_SUPPORT if (wr_tls == s->t) { ssize_t ret; + if (! s->tls_connected && ! wr_handshake (s)) return -1; - - ret = gnutls_record_send (s->tls_s, buf, len); + ret = gnutls_record_send (s->tls_s, + buf, + len); if (ret > 0) return ret; if (GNUTLS_E_AGAIN == ret) @@ -591,7 +755,7 @@ kick_select () { if (MHD_ITC_IS_VALID_ (kicker)) { - MHD_itc_activate_ (kicker, "K"); + (void) MHD_itc_activate_ (kicker, "K"); } } @@ -698,6 +862,8 @@ recv_all (struct wr_socket *sock, } abort (); } + if (0 != strncmp (text, buf, off + ret)) + abort (); } if (0 != strncmp (text, buf, len)) abort (); @@ -715,8 +881,10 @@ run_usock (void *cls) { struct MHD_UpgradeResponseHandle *urh = cls; - MHD_upgrade_action (urh, - MHD_UPGRADE_ACTION_CORK_OFF); + if (MHD_YES != + MHD_upgrade_action (urh, + MHD_UPGRADE_ACTION_CORK_OFF)) + abort (); send_all (usock, LARGE_STRING); recv_all (usock, @@ -953,7 +1121,7 @@ run_mhd_select_loop (struct MHD_Daemon *daemon) &ws, &es); } - MHD_itc_destroy_ (kicker); + (void) MHD_itc_destroy_ (kicker); MHD_itc_set_invalid_ (kicker); } @@ -991,7 +1159,6 @@ run_mhd_epoll_loop (struct MHD_Daemon *daemon) MHD_UNSIGNED_LONG_LONG to; struct timeval tv; int ret; - char drain[128]; di = MHD_get_daemon_info (daemon, MHD_DAEMON_INFO_EPOLL_FD); @@ -1023,7 +1190,7 @@ run_mhd_epoll_loop (struct MHD_Daemon *daemon) MHD_itc_clear_ (kicker); MHD_run (daemon); } - MHD_itc_destroy_ (kicker); + (void) MHD_itc_destroy_ (kicker); MHD_itc_set_invalid_ (kicker); } @@ -1203,7 +1370,6 @@ main (int argc, if (has_param (argc, argv, "-q") || has_param (argc, argv, "--quiet")) verbose = 0; - if (test_tls) { #ifdef HTTPS_SUPPORT @@ -1247,7 +1413,6 @@ main (int argc, return 77; #endif /* ! HTTPS_SUPPORT */ } - /* run tests */ if (verbose) printf ("Starting HTTP \"Upgrade\" tests with %s connections.\n", @@ -1262,7 +1427,6 @@ main (int argc, res); else if (verbose) printf ("PASSED: Upgrade with external select.\n"); - /* Try external auto */ res = test_upgrade (MHD_USE_AUTO, 0); diff --git a/src/microhttpd/tsearch.c b/src/microhttpd/tsearch.c @@ -24,7 +24,7 @@ typedef struct node /* $NetBSD: tsearch.c,v 1.5 2005/11/29 03:12:00 christos Exp $ */ /* find or insert datum into search tree */ void * -tsearch (const void *vkey, /* key to be located */ +tsearch (const void *vkey, /* key to be located */ void **vrootp, /* address of tree root */ int (*compar)(const void *, const void *)) { @@ -38,19 +38,19 @@ tsearch (const void *vkey, /* key to be located */ { /* Knuth's T1: */ int r; - if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */ - return *rootp; /* we found it! */ + if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */ + return *rootp; /* we found it! */ rootp = (r < 0) ? &(*rootp)->llink : /* T3: follow left branch */ &(*rootp)->rlink; /* T4: follow right branch */ } - q = malloc (sizeof(node_t)); /* T5: key not found */ + q = malloc (sizeof(node_t)); /* T5: key not found */ if (q) - { /* make new node */ - *rootp = q; /* link new node to old */ - q->key = vkey; /* initialize new node */ + { /* make new node */ + *rootp = q; /* link new node to old */ + q->key = vkey; /* initialize new node */ q->llink = q->rlink = NULL; } return q; @@ -73,8 +73,8 @@ tfind (const void *vkey, /* key to be found */ { /* T1: */ int r; - if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */ - return *rootp; /* key found */ + if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */ + return *rootp; /* key found */ rootp = (r < 0) ? &(*rootp)->llink : /* T3: follow left branch */ &(*rootp)->rlink; /* T4: follow right branch */ @@ -112,17 +112,17 @@ tdelete (const void *__restrict vkey, &(*rootp)->llink : /* follow llink branch */ &(*rootp)->rlink; /* follow rlink branch */ if (*rootp == NULL) - return NULL; /* key not found */ + return NULL; /* key not found */ } - r = (*rootp)->rlink; /* D1: */ - if ((q = (*rootp)->llink) == NULL) /* Left NULL? */ + r = (*rootp)->rlink; /* D1: */ + if ((q = (*rootp)->llink) == NULL) /* Left NULL? */ { q = r; } else if (r != NULL) { /* Right link is NULL? */ if (r->llink == NULL) - { /* D2: Find successor */ + { /* D2: Find successor */ r->llink = q; q = r; } @@ -135,7 +135,7 @@ tdelete (const void *__restrict vkey, q->rlink = (*rootp)->rlink; } } - free (*rootp); /* D4: Free node */ + free (*rootp); /* D4: Free node */ *rootp = q; /* link parent to new node */ return p; } diff --git a/src/testcurl/https/test_empty_response.c b/src/testcurl/https/test_empty_response.c @@ -49,7 +49,7 @@ ahc_echo (void *cls, { struct MHD_Response *response; enum MHD_Result ret; - (void) cls; (void) url; (void) method; (void) version; /* Unused. Silent compiler warning. */ + (void) cls; (void) url; (void) method; (void) version; /* Unused. Silent compiler warning. */ (void) upload_data; (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */ response = MHD_create_response_from_buffer (0, NULL, diff --git a/src/testcurl/https/test_https_get.c b/src/testcurl/https/test_https_get.c @@ -107,9 +107,9 @@ ahc_empty (void *cls, (void) cls; (void) url; (void) url; - (void) version; /* Unused. Silent compiler warning. */ + (void) version; /* Unused. Silent compiler warning. */ (void) upload_data; - (void) upload_data_size; /* Unused. Silent compiler warning. */ + (void) upload_data_size; /* Unused. Silent compiler warning. */ if (0 != strcasecmp ("GET", method)) diff --git a/src/testcurl/https/test_https_session_info.c b/src/testcurl/https/test_https_session_info.c @@ -50,7 +50,7 @@ query_session_ahc (void *cls, struct MHD_Connection *connection, struct MHD_Response *response; enum MHD_Result ret; int gret; - (void) cls; (void) url; (void) method; (void) version; /* Unused. Silent compiler warning. */ + (void) cls; (void) url; (void) method; (void) version; /* Unused. Silent compiler warning. */ (void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */ if (NULL == *ptr) diff --git a/src/testcurl/https/tls_test_common.c b/src/testcurl/https/tls_test_common.c @@ -189,7 +189,7 @@ http_ahc (void *cls, static int aptr; struct MHD_Response *response; enum MHD_Result ret; - (void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */ + (void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */ (void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */ if (0 != strcmp (method, MHD_HTTP_METHOD_GET)) diff --git a/src/testcurl/test_digestauth.c b/src/testcurl/test_digestauth.c @@ -91,7 +91,7 @@ ahc_echo (void *cls, const char *password = "testpass"; const char *realm = "test@example.com"; enum MHD_Result ret; - (void) cls; (void) url; /* Unused. Silent compiler warning. */ + (void) cls; (void) url; /* Unused. Silent compiler warning. */ (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */ (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */ diff --git a/src/testcurl/test_digestauth_with_arguments.c b/src/testcurl/test_digestauth_with_arguments.c @@ -85,7 +85,7 @@ ahc_echo (void *cls, const char *password = "testpass"; const char *realm = "test@example.com"; enum MHD_Result ret; - (void) cls; (void) url; /* Unused. Silent compiler warning. */ + (void) cls; (void) url; /* Unused. Silent compiler warning. */ (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */ (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */ diff --git a/src/testcurl/test_get.c b/src/testcurl/test_get.c @@ -730,9 +730,9 @@ ahc_empty (void *cls, (void) cls; (void) url; (void) url; - (void) version; /* Unused. Silent compiler warning. */ + (void) version; /* Unused. Silent compiler warning. */ (void) upload_data; - (void) upload_data_size; /* Unused. Silent compiler warning. */ + (void) upload_data_size; /* Unused. Silent compiler warning. */ if (0 != strcasecmp ("GET", method)) return MHD_NO; /* unexpected method */ diff --git a/src/testcurl/test_get_chunked.c b/src/testcurl/test_get_chunked.c @@ -121,7 +121,7 @@ ahc_echo (void *cls, enum MHD_Result ret; (void) url; - (void) version; /* Unused. Silent compiler warning. */ + (void) version; /* Unused. Silent compiler warning. */ (void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */ diff --git a/src/testcurl/test_get_empty.c b/src/testcurl/test_get_empty.c @@ -687,9 +687,9 @@ ahc_empty (void *cls, (void) cls; (void) url; (void) url; - (void) version; /* Unused. Silence compiler warning. */ + (void) version; /* Unused. Silence compiler warning. */ (void) upload_data; - (void) upload_data_size; /* Unused. Silent compiler warning. */ + (void) upload_data_size; /* Unused. Silent compiler warning. */ if (0 != strcasecmp ("GET", method)) return MHD_NO; /* unexpected method */ diff --git a/src/testcurl/test_post.c b/src/testcurl/test_post.c @@ -573,7 +573,7 @@ ahc_cancel (void *cls, { struct MHD_Response *response; enum MHD_Result ret; - (void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */ + (void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */ (void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */ if (0 != strcasecmp ("POST", method)) diff --git a/src/testcurl/test_post_loop.c b/src/testcurl/test_post_loop.c @@ -84,7 +84,7 @@ ahc_echo (void *cls, static int marker; struct MHD_Response *response; enum MHD_Result ret; - (void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */ + (void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */ (void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */ if (0 != strcmp ("POST", method)) diff --git a/src/testcurl/test_quiesce_stream.c b/src/testcurl/test_quiesce_stream.c @@ -143,7 +143,7 @@ http_AccessHandlerCallback (void *cls, void **con_cls) { enum MHD_Result ret; - (void) cls; (void) url; /* Unused. Silent compiler warning. */ + (void) cls; (void) url; /* Unused. Silent compiler warning. */ (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */ (void) upload_data_size; /* Unused. Silent compiler warning. */ diff --git a/src/testcurl/test_termination.c b/src/testcurl/test_termination.c @@ -57,7 +57,7 @@ connection_handler (void *cls, void **ptr) { static int i; - (void) cls; (void) url; /* Unused. Silent compiler warning. */ + (void) cls; (void) url; /* Unused. Silent compiler warning. */ (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */ (void) upload_data_size; /* Unused. Silent compiler warning. */ diff --git a/src/testzzuf/test_get_chunked.c b/src/testzzuf/test_get_chunked.c @@ -104,7 +104,7 @@ ahc_echo (void *cls, enum MHD_Result ret; (void) url; - (void) version; /* Unused. Silent compiler warning. */ + (void) version; /* Unused. Silent compiler warning. */ (void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */