Merge pull request #53 from meta-ed/hexencoding

Prevent logfile corruption by control codes

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg 2022-06-17 18:17:53 +02:00 committed by GitHub
commit 34c812415d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 12 deletions

View File

@ -4,7 +4,7 @@ Change Log
All relevant changes to the project are documented in this file.
[v2.4.0][] - 2022-05-29
[v2.4.0][] - 2022-06-16
-----------------------
### Changes
@ -31,6 +31,11 @@ All relevant changes to the project are documented in this file.
data to be logged -- this is a temporary fix until we have support
for parsing the Unicode BOM, as defined in RFC5424
- Issue #50: fix issue with wall message, by Edward K. McGuire
- Do not corrupt logfiles when kernel messages contain control codes,
notably `\n`. Instead, preserve the kernel's protective C-style hex
encoding. For example, `\n` embedded in a message by a kernel-level
facility is received as `\x0a`. See:
<https://kernel.org/doc/Documentation/ABI/testing/dev-kmsg>
[v2.3.0][] - 2021-11-27

View File

@ -1429,18 +1429,8 @@ void printsys(char *msg)
}
q = lp;
while (*p != '\0' && (c = *p++) != '\n' && q < &line[MAXLINE]) {
/* Linux /dev/kmsg C-style hex encoding. */
if (c == '\\' && *p == 'x') {
char code[5] = "0x\0\0\0";
p++;
code[2] = *p++;
code[3] = *p++;
c = (int)strtol(code, NULL, 16);
}
while (*p != '\0' && (c = *p++) != '\n' && q < &line[MAXLINE])
*q++ = c;
}
*q = '\0';
logmsg(&buffer);