diff options
author | Christian Grothoff <christian@grothoff.org> | 2020-09-27 22:12:13 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2020-09-27 22:12:13 +0200 |
commit | beb7fa828c59c31d4a5178b82121435f2069b181 (patch) | |
tree | f5279645b6805e9e33aa1b2edb34df1e2e5c26af /src/microhttpd | |
parent | 1d9f940dca89a5ee95a3247e43440ebd16c903af (diff) | |
download | libmicrohttpd-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.c | 30 | ||||
-rw-r--r-- | src/microhttpd/daemon.c | 159 | ||||
-rw-r--r-- | src/microhttpd/digestauth.c | 4 | ||||
-rw-r--r-- | src/microhttpd/internal.c | 40 | ||||
-rw-r--r-- | src/microhttpd/internal.h | 2 | ||||
-rw-r--r-- | src/microhttpd/md5.h | 2 | ||||
-rw-r--r-- | src/microhttpd/memorypool.c | 6 | ||||
-rw-r--r-- | src/microhttpd/mhd_mono_clock.c | 4 | ||||
-rw-r--r-- | src/microhttpd/mhd_send.c | 12 | ||||
-rw-r--r-- | src/microhttpd/mhd_threads.c | 3 | ||||
-rw-r--r-- | src/microhttpd/postprocessor.c | 8 | ||||
-rw-r--r-- | src/microhttpd/response.c | 12 | ||||
-rw-r--r-- | src/microhttpd/sha256.h | 2 | ||||
-rw-r--r-- | src/microhttpd/test_daemon.c | 6 | ||||
-rw-r--r-- | src/microhttpd/test_postprocessor_large.c | 2 | ||||
-rw-r--r-- | src/microhttpd/test_start_stop.c | 6 | ||||
-rw-r--r-- | src/microhttpd/test_str.c | 144 | ||||
-rw-r--r-- | src/microhttpd/test_upgrade_large.c | 192 | ||||
-rw-r--r-- | src/microhttpd/tsearch.c | 28 |
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 | |||
2438 | check_write_done (struct MHD_Connection *connection, | 2439 | check_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 | <imeout)) ) | 3928 | <imeout)) ) |
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 | ||
29 | struct MD5Context | 29 | struct 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[] = { | |||
968 | const struct str_with_len str_no_num[] = { | 968 | const 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 */ |
26 | void * | 26 | void * |
27 | tsearch (const void *vkey, /* key to be located */ | 27 | tsearch (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 | } |