]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
socket: process all message headers
authorMiroslav Lichvar <mlichvar@redhat.com>
Mon, 5 Oct 2020 07:51:52 +0000 (09:51 +0200)
committerMiroslav Lichvar <mlichvar@redhat.com>
Mon, 5 Oct 2020 16:56:37 +0000 (18:56 +0200)
If multiple messages were received, don't stop their processing if some
header fails.

Fixes: 86a3ef9ed192 ("socket: add new socket support")
socket.c

index f35841ca4565afa5e64e16b1f5a219383bb24fae..e67b33139427887054c38b89775ef16ef24398d4 100644 (file)
--- 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;
 }
 
 /* ================================================== */