]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
kmsg-reader: handle multipart messages
authorCedric Hombourger <cedric.hombourger@siemens.com>
Fri, 13 Jun 2025 17:43:02 +0000 (19:43 +0200)
committern3rdopolis <bluescreenavenger@gmail.com>
Mon, 16 Jun 2025 00:38:00 +0000 (00:38 +0000)
handle_ksmg_message wrongly assumed that all messages are terminated
with a trailing line feed: kernel messages emitted by pr_cont() may
not. At any rate, the return value of the strchr() call ought to be
checked to avoid crashing when parsing incoming messages.

Closes #303

src/libply-splash-core/ply-kmsg-reader.c

index 9e9de214c9137b21c0aca5e56740b6448df05822..fb0ce5046a7ee92d701361b2c7b526b63ee85704 100644 (file)
@@ -86,10 +86,13 @@ handle_kmsg_message (ply_kmsg_reader_t *kmsg_reader,
 
                 fields = strtok_r (read_buffer, ";", &message);
 
-                /* Messages end in \n, any following lines are machine readable. Actual multiline messages are expanded with unhexmangle_to_buffer */
+                /* While most messages end with \n, we may receive multipart messages (e.g. when pr_cont() is used in kernel code). Actual multiline messages are expanded with unhexmangle_to_buffer */
                 msgptr = strchr (message, '\n');
-                if (*msgptr && *msgptr != '\n')
+                if (msgptr == NULL) {
+                        msgptr = read_buffer + bytes_read - 1;
+                } else if (*msgptr && *msgptr != '\n') {
                         msgptr--;
+                }
 
                 unhexmangle_to_buffer (message, (char *) message, msgptr - message + 1);