From: Miroslav Lichvar Date: Mon, 5 Oct 2020 07:51:52 +0000 (+0200) Subject: socket: process all message headers X-Git-Tag: 4.0~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6e71e902c89855de176be8eb33cfe511f113cb00;p=thirdparty%2Fchrony.git socket: process all message headers If multiple messages were received, don't stop their processing if some header fails. Fixes: 86a3ef9ed192 ("socket: add new socket support") --- diff --git a/socket.c b/socket.c index f35841ca..e67b3313 100644 --- a/socket.c +++ b/socket.c @@ -909,7 +909,7 @@ receive_messages(int sock_fd, int flags, int max_messages, int *num_messages) { struct MessageHeader *hdr; SCK_Message *messages; - unsigned int i, n; + unsigned int i, n, n_ok; int ret, recv_flags = 0; assert(initialised); @@ -953,18 +953,20 @@ receive_messages(int sock_fd, int flags, int max_messages, int *num_messages) received_messages = n; - for (i = 0; i < n; i++) { + for (i = n_ok = 0; i < n; i++) { hdr = ARR_GetElement(recv_headers, i); - if (!process_header(&hdr->msg_hdr, hdr->msg_len, sock_fd, flags, &messages[i])) - return NULL; + if (!process_header(&hdr->msg_hdr, hdr->msg_len, sock_fd, flags, &messages[n_ok])) + continue; - log_message(sock_fd, 1, &messages[i], + log_message(sock_fd, 1, &messages[n_ok], flags & SCK_FLAG_MSG_ERRQUEUE ? "Received error" : "Received", NULL); + + n_ok++; } - *num_messages = n; + *num_messages = n_ok; - return messages; + return n_ok > 0 ? messages : NULL; } /* ================================================== */