aboutsummaryrefslogtreecommitdiff
path: root/src/microhttpd
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2020-09-27 22:12:13 +0200
committerChristian Grothoff <christian@grothoff.org>2020-09-27 22:12:13 +0200
commitbeb7fa828c59c31d4a5178b82121435f2069b181 (patch)
treef5279645b6805e9e33aa1b2edb34df1e2e5c26af /src/microhttpd
parent1d9f940dca89a5ee95a3247e43440ebd16c903af (diff)
downloadlibmicrohttpd-beb7fa828c59c31d4a5178b82121435f2069b181.tar.gz
libmicrohttpd-beb7fa828c59c31d4a5178b82121435f2069b181.zip
fix transmission stall issue with upgraded TLS connections reported by Nguyen Xuan Viet on the mailinglist
Diffstat (limited to 'src/microhttpd')
-rw-r--r--src/microhttpd/connection.c30
-rw-r--r--src/microhttpd/daemon.c159
-rw-r--r--src/microhttpd/digestauth.c4
-rw-r--r--src/microhttpd/internal.c40
-rw-r--r--src/microhttpd/internal.h2
-rw-r--r--src/microhttpd/md5.h2
-rw-r--r--src/microhttpd/memorypool.c6
-rw-r--r--src/microhttpd/mhd_mono_clock.c4
-rw-r--r--src/microhttpd/mhd_send.c12
-rw-r--r--src/microhttpd/mhd_threads.c3
-rw-r--r--src/microhttpd/postprocessor.c8
-rw-r--r--src/microhttpd/response.c12
-rw-r--r--src/microhttpd/sha256.h2
-rw-r--r--src/microhttpd/test_daemon.c6
-rw-r--r--src/microhttpd/test_postprocessor_large.c2
-rw-r--r--src/microhttpd/test_start_stop.c6
-rw-r--r--src/microhttpd/test_str.c144
-rw-r--r--src/microhttpd/test_upgrade_large.c192
-rw-r--r--src/microhttpd/tsearch.c28
19 files changed, 426 insertions, 236 deletions
diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c
index cf2bfaa1..b2197310 100644
--- a/src/microhttpd/connection.c
+++ b/src/microhttpd/connection.c
@@ -115,7 +115,6 @@
115#endif 115#endif
116 116
117 117
118
119/** 118/**
120 * sendfile() chuck size 119 * sendfile() chuck size
121 */ 120 */
@@ -250,9 +249,9 @@ MHD_get_connection_values (struct MHD_Connection *connection,
250 ret++; 249 ret++;
251 if ( (NULL != iterator) && 250 if ( (NULL != iterator) &&
252 (MHD_NO == iterator (iterator_cls, 251 (MHD_NO == iterator (iterator_cls,
253 pos->kind, 252 pos->kind,
254 pos->header, 253 pos->header,
255 pos->value)) ) 254 pos->value)) )
256 return ret; 255 return ret;
257 } 256 }
258 return ret; 257 return ret;
@@ -764,7 +763,8 @@ MHD_connection_finish_forward_ (struct MHD_Connection *connection)
764 * used with MHD_UPGRADE_ACTION_CLOSE. They will be 763 * used with MHD_UPGRADE_ACTION_CLOSE. They will be
765 * closed by MHD_cleanup_upgraded_connection_() during 764 * closed by MHD_cleanup_upgraded_connection_() during
766 * connection's final cleanup. 765 * connection's final cleanup.
767 */} 766 *///
767}
768 768
769 769
770#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT*/ 770#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT*/
@@ -1141,18 +1141,18 @@ try_grow_read_buffer (struct MHD_Connection *connection,
1141 1141
1142 avail_size = MHD_pool_get_free (connection->pool); 1142 avail_size = MHD_pool_get_free (connection->pool);
1143 if (0 == avail_size) 1143 if (0 == avail_size)
1144 return false; /* No more space available */ 1144 return false; /* No more space available */
1145 if (0 == connection->read_buffer_size) 1145 if (0 == connection->read_buffer_size)
1146 new_size = avail_size / 2; /* Use half of available buffer for reading */ 1146 new_size = avail_size / 2; /* Use half of available buffer for reading */
1147 else 1147 else
1148 { 1148 {
1149 size_t grow_size; 1149 size_t grow_size;
1150 1150
1151 grow_size = avail_size / 8; 1151 grow_size = avail_size / 8;
1152 if (MHD_BUF_INC_SIZE > grow_size) 1152 if (MHD_BUF_INC_SIZE > grow_size)
1153 { /* Shortage of space */ 1153 { /* Shortage of space */
1154 if (! required) 1154 if (! required)
1155 return false; /* Grow is not mandatory, leave some space in pool */ 1155 return false; /* Grow is not mandatory, leave some space in pool */
1156 else 1156 else
1157 { 1157 {
1158 /* Shortage of space, but grow is mandatory */ 1158 /* Shortage of space, but grow is mandatory */
@@ -1403,7 +1403,8 @@ build_header_response (struct MHD_Connection *connection)
1403 1403
1404 Note that the change from 'SHOULD NOT' to 'MUST NOT' is 1404 Note that the change from 'SHOULD NOT' to 'MUST NOT' is
1405 a recent development of the HTTP 1.1 specification. 1405 a recent development of the HTTP 1.1 specification.
1406 */content_length_len 1406 *///
1407 content_length_len
1407 = MHD_snprintf_ (content_length_buf, 1408 = MHD_snprintf_ (content_length_buf,
1408 sizeof (content_length_buf), 1409 sizeof (content_length_buf),
1409 MHD_HTTP_HEADER_CONTENT_LENGTH ": " 1410 MHD_HTTP_HEADER_CONTENT_LENGTH ": "
@@ -2438,8 +2439,9 @@ static enum MHD_Result
2438check_write_done (struct MHD_Connection *connection, 2439check_write_done (struct MHD_Connection *connection,
2439 enum MHD_CONNECTION_STATE next_state) 2440 enum MHD_CONNECTION_STATE next_state)
2440{ 2441{
2441 if (connection->write_buffer_append_offset != 2442 if ( (connection->write_buffer_append_offset !=
2442 connection->write_buffer_send_offset) 2443 connection->write_buffer_send_offset) ||
2444 (connection->sk_cork_on) )
2443 return MHD_NO; 2445 return MHD_NO;
2444 connection->write_buffer_append_offset = 0; 2446 connection->write_buffer_append_offset = 0;
2445 connection->write_buffer_send_offset = 0; 2447 connection->write_buffer_send_offset = 0;
@@ -2722,10 +2724,10 @@ MHD_update_last_activity_ (struct MHD_Connection *connection)
2722 struct MHD_Daemon *daemon = connection->daemon; 2724 struct MHD_Daemon *daemon = connection->daemon;
2723 2725
2724 if (0 == connection->connection_timeout) 2726 if (0 == connection->connection_timeout)
2725 return; /* Skip update of activity for connections 2727 return; /* Skip update of activity for connections
2726 without timeout timer. */ 2728 without timeout timer. */
2727 if (connection->suspended) 2729 if (connection->suspended)
2728 return; /* no activity on suspended connections */ 2730 return; /* no activity on suspended connections */
2729 2731
2730 connection->last_activity = MHD_monotonic_sec_counter (); 2732 connection->last_activity = MHD_monotonic_sec_counter ();
2731 if (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) 2733 if (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION))
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index a21462db..31ef6909 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -1333,6 +1333,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1333 * this function. If 'was_closed' changed externally in the middle 1333 * this function. If 'was_closed' changed externally in the middle
1334 * of processing - it will be processed on next iteration. */ 1334 * of processing - it will be processed on next iteration. */
1335 bool was_closed; 1335 bool was_closed;
1336
1336 if (daemon->shutdown) 1337 if (daemon->shutdown)
1337 { 1338 {
1338 /* Daemon shutting down, application will not receive any more data. */ 1339 /* Daemon shutting down, application will not receive any more data. */
@@ -1355,10 +1356,9 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1355 { 1356 {
1356#ifdef HAVE_MESSAGES 1357#ifdef HAVE_MESSAGES
1357 MHD_DLOG (daemon, 1358 MHD_DLOG (daemon,
1358 _ ( 1359 _ ("Failed to forward to application "
1359 "Failed to forward to application " 1360 MHD_UNSIGNED_LONG_LONG_PRINTF \
1360 MHD_UNSIGNED_LONG_LONG_PRINTF \ 1361 " bytes of data received from remote side: application shut down socket.\n"),
1361 " bytes of data received from remote side: application shut down socket.\n"),
1362 (MHD_UNSIGNED_LONG_LONG) urh->in_buffer_used); 1362 (MHD_UNSIGNED_LONG_LONG) urh->in_buffer_used);
1363#endif 1363#endif
1364 1364
@@ -1367,7 +1367,8 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1367 * check for any pending data even if socket is not marked 1367 * check for any pending data even if socket is not marked
1368 * as 'ready' (signal may arrive after poll()/select()). 1368 * as 'ready' (signal may arrive after poll()/select()).
1369 * Socketpair for forwarding is always in non-blocking mode 1369 * Socketpair for forwarding is always in non-blocking mode
1370 * so no risk that recv() will block the thread. */if (0 != urh->out_buffer_size) 1370 * so no risk that recv() will block the thread. *///
1371 if (0 != urh->out_buffer_size)
1371 urh->mhd.celi |= MHD_EPOLL_STATE_READ_READY; 1372 urh->mhd.celi |= MHD_EPOLL_STATE_READ_READY;
1372 /* Discard any data received form remote. */ 1373 /* Discard any data received form remote. */
1373 urh->in_buffer_used = 0; 1374 urh->in_buffer_used = 0;
@@ -1379,12 +1380,14 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1379 connection->tls_read_ready = false; 1380 connection->tls_read_ready = false;
1380 } 1381 }
1381 1382
1382 /* On some platforms (W32, possibly Darwin) failed send() (send() will always 1383 /* On some platforms (W32, possibly Darwin) failed send() (send() will
1383 * fail after remote disconnect was detected) may discard data in system 1384 * always fail after remote disconnect was detected) may discard data in
1384 * buffers received by system but not yet read by recv(). 1385 * system buffers received by system but not yet read by recv(). So, before
1385 * So, before trying send() on any socket, recv() must be performed at first 1386 * trying send() on any socket, recv() must be performed at first otherwise
1386 * otherwise last part of incoming data may be lost. *//* If disconnect or error was detected - try to read from socket 1387 * last part of incoming data may be lost. If disconnect or error was
1387 * to dry data possibly pending is system buffers. */if (0 != (MHD_EPOLL_STATE_ERROR & urh->app.celi)) 1388 * detected - try to read from socket to dry data possibly pending is system
1389 * buffers. *///
1390 if (0 != (MHD_EPOLL_STATE_ERROR & urh->app.celi))
1388 urh->app.celi |= MHD_EPOLL_STATE_READ_READY; 1391 urh->app.celi |= MHD_EPOLL_STATE_READ_READY;
1389 if (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi)) 1392 if (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi))
1390 urh->mhd.celi |= MHD_EPOLL_STATE_READ_READY; 1393 urh->mhd.celi |= MHD_EPOLL_STATE_READ_READY;
@@ -1424,10 +1427,10 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1424 else /* 0 < res */ 1427 else /* 0 < res */
1425 { 1428 {
1426 urh->in_buffer_used += res; 1429 urh->in_buffer_used += res;
1427 if (buf_size > (size_t) res) 1430 if (0 < gnutls_record_check_pending (connection->tls_session))
1428 urh->app.celi &= ~MHD_EPOLL_STATE_READ_READY; 1431 {
1429 else if (0 < gnutls_record_check_pending (connection->tls_session))
1430 connection->tls_read_ready = true; 1432 connection->tls_read_ready = true;
1433 }
1431 } 1434 }
1432 if (MHD_EPOLL_STATE_ERROR == 1435 if (MHD_EPOLL_STATE_ERROR ==
1433 ((MHD_EPOLL_STATE_ERROR | MHD_EPOLL_STATE_READ_READY) & urh->app.celi)) 1436 ((MHD_EPOLL_STATE_ERROR | MHD_EPOLL_STATE_READ_READY) & urh->app.celi))
@@ -1932,8 +1935,8 @@ thread_main_handle_connection (void *data)
1932 } 1935 }
1933#endif /* HAVE_POLL */ 1936#endif /* HAVE_POLL */
1934 MHD_itc_clear_ (daemon->itc); 1937 MHD_itc_clear_ (daemon->itc);
1935 continue; /* Check again for resume. */ 1938 continue; /* Check again for resume. */
1936 } /* End of "suspended" branch. */ 1939 } /* End of "suspended" branch. */
1937 1940
1938 if (was_suspended) 1941 if (was_suspended)
1939 { 1942 {
@@ -2228,7 +2231,8 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon);
2228 * and if possible. 2231 * and if possible.
2229 */ 2232 */
2230#define MHD_TLSLIB_NEED_PUSH_FUNC 1 2233#define MHD_TLSLIB_NEED_PUSH_FUNC 1
2231#endif /* !MHD_WINSOCK_SOCKETS && !MHD_socket_nosignal_ && (GNUTLS_VERSION_NUMBER+0 < 0x030402) */ 2234#endif \
2235 /* !MHD_WINSOCK_SOCKETS && !MHD_socket_nosignal_ && (GNUTLS_VERSION_NUMBER+0 < 0x030402) */
2232 2236
2233#ifdef MHD_TLSLIB_NEED_PUSH_FUNC 2237#ifdef MHD_TLSLIB_NEED_PUSH_FUNC
2234/** 2238/**
@@ -3379,7 +3383,8 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon)
3379 this is not true as if we fail to do manually remove it, 3383 this is not true as if we fail to do manually remove it,
3380 we are still seeing an event for this fd in epoll, 3384 we are still seeing an event for this fd in epoll,
3381 causing grief (use-after-free...) --- at least on my 3385 causing grief (use-after-free...) --- at least on my
3382 system. */if (0 != epoll_ctl (daemon->epoll_fd, 3386 system. *///
3387 if (0 != epoll_ctl (daemon->epoll_fd,
3383 EPOLL_CTL_DEL, 3388 EPOLL_CTL_DEL,
3384 pos->socket_fd, 3389 pos->socket_fd,
3385 NULL)) 3390 NULL))
@@ -3831,9 +3836,9 @@ MHD_select (struct MHD_Daemon *daemon,
3831 return MHD_NO; 3836 return MHD_NO;
3832 } 3837 }
3833 if (MHD_NO != internal_run_from_select (daemon, 3838 if (MHD_NO != internal_run_from_select (daemon,
3834 &rs, 3839 &rs,
3835 &ws, 3840 &ws,
3836 &es)) 3841 &es))
3837 return (MHD_NO == err_state) ? MHD_YES : MHD_NO; 3842 return (MHD_NO == err_state) ? MHD_YES : MHD_NO;
3838 return MHD_NO; 3843 return MHD_NO;
3839} 3844}
@@ -3920,7 +3925,7 @@ MHD_poll_all (struct MHD_Daemon *daemon,
3920 timeout = 0; 3925 timeout = 0;
3921 else if ( (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) || 3926 else if ( (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) ||
3922 (MHD_NO == MHD_get_timeout (daemon, 3927 (MHD_NO == MHD_get_timeout (daemon,
3923 &ltimeout)) ) 3928 &ltimeout)) )
3924 timeout = -1; 3929 timeout = -1;
3925 else 3930 else
3926 timeout = (ltimeout > INT_MAX) ? INT_MAX : (int) ltimeout; 3931 timeout = (ltimeout > INT_MAX) ? INT_MAX : (int) ltimeout;
@@ -4000,9 +4005,9 @@ MHD_poll_all (struct MHD_Daemon *daemon,
4000 prev = pos->prev; 4005 prev = pos->prev;
4001 /* first, sanity checks */ 4006 /* first, sanity checks */
4002 if (i >= num_connections) 4007 if (i >= num_connections)
4003 break; /* connection list changed somehow, retry later ... */ 4008 break; /* connection list changed somehow, retry later ... */
4004 if (p[poll_server + i].fd != pos->socket_fd) 4009 if (p[poll_server + i].fd != pos->socket_fd)
4005 continue; /* fd mismatch, something else happened, retry later ... */ 4010 continue; /* fd mismatch, something else happened, retry later ... */
4006 call_handlers (pos, 4011 call_handlers (pos,
4007 0 != (p[poll_server + i].revents & POLLIN), 4012 0 != (p[poll_server + i].revents & POLLIN),
4008 0 != (p[poll_server + i].revents & POLLOUT), 4013 0 != (p[poll_server + i].revents & POLLOUT),
@@ -4267,22 +4272,26 @@ run_epoll_for_upgrade (struct MHD_Daemon *daemon)
4267 4272
4268 /* Update ueh state based on what is ready according to epoll() */ 4273 /* Update ueh state based on what is ready according to epoll() */
4269 if (0 != (events[i].events & EPOLLIN)) 4274 if (0 != (events[i].events & EPOLLIN))
4275 {
4270 ueh->celi |= MHD_EPOLL_STATE_READ_READY; 4276 ueh->celi |= MHD_EPOLL_STATE_READ_READY;
4277 }
4271 if (0 != (events[i].events & EPOLLOUT)) 4278 if (0 != (events[i].events & EPOLLOUT))
4279 {
4272 ueh->celi |= MHD_EPOLL_STATE_WRITE_READY; 4280 ueh->celi |= MHD_EPOLL_STATE_WRITE_READY;
4281 }
4273 if (0 != (events[i].events & EPOLLHUP)) 4282 if (0 != (events[i].events & EPOLLHUP))
4283 {
4274 ueh->celi |= MHD_EPOLL_STATE_READ_READY | MHD_EPOLL_STATE_WRITE_READY; 4284 ueh->celi |= MHD_EPOLL_STATE_READ_READY | MHD_EPOLL_STATE_WRITE_READY;
4285 }
4275 4286
4276 if ( (0 == (ueh->celi & MHD_EPOLL_STATE_ERROR)) && 4287 if ( (0 == (ueh->celi & MHD_EPOLL_STATE_ERROR)) &&
4277 (0 != (events[i].events & (EPOLLERR | EPOLLPRI))) ) 4288 (0 != (events[i].events & (EPOLLERR | EPOLLPRI))) )
4278 { 4289 {
4279 /* Process new error state only one time 4290 /* Process new error state only one time and avoid continuously
4280 * and avoid continuously marking this connection 4291 * marking this connection as 'ready'. */
4281 * as 'ready'. */
4282 ueh->celi |= MHD_EPOLL_STATE_ERROR; 4292 ueh->celi |= MHD_EPOLL_STATE_ERROR;
4283 new_err_state = true; 4293 new_err_state = true;
4284 } 4294 }
4285
4286 if (! urh->in_eready_list) 4295 if (! urh->in_eready_list)
4287 { 4296 {
4288 if (new_err_state || 4297 if (new_err_state ||
@@ -4447,7 +4456,7 @@ MHD_epoll (struct MHD_Daemon *daemon,
4447 if (MHD_NO != may_block) 4456 if (MHD_NO != may_block)
4448 { 4457 {
4449 if (MHD_NO != MHD_get_timeout (daemon, 4458 if (MHD_NO != MHD_get_timeout (daemon,
4450 &timeout_ll)) 4459 &timeout_ll))
4451 { 4460 {
4452 if (timeout_ll >= (MHD_UNSIGNED_LONG_LONG) INT_MAX) 4461 if (timeout_ll >= (MHD_UNSIGNED_LONG_LONG) INT_MAX)
4453 timeout_ms = INT_MAX; 4462 timeout_ms = INT_MAX;
@@ -5406,10 +5415,10 @@ parse_options_va (struct MHD_Daemon *daemon,
5406 case MHD_OPTION_CONNECTION_MEMORY_INCREMENT: 5415 case MHD_OPTION_CONNECTION_MEMORY_INCREMENT:
5407 case MHD_OPTION_THREAD_STACK_SIZE: 5416 case MHD_OPTION_THREAD_STACK_SIZE:
5408 if (MHD_NO == parse_options (daemon, 5417 if (MHD_NO == parse_options (daemon,
5409 servaddr, 5418 servaddr,
5410 opt, 5419 opt,
5411 (size_t) oa[i].value, 5420 (size_t) oa[i].value,
5412 MHD_OPTION_END)) 5421 MHD_OPTION_END))
5413 return MHD_NO; 5422 return MHD_NO;
5414 break; 5423 break;
5415 /* all options taking 'unsigned int' */ 5424 /* all options taking 'unsigned int' */
@@ -5423,39 +5432,39 @@ parse_options_va (struct MHD_Daemon *daemon,
5423 case MHD_OPTION_LISTEN_BACKLOG_SIZE: 5432 case MHD_OPTION_LISTEN_BACKLOG_SIZE:
5424 case MHD_OPTION_SERVER_INSANITY: 5433 case MHD_OPTION_SERVER_INSANITY:
5425 if (MHD_NO == parse_options (daemon, 5434 if (MHD_NO == parse_options (daemon,
5426 servaddr, 5435 servaddr,
5427 opt, 5436 opt,
5428 (unsigned int) oa[i].value, 5437 (unsigned int) oa[i].value,
5429 MHD_OPTION_END)) 5438 MHD_OPTION_END))
5430 return MHD_NO; 5439 return MHD_NO;
5431 break; 5440 break;
5432 /* all options taking 'enum' */ 5441 /* all options taking 'enum' */
5433#ifdef HTTPS_SUPPORT 5442#ifdef HTTPS_SUPPORT
5434 case MHD_OPTION_HTTPS_CRED_TYPE: 5443 case MHD_OPTION_HTTPS_CRED_TYPE:
5435 if (MHD_NO == parse_options (daemon, 5444 if (MHD_NO == parse_options (daemon,
5436 servaddr, 5445 servaddr,
5437 opt, 5446 opt,
5438 (gnutls_credentials_type_t) oa[i].value, 5447 (gnutls_credentials_type_t) oa[i].value,
5439 MHD_OPTION_END)) 5448 MHD_OPTION_END))
5440 return MHD_NO; 5449 return MHD_NO;
5441 break; 5450 break;
5442#endif /* HTTPS_SUPPORT */ 5451#endif /* HTTPS_SUPPORT */
5443 /* all options taking 'MHD_socket' */ 5452 /* all options taking 'MHD_socket' */
5444 case MHD_OPTION_LISTEN_SOCKET: 5453 case MHD_OPTION_LISTEN_SOCKET:
5445 if (MHD_NO == parse_options (daemon, 5454 if (MHD_NO == parse_options (daemon,
5446 servaddr, 5455 servaddr,
5447 opt, 5456 opt,
5448 (MHD_socket) oa[i].value, 5457 (MHD_socket) oa[i].value,
5449 MHD_OPTION_END)) 5458 MHD_OPTION_END))
5450 return MHD_NO; 5459 return MHD_NO;
5451 break; 5460 break;
5452 /* all options taking 'int' */ 5461 /* all options taking 'int' */
5453 case MHD_OPTION_STRICT_FOR_CLIENT: 5462 case MHD_OPTION_STRICT_FOR_CLIENT:
5454 if (MHD_NO == parse_options (daemon, 5463 if (MHD_NO == parse_options (daemon,
5455 servaddr, 5464 servaddr,
5456 opt, 5465 opt,
5457 (int) oa[i].value, 5466 (int) oa[i].value,
5458 MHD_OPTION_END)) 5467 MHD_OPTION_END))
5459 return MHD_NO; 5468 return MHD_NO;
5460 break; 5469 break;
5461 /* all options taking one pointer */ 5470 /* all options taking one pointer */
@@ -5470,10 +5479,10 @@ parse_options_va (struct MHD_Daemon *daemon,
5470 case MHD_OPTION_HTTPS_CERT_CALLBACK: 5479 case MHD_OPTION_HTTPS_CERT_CALLBACK:
5471 case MHD_OPTION_HTTPS_CERT_CALLBACK2: 5480 case MHD_OPTION_HTTPS_CERT_CALLBACK2:
5472 if (MHD_NO == parse_options (daemon, 5481 if (MHD_NO == parse_options (daemon,
5473 servaddr, 5482 servaddr,
5474 opt, 5483 opt,
5475 oa[i].ptr_value, 5484 oa[i].ptr_value,
5476 MHD_OPTION_END)) 5485 MHD_OPTION_END))
5477 return MHD_NO; 5486 return MHD_NO;
5478 break; 5487 break;
5479 /* all options taking two pointers */ 5488 /* all options taking two pointers */
@@ -5484,21 +5493,21 @@ parse_options_va (struct MHD_Daemon *daemon,
5484 case MHD_OPTION_UNESCAPE_CALLBACK: 5493 case MHD_OPTION_UNESCAPE_CALLBACK:
5485 case MHD_OPTION_GNUTLS_PSK_CRED_HANDLER: 5494 case MHD_OPTION_GNUTLS_PSK_CRED_HANDLER:
5486 if (MHD_NO == parse_options (daemon, 5495 if (MHD_NO == parse_options (daemon,
5487 servaddr, 5496 servaddr,
5488 opt, 5497 opt,
5489 (void *) oa[i].value, 5498 (void *) oa[i].value,
5490 oa[i].ptr_value, 5499 oa[i].ptr_value,
5491 MHD_OPTION_END)) 5500 MHD_OPTION_END))
5492 return MHD_NO; 5501 return MHD_NO;
5493 break; 5502 break;
5494 /* options taking size_t-number followed by pointer */ 5503 /* options taking size_t-number followed by pointer */
5495 case MHD_OPTION_DIGEST_AUTH_RANDOM: 5504 case MHD_OPTION_DIGEST_AUTH_RANDOM:
5496 if (MHD_NO == parse_options (daemon, 5505 if (MHD_NO == parse_options (daemon,
5497 servaddr, 5506 servaddr,
5498 opt, 5507 opt,
5499 (size_t) oa[i].value, 5508 (size_t) oa[i].value,
5500 oa[i].ptr_value, 5509 oa[i].ptr_value,
5501 MHD_OPTION_END)) 5510 MHD_OPTION_END))
5502 return MHD_NO; 5511 return MHD_NO;
5503 break; 5512 break;
5504 default: 5513 default:
@@ -5761,7 +5770,7 @@ MHD_start_daemon_va (unsigned int flags,
5761#ifdef HAVE_POLL 5770#ifdef HAVE_POLL
5762 *pflags |= MHD_USE_POLL; 5771 *pflags |= MHD_USE_POLL;
5763#else /* ! HAVE_POLL */ 5772#else /* ! HAVE_POLL */
5764 /* use select() - do not modify flags */ 5773 /* use select() - do not modify flags */
5765#endif /* ! HAVE_POLL */ 5774#endif /* ! HAVE_POLL */
5766 } 5775 }
5767 else if (0 != (*pflags & MHD_USE_INTERNAL_POLLING_THREAD)) 5776 else if (0 != (*pflags & MHD_USE_INTERNAL_POLLING_THREAD))
@@ -5772,7 +5781,7 @@ MHD_start_daemon_va (unsigned int flags,
5772#elif defined(HAVE_POLL) 5781#elif defined(HAVE_POLL)
5773 *pflags |= MHD_USE_POLL; 5782 *pflags |= MHD_USE_POLL;
5774#else /* !HAVE_POLL && !EPOLL_SUPPORT */ 5783#else /* !HAVE_POLL && !EPOLL_SUPPORT */
5775 /* use select() - do not modify flags */ 5784 /* use select() - do not modify flags */
5776#endif /* !HAVE_POLL && !EPOLL_SUPPORT */ 5785#endif /* !HAVE_POLL && !EPOLL_SUPPORT */
5777 } 5786 }
5778 else 5787 else
@@ -5781,7 +5790,7 @@ MHD_start_daemon_va (unsigned int flags,
5781#if defined(EPOLL_SUPPORT) 5790#if defined(EPOLL_SUPPORT)
5782 *pflags |= MHD_USE_EPOLL; 5791 *pflags |= MHD_USE_EPOLL;
5783#else /* ! EPOLL_SUPPORT */ 5792#else /* ! EPOLL_SUPPORT */
5784 /* use select() - do not modify flags */ 5793 /* use select() - do not modify flags */
5785#endif /* ! EPOLL_SUPPORT */ 5794#endif /* ! EPOLL_SUPPORT */
5786 } 5795 }
5787 } 5796 }
@@ -5866,8 +5875,8 @@ MHD_start_daemon_va (unsigned int flags,
5866 5875
5867 5876
5868 if (MHD_NO == parse_options_va (daemon, 5877 if (MHD_NO == parse_options_va (daemon,
5869 &servaddr, 5878 &servaddr,
5870 ap)) 5879 ap))
5871 { 5880 {
5872#ifdef HTTPS_SUPPORT 5881#ifdef HTTPS_SUPPORT
5873 if ( (0 != (*pflags & MHD_USE_TLS)) && 5882 if ( (0 != (*pflags & MHD_USE_TLS)) &&
@@ -6057,11 +6066,11 @@ MHD_start_daemon_va (unsigned int flags,
6057#endif 6066#endif
6058 } 6067 }
6059#endif /* ! MHD_WINSOCK_SOCKETS */ 6068#endif /* ! MHD_WINSOCK_SOCKETS */
6060 /* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms. 6069 /* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms.
6061 * Fail if SO_REUSEPORT is not defined or setsockopt fails. 6070 * Fail if SO_REUSEPORT is not defined or setsockopt fails.
6062 */ 6071 */
6063 /* SO_REUSEADDR on W32 has the same semantics 6072 /* SO_REUSEADDR on W32 has the same semantics
6064 as SO_REUSEPORT on BSD/Linux */ 6073 as SO_REUSEPORT on BSD/Linux */
6065#if defined(MHD_WINSOCK_SOCKETS) || defined(SO_REUSEPORT) 6074#if defined(MHD_WINSOCK_SOCKETS) || defined(SO_REUSEPORT)
6066 if (0 > setsockopt (listen_fd, 6075 if (0 > setsockopt (listen_fd,
6067 SOL_SOCKET, 6076 SOL_SOCKET,
@@ -6081,8 +6090,8 @@ MHD_start_daemon_va (unsigned int flags,
6081 goto free_and_fail; 6090 goto free_and_fail;
6082 } 6091 }
6083#else /* !MHD_WINSOCK_SOCKETS && !SO_REUSEPORT */ 6092#else /* !MHD_WINSOCK_SOCKETS && !SO_REUSEPORT */
6084 /* we're supposed to allow address:port re-use, but 6093 /* we're supposed to allow address:port re-use, but
6085 on this platform we cannot; fail hard */ 6094 on this platform we cannot; fail hard */
6086#ifdef HAVE_MESSAGES 6095#ifdef HAVE_MESSAGES
6087 MHD_DLOG (daemon, 6096 MHD_DLOG (daemon,
6088 _ ( 6097 _ (
diff --git a/src/microhttpd/digestauth.c b/src/microhttpd/digestauth.c
index c3260d1b..3949b268 100644
--- a/src/microhttpd/digestauth.c
+++ b/src/microhttpd/digestauth.c
@@ -604,9 +604,9 @@ check_nonce_nc (struct MHD_Connection *connection,
604 } 604 }
605 /* Nonce is larger, shift bitmask and bump limit */ 605 /* Nonce is larger, shift bitmask and bump limit */
606 if (64 > nc - nn->nc) 606 if (64 > nc - nn->nc)
607 nn->nmask <<= (nc - nn->nc); /* small jump, less than mask width */ 607 nn->nmask <<= (nc - nn->nc); /* small jump, less than mask width */
608 else 608 else
609 nn->nmask = 0; /* big jump, unset all bits in the mask */ 609 nn->nmask = 0; /* big jump, unset all bits in the mask */
610 nn->nc = nc; 610 nn->nc = nc;
611#if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS) 611#if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS)
612 MHD_mutex_unlock_chk_ (&daemon->nnc_lock); 612 MHD_mutex_unlock_chk_ (&daemon->nnc_lock);
diff --git a/src/microhttpd/internal.c b/src/microhttpd/internal.c
index 33542c4a..c5ffa856 100644
--- a/src/microhttpd/internal.c
+++ b/src/microhttpd/internal.c
@@ -214,11 +214,11 @@ MHD_parse_arguments_ (struct MHD_Connection *connection,
214 connection, 214 connection,
215 args); 215 args);
216 if (MHD_NO == cb (connection, 216 if (MHD_NO == cb (connection,
217 args, 217 args,
218 key_len, 218 key_len,
219 NULL, 219 NULL,
220 0, 220 0,
221 kind)) 221 kind))
222 return MHD_NO; 222 return MHD_NO;
223 (*num_headers)++; 223 (*num_headers)++;
224 break; 224 break;
@@ -235,11 +235,11 @@ MHD_parse_arguments_ (struct MHD_Connection *connection,
235 connection, 235 connection,
236 equals); 236 equals);
237 if (MHD_NO == cb (connection, 237 if (MHD_NO == cb (connection,
238 args, 238 args,
239 key_len, 239 key_len,
240 equals, 240 equals,
241 value_len, 241 value_len,
242 kind)) 242 kind))
243 return MHD_NO; 243 return MHD_NO;
244 (*num_headers)++; 244 (*num_headers)++;
245 break; 245 break;
@@ -256,11 +256,11 @@ MHD_parse_arguments_ (struct MHD_Connection *connection,
256 connection, 256 connection,
257 args); 257 args);
258 if (MHD_NO == cb (connection, 258 if (MHD_NO == cb (connection,
259 args, 259 args,
260 key_len, 260 key_len,
261 NULL, 261 NULL,
262 0, 262 0,
263 kind)) 263 kind))
264 return MHD_NO; 264 return MHD_NO;
265 /* continue with 'bar' */ 265 /* continue with 'bar' */
266 (*num_headers)++; 266 (*num_headers)++;
@@ -280,11 +280,11 @@ MHD_parse_arguments_ (struct MHD_Connection *connection,
280 connection, 280 connection,
281 equals); 281 equals);
282 if (MHD_NO == cb (connection, 282 if (MHD_NO == cb (connection,
283 args, 283 args,
284 key_len, 284 key_len,
285 equals, 285 equals,
286 value_len, 286 value_len,
287 kind)) 287 kind))
288 return MHD_NO; 288 return MHD_NO;
289 (*num_headers)++; 289 (*num_headers)++;
290 args = amper; 290 args = amper;
diff --git a/src/microhttpd/internal.h b/src/microhttpd/internal.h
index cfaca9af..e2b468cb 100644
--- a/src/microhttpd/internal.h
+++ b/src/microhttpd/internal.h
@@ -96,7 +96,7 @@
96 MHD_PANIC (_ ("Failed to close FD.\n")); \ 96 MHD_PANIC (_ ("Failed to close FD.\n")); \
97} while (0) 97} while (0)
98 98
99/* 99/*
100#define EXTRA_CHECKS _MHD_MACRO_NO 100#define EXTRA_CHECKS _MHD_MACRO_NO
101 * Not used. Behaviour is controlled by _DEBUG/NDEBUG macros. 101 * Not used. Behaviour is controlled by _DEBUG/NDEBUG macros.
102 */ 102 */
diff --git a/src/microhttpd/md5.h b/src/microhttpd/md5.h
index f81d91cb..6c2a33f5 100644
--- a/src/microhttpd/md5.h
+++ b/src/microhttpd/md5.h
@@ -28,7 +28,7 @@
28 28
29struct MD5Context 29struct MD5Context
30{ 30{
31 uint32_t state[4]; /* state */ 31 uint32_t state[4]; /* state */
32 uint64_t count; /* number of bytes, mod 2^64 */ 32 uint64_t count; /* number of bytes, mod 2^64 */
33 uint8_t buffer[MD5_BLOCK_SIZE]; /* input buffer */ 33 uint8_t buffer[MD5_BLOCK_SIZE]; /* input buffer */
34}; 34};
diff --git a/src/microhttpd/memorypool.c b/src/microhttpd/memorypool.c
index 57e49cf0..a4207a92 100644
--- a/src/microhttpd/memorypool.c
+++ b/src/microhttpd/memorypool.c
@@ -336,10 +336,10 @@ MHD_pool_reallocate (struct MemoryPool *pool,
336 { /* "old" block is the last allocated block */ 336 { /* "old" block is the last allocated block */
337 const size_t new_apos = ROUND_TO_ALIGN (old_offset + new_size); 337 const size_t new_apos = ROUND_TO_ALIGN (old_offset + new_size);
338 if (! shrinking) 338 if (! shrinking)
339 { /* Grow in-place, check for enough space. */ 339 { /* Grow in-place, check for enough space. */
340 if ( (new_apos > pool->end) || 340 if ( (new_apos > pool->end) ||
341 (new_apos < pool->pos) ) /* Value wrap */ 341 (new_apos < pool->pos) ) /* Value wrap */
342 return NULL; /* No space */ 342 return NULL; /* No space */
343 } 343 }
344 /* Resized in-place */ 344 /* Resized in-place */
345 pool->pos = new_apos; 345 pool->pos = new_apos;
diff --git a/src/microhttpd/mhd_mono_clock.c b/src/microhttpd/mhd_mono_clock.c
index fa548f6e..0bd9984e 100644
--- a/src/microhttpd/mhd_mono_clock.c
+++ b/src/microhttpd/mhd_mono_clock.c
@@ -254,8 +254,8 @@ MHD_monotonic_sec_counter_init (void)
254 LARGE_INTEGER freq; 254 LARGE_INTEGER freq;
255 LARGE_INTEGER perf_counter; 255 LARGE_INTEGER perf_counter;
256 256
257 QueryPerformanceFrequency (&freq); /* never fail on XP and later */ 257 QueryPerformanceFrequency (&freq); /* never fail on XP and later */
258 QueryPerformanceCounter (&perf_counter); /* never fail on XP and later */ 258 QueryPerformanceCounter (&perf_counter); /* never fail on XP and later */
259 perf_freq = freq.QuadPart; 259 perf_freq = freq.QuadPart;
260 perf_start = perf_counter.QuadPart; 260 perf_start = perf_counter.QuadPart;
261 mono_clock_source = _MHD_CLOCK_PERFCOUNTER; 261 mono_clock_source = _MHD_CLOCK_PERFCOUNTER;
diff --git a/src/microhttpd/mhd_send.c b/src/microhttpd/mhd_send.c
index 1ff45231..f366ef67 100644
--- a/src/microhttpd/mhd_send.c
+++ b/src/microhttpd/mhd_send.c
@@ -405,7 +405,11 @@ MHD_send_on_connection2_ (struct MHD_Connection *connection,
405 (0 == buffer_size) && 405 (0 == buffer_size) &&
406 connection->sk_cork_on) 406 connection->sk_cork_on)
407 { 407 {
408 (void) gnutls_record_uncork (connection->tls_session, 0); 408 int err;
409
410 err = gnutls_record_uncork (connection->tls_session, 0);
411 if (0 > err)
412 return ret;
409 connection->sk_cork_on = false; 413 connection->sk_cork_on = false;
410 } 414 }
411 return ret; 415 return ret;
@@ -434,6 +438,9 @@ MHD_send_on_connection2_ (struct MHD_Connection *connection,
434 msg.msg_iovlen = 2; 438 msg.msg_iovlen = 2;
435 439
436 ret = sendmsg (s, &msg, MAYBE_MSG_NOSIGNAL); 440 ret = sendmsg (s, &msg, MAYBE_MSG_NOSIGNAL);
441 if ( (-1 == ret) &&
442 (EAGAIN == errno) )
443 return MHD_ERR_AGAIN_;
437 } 444 }
438#elif HAVE_WRITEV 445#elif HAVE_WRITEV
439 { 446 {
@@ -441,6 +448,9 @@ MHD_send_on_connection2_ (struct MHD_Connection *connection,
441 448
442 iovcnt = sizeof (vector) / sizeof (struct iovec); 449 iovcnt = sizeof (vector) / sizeof (struct iovec);
443 ret = writev (s, vector, iovcnt); 450 ret = writev (s, vector, iovcnt);
451 if ( (-1 == ret) &&
452 (EAGAIN == errno) )
453 return MHD_ERR_AGAIN_;
444 } 454 }
445#endif 455#endif
446 456
diff --git a/src/microhttpd/mhd_threads.c b/src/microhttpd/mhd_threads.c
index 6e96f860..aa0ad571 100644
--- a/src/microhttpd/mhd_threads.c
+++ b/src/microhttpd/mhd_threads.c
@@ -49,7 +49,8 @@
49#if defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) || \ 49#if defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) || \
50 defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI) 50 defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI)
51# define MHD_USE_THREAD_ATTR_SETNAME 1 51# define MHD_USE_THREAD_ATTR_SETNAME 1
52#endif /* HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD || HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI */ 52#endif \
53 /* HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD || HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI */
53 54
54#if defined(HAVE_PTHREAD_SETNAME_NP_GNU) || \ 55#if defined(HAVE_PTHREAD_SETNAME_NP_GNU) || \
55 defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) \ 56 defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) \
diff --git a/src/microhttpd/postprocessor.c b/src/microhttpd/postprocessor.c
index 7cffeaea..eda1ae51 100644
--- a/src/microhttpd/postprocessor.c
+++ b/src/microhttpd/postprocessor.c
@@ -801,13 +801,13 @@ find_boundary (struct MHD_PostProcessor *pp,
801 '-', 801 '-',
802 pp->buffer_pos); 802 pp->buffer_pos);
803 if (NULL == dash) 803 if (NULL == dash)
804 (*ioffptr) += pp->buffer_pos; /* skip entire buffer */ 804 (*ioffptr) += pp->buffer_pos; /* skip entire buffer */
805 else if (dash == buf) 805 else if (dash == buf)
806 (*ioffptr)++; /* at least skip one byte */ 806 (*ioffptr)++; /* at least skip one byte */
807 else 807 else
808 (*ioffptr) += dash - buf; /* skip to first possible boundary */ 808 (*ioffptr) += dash - buf; /* skip to first possible boundary */
809 } 809 }
810 return MHD_NO; /* expected boundary */ 810 return MHD_NO; /* expected boundary */
811 } 811 }
812 /* remove boundary from buffer */ 812 /* remove boundary from buffer */
813 (*ioffptr) += 2 + blen; 813 (*ioffptr) += 2 + blen;
diff --git a/src/microhttpd/response.c b/src/microhttpd/response.c
index 141372b9..9a21925a 100644
--- a/src/microhttpd/response.c
+++ b/src/microhttpd/response.c
@@ -263,9 +263,9 @@ MHD_get_response_headers (struct MHD_Response *response,
263 numHeaders++; 263 numHeaders++;
264 if ((NULL != iterator) && 264 if ((NULL != iterator) &&
265 (MHD_NO == iterator (iterator_cls, 265 (MHD_NO == iterator (iterator_cls,
266 pos->kind, 266 pos->kind,
267 pos->header, 267 pos->header,
268 pos->value))) 268 pos->value)))
269 break; 269 break;
270 } 270 }
271 return numHeaders; 271 return numHeaders;
@@ -919,7 +919,11 @@ MHD_upgrade_action (struct MHD_UpgradeResponseHandle *urh,
919#ifdef HTTPS_SUPPORT 919#ifdef HTTPS_SUPPORT
920 if (0 != (daemon->options & MHD_USE_TLS) ) 920 if (0 != (daemon->options & MHD_USE_TLS) )
921 { 921 {
922 gnutls_record_uncork (connection->tls_session, 0); 922 int err;
923
924 err = gnutls_record_uncork (connection->tls_session, 0);
925 if (0 > err)
926 return MHD_NO;
923 connection->sk_cork_on = false; 927 connection->sk_cork_on = false;
924 return MHD_YES; 928 return MHD_YES;
925 } 929 }
diff --git a/src/microhttpd/sha256.h b/src/microhttpd/sha256.h
index f4c84e2c..4a90c233 100644
--- a/src/microhttpd/sha256.h
+++ b/src/microhttpd/sha256.h
@@ -55,7 +55,7 @@ struct sha256_ctx
55{ 55{
56 uint32_t H[_SHA256_DIGEST_LENGTH]; /**< Intermediate hash value / digest at end of calculation */ 56 uint32_t H[_SHA256_DIGEST_LENGTH]; /**< Intermediate hash value / digest at end of calculation */
57 uint64_t count; /**< number of bytes, mod 2^64 */ 57 uint64_t count; /**< number of bytes, mod 2^64 */
58 uint8_t buffer[SHA256_BLOCK_SIZE]; /**< SHA256 input data buffer */ 58 uint8_t buffer[SHA256_BLOCK_SIZE]; /**< SHA256 input data buffer */
59}; 59};
60 60
61/** 61/**
diff --git a/src/microhttpd/test_daemon.c b/src/microhttpd/test_daemon.c
index caeaea3d..14a77832 100644
--- a/src/microhttpd/test_daemon.c
+++ b/src/microhttpd/test_daemon.c
@@ -83,9 +83,9 @@ ahc_nothing (void *cls,
83 const char *upload_data, size_t *upload_data_size, 83 const char *upload_data, size_t *upload_data_size,
84 void **unused) 84 void **unused)
85{ 85{
86 (void) cls; (void) connection; (void) url; /* Unused. Silent compiler warning. */ 86 (void) cls; (void) connection; (void) url; /* Unused. Silent compiler warning. */
87 (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */ 87 (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */
88 (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */ 88 (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */
89 89
90 return MHD_NO; 90 return MHD_NO;
91} 91}
diff --git a/src/microhttpd/test_postprocessor_large.c b/src/microhttpd/test_postprocessor_large.c
index 678de808..38fe650b 100644
--- a/src/microhttpd/test_postprocessor_large.c
+++ b/src/microhttpd/test_postprocessor_large.c
@@ -43,7 +43,7 @@ value_checker (void *cls,
43 const char *data, uint64_t off, size_t size) 43 const char *data, uint64_t off, size_t size)
44{ 44{
45 unsigned int *pos = cls; 45 unsigned int *pos = cls;
46 (void) kind; (void) key; (void) filename; (void) content_type; /* Unused. Silent compiler warning. */ 46 (void) kind; (void) key; (void) filename; (void) content_type; /* Unused. Silent compiler warning. */
47 (void) transfer_encoding; (void) data; (void) off; /* Unused. Silent compiler warning. */ 47 (void) transfer_encoding; (void) data; (void) off; /* Unused. Silent compiler warning. */
48#if 0 48#if 0
49 fprintf (stderr, 49 fprintf (stderr,
diff --git a/src/microhttpd/test_start_stop.c b/src/microhttpd/test_start_stop.c
index 79d80d24..9cd3abf2 100644
--- a/src/microhttpd/test_start_stop.c
+++ b/src/microhttpd/test_start_stop.c
@@ -44,9 +44,9 @@ ahc_echo (void *cls,
44 const char *upload_data, size_t *upload_data_size, 44 const char *upload_data, size_t *upload_data_size,
45 void **unused) 45 void **unused)
46{ 46{
47 (void) cls; (void) connection; (void) url; /* Unused. Silent compiler warning. */ 47 (void) cls; (void) connection; (void) url; /* Unused. Silent compiler warning. */
48 (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */ 48 (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */
49 (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */ 49 (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */
50 50
51 return MHD_NO; 51 return MHD_NO;
52} 52}
diff --git a/src/microhttpd/test_str.c b/src/microhttpd/test_str.c
index a2f357b4..1e140cb6 100644
--- a/src/microhttpd/test_str.c
+++ b/src/microhttpd/test_str.c
@@ -50,9 +50,9 @@ static const char *const locale_names[] = {
50 "C", 50 "C",
51 "", /* System default locale */ 51 "", /* System default locale */
52#if defined(_WIN32) && ! defined(__CYGWIN__) 52#if defined(_WIN32) && ! defined(__CYGWIN__)
53 ".OCP", /* W32 system default OEM code page */ 53 ".OCP", /* W32 system default OEM code page */
54 ".ACP", /* W32 system default ANSI code page */ 54 ".ACP", /* W32 system default ANSI code page */
55 ".65001", /* UTF-8 */ 55 ".65001", /* UTF-8 */
56 ".437", 56 ".437",
57 ".850", 57 ".850",
58 ".857", 58 ".857",
@@ -455,50 +455,50 @@ static const struct two_neq_strs neq_strings[] = {
455 {D_STR_W_LEN ("zyxwvutsrqponwMLKJIHGFEDCBA"), D_STR_W_LEN ( 455 {D_STR_W_LEN ("zyxwvutsrqponwMLKJIHGFEDCBA"), D_STR_W_LEN (
456 "ZYXWVUTSRQPON%mlkjihgfedcba"), 13}, 456 "ZYXWVUTSRQPON%mlkjihgfedcba"), 13},
457 457
458 {D_STR_W_LEN ("S\xbdur veulent plus d'\xbdufs."), /* "Sœur veulent plus d'œufs." in ISO-8859-15 */ 458 {D_STR_W_LEN ("S\xbdur veulent plus d'\xbdufs."), /* "Sœur veulent plus d'œufs." in ISO-8859-15 */
459 D_STR_W_LEN ("S\xbcUR VEULENT PLUS D'\xbcUFS."), 1}, /* "SŒUR VEULENT PLUS D'ŒUFS." in ISO-8859-15 */ 459 D_STR_W_LEN ("S\xbcUR VEULENT PLUS D'\xbcUFS."), 1}, /* "SŒUR VEULENT PLUS D'ŒUFS." in ISO-8859-15 */
460 {D_STR_W_LEN ("S\x9cur veulent plus d'\x9cufs."), /* "Sœur veulent plus d'œufs." in CP1252 */ 460 {D_STR_W_LEN ("S\x9cur veulent plus d'\x9cufs."), /* "Sœur veulent plus d'œufs." in CP1252 */
461 D_STR_W_LEN ("S\x8cUR VEULENT PLUS D'\x8cUFS."), 1}, /* "SŒUR VEULENT PLUS D'ŒUFS." in CP1252 */ 461 D_STR_W_LEN ("S\x8cUR VEULENT PLUS D'\x8cUFS."), 1}, /* "SŒUR VEULENT PLUS D'ŒUFS." in CP1252 */
462 {D_STR_W_LEN ("S\xc5\x93ur veulent plus d'\xc5\x93ufs."), /* "Sœur veulent plus d'œufs." in UTF-8 */ 462 {D_STR_W_LEN ("S\xc5\x93ur veulent plus d'\xc5\x93ufs."), /* "Sœur veulent plus d'œufs." in UTF-8 */
463 D_STR_W_LEN ("S\xc5\x92UR VEULENT PLUS D'\xc5\x92UFS."), 2}, /* "SŒUR VEULENT PLUS D'ŒUFS." in UTF-8 */ 463 D_STR_W_LEN ("S\xc5\x92UR VEULENT PLUS D'\xc5\x92UFS."), 2}, /* "SŒUR VEULENT PLUS D'ŒUFS." in UTF-8 */
464 464
465 {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 */ 465 {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 */
466 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 */ 466 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 */
467 {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 */ 467 {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 */
468 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 */ 468 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 */
469 {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 */ 469 {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 */
470 D_STR_W_LEN ("UM EIN SCH\xc3\x96NES M\xc3\x84" "DCHEN ZU K\xc3\x9cSSEN."), 470 D_STR_W_LEN ("UM EIN SCH\xc3\x96NES M\xc3\x84" "DCHEN ZU K\xc3\x9cSSEN."),
471 11}, /* "UM EIN SCHÖNES MÄDCHEN ZU KÜSSEN." in UTF-8 */ 471 11}, /* "UM EIN SCHÖNES MÄDCHEN ZU KÜSSEN." in UTF-8 */
472 472
473 {D_STR_W_LEN ("\x98stanbul"), /* "İstanbul" in CP857 */ 473 {D_STR_W_LEN ("\x98stanbul"), /* "İstanbul" in CP857 */
474 D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in CP857 */ 474 D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in CP857 */
475 {D_STR_W_LEN ("\xddstanbul"), /* "İstanbul" in ISO-8859-9/CP1254 */ 475 {D_STR_W_LEN ("\xddstanbul"), /* "İstanbul" in ISO-8859-9/CP1254 */
476 D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in ISO-8859-9/CP1254 */ 476 D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in ISO-8859-9/CP1254 */
477 {D_STR_W_LEN ("\xc4\xb0stanbul"), /* "İstanbul" in UTF-8 */ 477 {D_STR_W_LEN ("\xc4\xb0stanbul"), /* "İstanbul" in UTF-8 */
478 D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in UTF-8 */ 478 D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in UTF-8 */
479 {D_STR_W_LEN ("Diyarbak\x8dr"), /* "Diyarbakır" in CP857 */ 479 {D_STR_W_LEN ("Diyarbak\x8dr"), /* "Diyarbakır" in CP857 */
480 D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in CP857 */ 480 D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in CP857 */
481 {D_STR_W_LEN ("Diyarbak\xfdr"), /* "Diyarbakır" in ISO-8859-9/CP1254 */ 481 {D_STR_W_LEN ("Diyarbak\xfdr"), /* "Diyarbakır" in ISO-8859-9/CP1254 */
482 D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in ISO-8859-9/CP1254 */ 482 D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in ISO-8859-9/CP1254 */
483 {D_STR_W_LEN ("Diyarbak\xc4\xb1r"), /* "Diyarbakır" in UTF-8 */ 483 {D_STR_W_LEN ("Diyarbak\xc4\xb1r"), /* "Diyarbakır" in UTF-8 */
484 D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in UTF-8 */ 484 D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in UTF-8 */
485 485
486 {D_STR_W_LEN ("\x92\xa5\xe1\xe2\xae\xa2\xa0\xef \x91\xe2\xe0\xae\xaa\xa0."), /* "Тестовая Строка." in CP866 */ 486 {D_STR_W_LEN ("\x92\xa5\xe1\xe2\xae\xa2\xa0\xef \x91\xe2\xe0\xae\xaa\xa0."), /* "Тестовая Строка." in CP866 */
487 D_STR_W_LEN ("\x92\x85\x91\x92\x8e\x82\x80\x9f \x91\x92\x90\x8e\x8a\x80."), 487 D_STR_W_LEN ("\x92\x85\x91\x92\x8e\x82\x80\x9f \x91\x92\x90\x8e\x8a\x80."),
488 1}, /* "ТЕСТОВАЯ СТРОКА." in CP866 */ 488 1}, /* "ТЕСТОВАЯ СТРОКА." in CP866 */
489 {D_STR_W_LEN ("\xd2\xe5\xf1\xf2\xee\xe2\xe0\xff \xd1\xf2\xf0\xee\xea\xe0."), /* "Тестовая Строка." in CP1251 */ 489 {D_STR_W_LEN ("\xd2\xe5\xf1\xf2\xee\xe2\xe0\xff \xd1\xf2\xf0\xee\xea\xe0."), /* "Тестовая Строка." in CP1251 */
490 D_STR_W_LEN ("\xd2\xc5\xd1\xd2\xce\xc2\xc0\xdf \xd1\xd2\xd0\xce\xca\xc0."), 490 D_STR_W_LEN ("\xd2\xc5\xd1\xd2\xce\xc2\xc0\xdf \xd1\xd2\xd0\xce\xca\xc0."),
491 1}, /* "ТЕСТОВАЯ СТРОКА." in CP1251 */ 491 1}, /* "ТЕСТОВАЯ СТРОКА." in CP1251 */
492 {D_STR_W_LEN ("\xf4\xc5\xd3\xd4\xcf\xd7\xc1\xd1 \xf3\xd4\xd2\xcf\xcb\xc1."), /* "Тестовая Строка." in KOI8-R */ 492 {D_STR_W_LEN ("\xf4\xc5\xd3\xd4\xcf\xd7\xc1\xd1 \xf3\xd4\xd2\xcf\xcb\xc1."), /* "Тестовая Строка." in KOI8-R */
493 D_STR_W_LEN ("\xf4\xe5\xf3\xf4\xef\xf7\xe1\xf1 \xf3\xf4\xf2\xef\xeb\xe1."), 493 D_STR_W_LEN ("\xf4\xe5\xf3\xf4\xef\xf7\xe1\xf1 \xf3\xf4\xf2\xef\xeb\xe1."),
494 1}, /* "ТЕСТОВАЯ СТРОКА." in KOI8-R */ 494 1}, /* "ТЕСТОВАЯ СТРОКА." in KOI8-R */
495 {D_STR_W_LEN ("\xc2\xd5\xe1\xe2\xde\xd2\xd0\xef \xc1\xe2\xe0\xde\xda\xd0."), /* "Тестовая Строка." in ISO-8859-5 */ 495 {D_STR_W_LEN ("\xc2\xd5\xe1\xe2\xde\xd2\xd0\xef \xc1\xe2\xe0\xde\xda\xd0."), /* "Тестовая Строка." in ISO-8859-5 */
496 D_STR_W_LEN ("\xc2\xb5\xc1\xc2\xbe\xb2\xb0\xcf \xc1\xc2\xc0\xbe\xba\xb0."), 496 D_STR_W_LEN ("\xc2\xb5\xc1\xc2\xbe\xb2\xb0\xcf \xc1\xc2\xc0\xbe\xba\xb0."),
497 1}, /* "ТЕСТОВАЯ СТРОКА." in ISO-8859-5 */ 497 1}, /* "ТЕСТОВАЯ СТРОКА." in ISO-8859-5 */
498 {D_STR_W_LEN ("\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82\xd0\xbe\xd0\xb2\xd0\xb0\xd1" 498 {D_STR_W_LEN ("\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82\xd0\xbe\xd0\xb2\xd0\xb0\xd1"
499 "\x8f \xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0."), /* "Тестовая Строка." in UTF-8 */ 499 "\x8f \xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0."), /* "Тестовая Строка." in UTF-8 */
500 D_STR_W_LEN ("\xd0\xa2\xd0\x95\xd0\xa1\xd0\xa2\xd0\x9e\xd0\x92\xd0\x90\xd0" 500 D_STR_W_LEN ("\xd0\xa2\xd0\x95\xd0\xa1\xd0\xa2\xd0\x9e\xd0\x92\xd0\x90\xd0"
501 "\xaf \xd0\xa1\xd0\xa2\xd0\xa0\xd0\x9e\xd0\x9a\xd0\x90."), 3} /* "ТЕСТОВАЯ СТРОКА." in UTF-8 */ 501 "\xaf \xd0\xa1\xd0\xa2\xd0\xa0\xd0\x9e\xd0\x9a\xd0\x90."), 3} /* "ТЕСТОВАЯ СТРОКА." in UTF-8 */
502}; 502};
503 503
504 504
@@ -900,15 +900,15 @@ static const struct str_with_value dstrs_w_values[] = {
900 {D_STR_W_LEN ("00000000000000000000000031295483"), 32, 31295483}, 900 {D_STR_W_LEN ("00000000000000000000000031295483"), 32, 31295483},
901 901
902 /* numbers below and above limits */ 902 /* numbers below and above limits */
903 {D_STR_W_LEN ("127"), 3, 127}, /* 0x7F, SCHAR_MAX */ 903 {D_STR_W_LEN ("127"), 3, 127}, /* 0x7F, SCHAR_MAX */
904 {D_STR_W_LEN ("128"), 3, 128}, /* 0x80, SCHAR_MAX+1 */ 904 {D_STR_W_LEN ("128"), 3, 128}, /* 0x80, SCHAR_MAX+1 */
905 {D_STR_W_LEN ("255"), 3, 255}, /* 0xFF, UCHAR_MAX */ 905 {D_STR_W_LEN ("255"), 3, 255}, /* 0xFF, UCHAR_MAX */
906 {D_STR_W_LEN ("256"), 3, 256}, /* 0x100, UCHAR_MAX+1 */ 906 {D_STR_W_LEN ("256"), 3, 256}, /* 0x100, UCHAR_MAX+1 */
907 {D_STR_W_LEN ("32767"), 5, 32767}, /* 0x7FFF, INT16_MAX */ 907 {D_STR_W_LEN ("32767"), 5, 32767}, /* 0x7FFF, INT16_MAX */
908 {D_STR_W_LEN ("32768"), 5, 32768}, /* 0x8000, INT16_MAX+1 */ 908 {D_STR_W_LEN ("32768"), 5, 32768}, /* 0x8000, INT16_MAX+1 */
909 {D_STR_W_LEN ("65535"), 5, 65535}, /* 0xFFFF, UINT16_MAX */ 909 {D_STR_W_LEN ("65535"), 5, 65535}, /* 0xFFFF, UINT16_MAX */
910 {D_STR_W_LEN ("65536"), 5, 65536}, /* 0x10000, UINT16_MAX+1 */ 910 {D_STR_W_LEN ("65536"), 5, 65536}, /* 0x10000, UINT16_MAX+1 */
911 {D_STR_W_LEN ("2147483647"), 10, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */ 911 {D_STR_W_LEN ("2147483647"), 10, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */
912 {D_STR_W_LEN ("2147483648"), 10, UINT64_C (2147483648)}, /* 0x80000000, INT32_MAX+1 */ 912 {D_STR_W_LEN ("2147483648"), 10, UINT64_C (2147483648)}, /* 0x80000000, INT32_MAX+1 */
913 {D_STR_W_LEN ("4294967295"), 10, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */ 913 {D_STR_W_LEN ("4294967295"), 10, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */
914 {D_STR_W_LEN ("4294967296"), 10, UINT64_C (4294967296)}, /* 0x100000000, UINT32_MAX+1 */ 914 {D_STR_W_LEN ("4294967296"), 10, UINT64_C (4294967296)}, /* 0x100000000, UINT32_MAX+1 */
@@ -968,14 +968,14 @@ const struct str_with_len str_ovflw[] = {
968const struct str_with_len str_no_num[] = { 968const struct str_with_len str_no_num[] = {
969 D_STR_W_LEN ("zero"), 969 D_STR_W_LEN ("zero"),
970 D_STR_W_LEN ("one"), 970 D_STR_W_LEN ("one"),
971 D_STR_W_LEN ("\xb9\xb2\xb3"), /* superscript "123" in ISO-8859-1/CP1252 */ 971 D_STR_W_LEN ("\xb9\xb2\xb3"), /* superscript "123" in ISO-8859-1/CP1252 */
972 D_STR_W_LEN ("\xc2\xb9\xc2\xb2\xc2\xb3"), /* superscript "123" in UTF-8 */ 972 D_STR_W_LEN ("\xc2\xb9\xc2\xb2\xc2\xb3"), /* superscript "123" in UTF-8 */
973 D_STR_W_LEN ("\xd9\xa1\xd9\xa2\xd9\xa3"), /* Arabic-Indic "١٢٣" in UTF-8 */ 973 D_STR_W_LEN ("\xd9\xa1\xd9\xa2\xd9\xa3"), /* Arabic-Indic "١٢٣" in UTF-8 */
974 D_STR_W_LEN ("\xdb\xb1\xdb\xb2\xdb\xb3"), /* Ext Arabic-Indic "۱۲۳" in UTF-8 */ 974 D_STR_W_LEN ("\xdb\xb1\xdb\xb2\xdb\xb3"), /* Ext Arabic-Indic "۱۲۳" in UTF-8 */
975 D_STR_W_LEN ("\xe0\xa5\xa7\xe0\xa5\xa8\xe0\xa5\xa9"), /* Devanagari "१२३" in UTF-8 */ 975 D_STR_W_LEN ("\xe0\xa5\xa7\xe0\xa5\xa8\xe0\xa5\xa9"), /* Devanagari "१२३" in UTF-8 */
976 D_STR_W_LEN ("\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89"), /* Chinese "一二三" in UTF-8 */ 976 D_STR_W_LEN ("\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89"), /* Chinese "一二三" in UTF-8 */
977 D_STR_W_LEN ("\xd2\xbb\xb6\xfe\xc8\xfd"), /* Chinese "一二三" in GB2312/CP936 */ 977 D_STR_W_LEN ("\xd2\xbb\xb6\xfe\xc8\xfd"), /* Chinese "一二三" in GB2312/CP936 */
978 D_STR_W_LEN ("\x1B\x24\x29\x41\x0E\x52\x3B\x36\x7E\x48\x7D\x0F") /* Chinese "一二三" in ISO-2022-CN */ 978 D_STR_W_LEN ("\x1B\x24\x29\x41\x0E\x52\x3B\x36\x7E\x48\x7D\x0F") /* Chinese "一二三" in ISO-2022-CN */
979}; 979};
980 980
981/* valid hex string for conversion to unsigned integer value */ 981/* valid hex string for conversion to unsigned integer value */
@@ -1013,25 +1013,25 @@ static const struct str_with_value xdstrs_w_values[] = {
1013 {D_STR_W_LEN ("0000000000000000000000003A29e4C3"), 32, 0x3A29E4C3}, 1013 {D_STR_W_LEN ("0000000000000000000000003A29e4C3"), 32, 0x3A29E4C3},
1014 1014
1015 /* numbers below and above limits */ 1015 /* numbers below and above limits */
1016 {D_STR_W_LEN ("7F"), 2, 127}, /* 0x7F, SCHAR_MAX */ 1016 {D_STR_W_LEN ("7F"), 2, 127}, /* 0x7F, SCHAR_MAX */
1017 {D_STR_W_LEN ("7f"), 2, 127}, /* 0x7F, SCHAR_MAX */ 1017 {D_STR_W_LEN ("7f"), 2, 127}, /* 0x7F, SCHAR_MAX */
1018 {D_STR_W_LEN ("80"), 2, 128}, /* 0x80, SCHAR_MAX+1 */ 1018 {D_STR_W_LEN ("80"), 2, 128}, /* 0x80, SCHAR_MAX+1 */
1019 {D_STR_W_LEN ("fF"), 2, 255}, /* 0xFF, UCHAR_MAX */ 1019 {D_STR_W_LEN ("fF"), 2, 255}, /* 0xFF, UCHAR_MAX */
1020 {D_STR_W_LEN ("Ff"), 2, 255}, /* 0xFF, UCHAR_MAX */ 1020 {D_STR_W_LEN ("Ff"), 2, 255}, /* 0xFF, UCHAR_MAX */
1021 {D_STR_W_LEN ("FF"), 2, 255}, /* 0xFF, UCHAR_MAX */ 1021 {D_STR_W_LEN ("FF"), 2, 255}, /* 0xFF, UCHAR_MAX */
1022 {D_STR_W_LEN ("ff"), 2, 255}, /* 0xFF, UCHAR_MAX */ 1022 {D_STR_W_LEN ("ff"), 2, 255}, /* 0xFF, UCHAR_MAX */
1023 {D_STR_W_LEN ("100"), 3, 256}, /* 0x100, UCHAR_MAX+1 */ 1023 {D_STR_W_LEN ("100"), 3, 256}, /* 0x100, UCHAR_MAX+1 */
1024 {D_STR_W_LEN ("7fff"), 4, 32767}, /* 0x7FFF, INT16_MAX */ 1024 {D_STR_W_LEN ("7fff"), 4, 32767}, /* 0x7FFF, INT16_MAX */
1025 {D_STR_W_LEN ("7FFF"), 4, 32767}, /* 0x7FFF, INT16_MAX */ 1025 {D_STR_W_LEN ("7FFF"), 4, 32767}, /* 0x7FFF, INT16_MAX */
1026 {D_STR_W_LEN ("7Fff"), 4, 32767}, /* 0x7FFF, INT16_MAX */ 1026 {D_STR_W_LEN ("7Fff"), 4, 32767}, /* 0x7FFF, INT16_MAX */
1027 {D_STR_W_LEN ("8000"), 4, 32768}, /* 0x8000, INT16_MAX+1 */ 1027 {D_STR_W_LEN ("8000"), 4, 32768}, /* 0x8000, INT16_MAX+1 */
1028 {D_STR_W_LEN ("ffff"), 4, 65535}, /* 0xFFFF, UINT16_MAX */ 1028 {D_STR_W_LEN ("ffff"), 4, 65535}, /* 0xFFFF, UINT16_MAX */
1029 {D_STR_W_LEN ("FFFF"), 4, 65535}, /* 0xFFFF, UINT16_MAX */ 1029 {D_STR_W_LEN ("FFFF"), 4, 65535}, /* 0xFFFF, UINT16_MAX */
1030 {D_STR_W_LEN ("FffF"), 4, 65535}, /* 0xFFFF, UINT16_MAX */ 1030 {D_STR_W_LEN ("FffF"), 4, 65535}, /* 0xFFFF, UINT16_MAX */
1031 {D_STR_W_LEN ("10000"), 5, 65536}, /* 0x10000, UINT16_MAX+1 */ 1031 {D_STR_W_LEN ("10000"), 5, 65536}, /* 0x10000, UINT16_MAX+1 */
1032 {D_STR_W_LEN ("7FFFFFFF"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */ 1032 {D_STR_W_LEN ("7FFFFFFF"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */
1033 {D_STR_W_LEN ("7fffffff"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */ 1033 {D_STR_W_LEN ("7fffffff"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */
1034 {D_STR_W_LEN ("7FFffFff"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */ 1034 {D_STR_W_LEN ("7FFffFff"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */
1035 {D_STR_W_LEN ("80000000"), 8, UINT64_C (2147483648)}, /* 0x80000000, INT32_MAX+1 */ 1035 {D_STR_W_LEN ("80000000"), 8, UINT64_C (2147483648)}, /* 0x80000000, INT32_MAX+1 */
1036 {D_STR_W_LEN ("FFFFFFFF"), 8, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */ 1036 {D_STR_W_LEN ("FFFFFFFF"), 8, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */
1037 {D_STR_W_LEN ("ffffffff"), 8, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */ 1037 {D_STR_W_LEN ("ffffffff"), 8, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */
@@ -1124,8 +1124,8 @@ const struct str_with_len strx_ovflw[] = {
1124 D_STR_W_LEN ("434532891232591226417"), 1124 D_STR_W_LEN ("434532891232591226417"),
1125 D_STR_W_LEN ("10000000000000000a"), 1125 D_STR_W_LEN ("10000000000000000a"),
1126 D_STR_W_LEN ("10000000000000000E"), 1126 D_STR_W_LEN ("10000000000000000E"),
1127 D_STR_W_LEN ("100000000000000000 and nothing"), /* 0x10000000000000000, UINT64_MAX+1 */ 1127 D_STR_W_LEN ("100000000000000000 and nothing"), /* 0x10000000000000000, UINT64_MAX+1 */
1128 D_STR_W_LEN ("100000000000000000xx"), /* 0x10000000000000000, UINT64_MAX+1 */ 1128 D_STR_W_LEN ("100000000000000000xx"), /* 0x10000000000000000, UINT64_MAX+1 */
1129 D_STR_W_LEN ("99999999999999999999"), 1129 D_STR_W_LEN ("99999999999999999999"),
1130 D_STR_W_LEN ("18446744073709551616abcd"), 1130 D_STR_W_LEN ("18446744073709551616abcd"),
1131 D_STR_W_LEN ("20000000000000000000 suffix"), 1131 D_STR_W_LEN ("20000000000000000000 suffix"),
diff --git a/src/microhttpd/test_upgrade_large.c b/src/microhttpd/test_upgrade_large.c
index 8b721bc5..fb60ddd8 100644
--- a/src/microhttpd/test_upgrade_large.c
+++ b/src/microhttpd/test_upgrade_large.c
@@ -53,10 +53,164 @@
53#include "test_helpers.h" 53#include "test_helpers.h"
54 54
55#define LARGE_STRING \ 55#define LARGE_STRING \
56 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" 56 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
57 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
58 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
59 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
60 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
61 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
62 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
63 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
64 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
65 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
66 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
67 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
68 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
69 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
70 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
71 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
72 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
73 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
74 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
75 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
76 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
77 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
78 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
79 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
80 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
81 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
82 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
83 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
84 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
85 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
86 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
87 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
88 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
89 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
90 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
91 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
92 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
93 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
94 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
95 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
96 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
97 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
98 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
99 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
100 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
101 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
102 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
103 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
104 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
105 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
106 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
107 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
108 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
109 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
110 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
111 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
112 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
113 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
114 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
115 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
116 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
117 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
118 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
119 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelXloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
120 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
121 "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello\n"
122
57 123
58#define LARGE_REPLY_STRING \ 124#define LARGE_REPLY_STRING \
59 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" 125 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
126 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
127 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
128 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
129 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
130 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
131 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
132 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
133 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
134 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
135 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
136 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
137 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
138 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
139 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
140 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
141 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
142 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
143 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
144 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
145 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
146 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
147 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
148 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
149 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
150 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
151 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
152 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
153 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
154 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
155 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
156 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
157 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
158 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
159 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
160 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
161 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
162 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
163 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
164 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
165 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
166 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
167 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
168 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
169 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
170 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
171 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
172 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
173 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
174 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
175 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
176 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
177 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
178 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
179 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
180 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
181 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
182 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
183 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
184 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
185 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
186 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
187 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
188 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
189 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
190 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
191 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
192 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
193 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
194 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
195 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
196 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
197 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
198 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
199 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
200 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
201 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
202 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
203 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
204 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
205 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
206 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
207 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
208 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
209 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
210 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
211 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
212 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
213 "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld\n"
60 214
61#ifdef HTTPS_SUPPORT 215#ifdef HTTPS_SUPPORT
62#include <gnutls/gnutls.h> 216#include <gnutls/gnutls.h>
@@ -338,6 +492,7 @@ wr_handshake (struct wr_socket *s)
338 492
339/** 493/**
340 * Send data to remote by socket. 494 * Send data to remote by socket.
495 *
341 * @param s the socket to use 496 * @param s the socket to use
342 * @param buf the buffer with data to send 497 * @param buf the buffer with data to send
343 * @param len the length of data in @a buf 498 * @param len the length of data in @a buf
@@ -351,15 +506,24 @@ wr_send (struct wr_socket *s,
351 size_t len) 506 size_t len)
352{ 507{
353 if (wr_plain == s->t) 508 if (wr_plain == s->t)
354 return MHD_send_ (s->fd, buf, len); 509 {
510 ssize_t ret;
511
512 ret = MHD_send_ (s->fd, buf, len);
513 (void) MHD_socket_cork_ (s->fd,
514 false);
515 return ret;
516 }
355#ifdef HTTPS_SUPPORT 517#ifdef HTTPS_SUPPORT
356 if (wr_tls == s->t) 518 if (wr_tls == s->t)
357 { 519 {
358 ssize_t ret; 520 ssize_t ret;
521
359 if (! s->tls_connected && ! wr_handshake (s)) 522 if (! s->tls_connected && ! wr_handshake (s))
360 return -1; 523 return -1;
361 524 ret = gnutls_record_send (s->tls_s,
362 ret = gnutls_record_send (s->tls_s, buf, len); 525 buf,
526 len);
363 if (ret > 0) 527 if (ret > 0)
364 return ret; 528 return ret;
365 if (GNUTLS_E_AGAIN == ret) 529 if (GNUTLS_E_AGAIN == ret)
@@ -591,7 +755,7 @@ kick_select ()
591{ 755{
592 if (MHD_ITC_IS_VALID_ (kicker)) 756 if (MHD_ITC_IS_VALID_ (kicker))
593 { 757 {
594 MHD_itc_activate_ (kicker, "K"); 758 (void) MHD_itc_activate_ (kicker, "K");
595 } 759 }
596} 760}
597 761
@@ -698,6 +862,8 @@ recv_all (struct wr_socket *sock,
698 } 862 }
699 abort (); 863 abort ();
700 } 864 }
865 if (0 != strncmp (text, buf, off + ret))
866 abort ();
701 } 867 }
702 if (0 != strncmp (text, buf, len)) 868 if (0 != strncmp (text, buf, len))
703 abort (); 869 abort ();
@@ -715,8 +881,10 @@ run_usock (void *cls)
715{ 881{
716 struct MHD_UpgradeResponseHandle *urh = cls; 882 struct MHD_UpgradeResponseHandle *urh = cls;
717 883
718 MHD_upgrade_action (urh, 884 if (MHD_YES !=
719 MHD_UPGRADE_ACTION_CORK_OFF); 885 MHD_upgrade_action (urh,
886 MHD_UPGRADE_ACTION_CORK_OFF))
887 abort ();
720 send_all (usock, 888 send_all (usock,
721 LARGE_STRING); 889 LARGE_STRING);
722 recv_all (usock, 890 recv_all (usock,
@@ -953,7 +1121,7 @@ run_mhd_select_loop (struct MHD_Daemon *daemon)
953 &ws, 1121 &ws,
954 &es); 1122 &es);
955 } 1123 }
956 MHD_itc_destroy_ (kicker); 1124 (void) MHD_itc_destroy_ (kicker);
957 MHD_itc_set_invalid_ (kicker); 1125 MHD_itc_set_invalid_ (kicker);
958} 1126}
959 1127
@@ -991,7 +1159,6 @@ run_mhd_epoll_loop (struct MHD_Daemon *daemon)
991 MHD_UNSIGNED_LONG_LONG to; 1159 MHD_UNSIGNED_LONG_LONG to;
992 struct timeval tv; 1160 struct timeval tv;
993 int ret; 1161 int ret;
994 char drain[128];
995 1162
996 di = MHD_get_daemon_info (daemon, 1163 di = MHD_get_daemon_info (daemon,
997 MHD_DAEMON_INFO_EPOLL_FD); 1164 MHD_DAEMON_INFO_EPOLL_FD);
@@ -1023,7 +1190,7 @@ run_mhd_epoll_loop (struct MHD_Daemon *daemon)
1023 MHD_itc_clear_ (kicker); 1190 MHD_itc_clear_ (kicker);
1024 MHD_run (daemon); 1191 MHD_run (daemon);
1025 } 1192 }
1026 MHD_itc_destroy_ (kicker); 1193 (void) MHD_itc_destroy_ (kicker);
1027 MHD_itc_set_invalid_ (kicker); 1194 MHD_itc_set_invalid_ (kicker);
1028} 1195}
1029 1196
@@ -1203,7 +1370,6 @@ main (int argc,
1203 if (has_param (argc, argv, "-q") || 1370 if (has_param (argc, argv, "-q") ||
1204 has_param (argc, argv, "--quiet")) 1371 has_param (argc, argv, "--quiet"))
1205 verbose = 0; 1372 verbose = 0;
1206
1207 if (test_tls) 1373 if (test_tls)
1208 { 1374 {
1209#ifdef HTTPS_SUPPORT 1375#ifdef HTTPS_SUPPORT
@@ -1247,7 +1413,6 @@ main (int argc,
1247 return 77; 1413 return 77;
1248#endif /* ! HTTPS_SUPPORT */ 1414#endif /* ! HTTPS_SUPPORT */
1249 } 1415 }
1250
1251 /* run tests */ 1416 /* run tests */
1252 if (verbose) 1417 if (verbose)
1253 printf ("Starting HTTP \"Upgrade\" tests with %s connections.\n", 1418 printf ("Starting HTTP \"Upgrade\" tests with %s connections.\n",
@@ -1262,7 +1427,6 @@ main (int argc,
1262 res); 1427 res);
1263 else if (verbose) 1428 else if (verbose)
1264 printf ("PASSED: Upgrade with external select.\n"); 1429 printf ("PASSED: Upgrade with external select.\n");
1265
1266 /* Try external auto */ 1430 /* Try external auto */
1267 res = test_upgrade (MHD_USE_AUTO, 1431 res = test_upgrade (MHD_USE_AUTO,
1268 0); 1432 0);
diff --git a/src/microhttpd/tsearch.c b/src/microhttpd/tsearch.c
index 78f37608..1d74dcce 100644
--- a/src/microhttpd/tsearch.c
+++ b/src/microhttpd/tsearch.c
@@ -24,7 +24,7 @@ typedef struct node
24/* $NetBSD: tsearch.c,v 1.5 2005/11/29 03:12:00 christos Exp $ */ 24/* $NetBSD: tsearch.c,v 1.5 2005/11/29 03:12:00 christos Exp $ */
25/* find or insert datum into search tree */ 25/* find or insert datum into search tree */
26void * 26void *
27tsearch (const void *vkey, /* key to be located */ 27tsearch (const void *vkey, /* key to be located */
28 void **vrootp, /* address of tree root */ 28 void **vrootp, /* address of tree root */
29 int (*compar)(const void *, const void *)) 29 int (*compar)(const void *, const void *))
30{ 30{
@@ -38,19 +38,19 @@ tsearch (const void *vkey, /* key to be located */
38 { /* Knuth's T1: */ 38 { /* Knuth's T1: */
39 int r; 39 int r;
40 40
41 if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */ 41 if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
42 return *rootp; /* we found it! */ 42 return *rootp; /* we found it! */
43 43
44 rootp = (r < 0) ? 44 rootp = (r < 0) ?
45 &(*rootp)->llink : /* T3: follow left branch */ 45 &(*rootp)->llink : /* T3: follow left branch */
46 &(*rootp)->rlink; /* T4: follow right branch */ 46 &(*rootp)->rlink; /* T4: follow right branch */
47 } 47 }
48 48
49 q = malloc (sizeof(node_t)); /* T5: key not found */ 49 q = malloc (sizeof(node_t)); /* T5: key not found */
50 if (q) 50 if (q)
51 { /* make new node */ 51 { /* make new node */
52 *rootp = q; /* link new node to old */ 52 *rootp = q; /* link new node to old */
53 q->key = vkey; /* initialize new node */ 53 q->key = vkey; /* initialize new node */
54 q->llink = q->rlink = NULL; 54 q->llink = q->rlink = NULL;
55 } 55 }
56 return q; 56 return q;
@@ -73,8 +73,8 @@ tfind (const void *vkey, /* key to be found */
73 { /* T1: */ 73 { /* T1: */
74 int r; 74 int r;
75 75
76 if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */ 76 if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
77 return *rootp; /* key found */ 77 return *rootp; /* key found */
78 rootp = (r < 0) ? 78 rootp = (r < 0) ?
79 &(*rootp)->llink : /* T3: follow left branch */ 79 &(*rootp)->llink : /* T3: follow left branch */
80 &(*rootp)->rlink; /* T4: follow right branch */ 80 &(*rootp)->rlink; /* T4: follow right branch */
@@ -112,17 +112,17 @@ tdelete (const void *__restrict vkey,
112 &(*rootp)->llink : /* follow llink branch */ 112 &(*rootp)->llink : /* follow llink branch */
113 &(*rootp)->rlink; /* follow rlink branch */ 113 &(*rootp)->rlink; /* follow rlink branch */
114 if (*rootp == NULL) 114 if (*rootp == NULL)
115 return NULL; /* key not found */ 115 return NULL; /* key not found */
116 } 116 }
117 r = (*rootp)->rlink; /* D1: */ 117 r = (*rootp)->rlink; /* D1: */
118 if ((q = (*rootp)->llink) == NULL) /* Left NULL? */ 118 if ((q = (*rootp)->llink) == NULL) /* Left NULL? */
119 { 119 {
120 q = r; 120 q = r;
121 } 121 }
122 else if (r != NULL) 122 else if (r != NULL)
123 { /* Right link is NULL? */ 123 { /* Right link is NULL? */
124 if (r->llink == NULL) 124 if (r->llink == NULL)
125 { /* D2: Find successor */ 125 { /* D2: Find successor */
126 r->llink = q; 126 r->llink = q;
127 q = r; 127 q = r;
128 } 128 }
@@ -135,7 +135,7 @@ tdelete (const void *__restrict vkey,
135 q->rlink = (*rootp)->rlink; 135 q->rlink = (*rootp)->rlink;
136 } 136 }
137 } 137 }
138 free (*rootp); /* D4: Free node */ 138 free (*rootp); /* D4: Free node */
139 *rootp = q; /* link parent to new node */ 139 *rootp = q; /* link parent to new node */
140 return p; 140 return p;
141} 141}