diff options
author | Lennart Poettering <lennart@poettering.net> | 2024-11-18 23:10:38 +0100 |
---|---|---|
committer | Luca Boccassi <luca.boccassi@gmail.com> | 2025-01-17 20:47:43 +0100 |
commit | ea844c49c3377efd5cc0ee2ad9a416a891f397d8 (patch) | |
tree | d1653934cea6397c1de9f1393535d4e006bd0acd | |
parent | meson: bump C std to gnu17 (diff) | |
download | systemd-ea844c49c3377efd5cc0ee2ad9a416a891f397d8.tar.xz systemd-ea844c49c3377efd5cc0ee2ad9a416a891f397d8.zip |
escape: make 'bad' parameter optional
Treat a NULL bad parameter just like an empty one: do not escape any
additional characters except for the CC chars.
-rw-r--r-- | src/basic/escape.c | 6 | ||||
-rw-r--r-- | src/test/test-escape.c | 2 |
2 files changed, 5 insertions, 3 deletions
diff --git a/src/basic/escape.c b/src/basic/escape.c index 2067be4092..e50ae68cc6 100644 --- a/src/basic/escape.c +++ b/src/basic/escape.c @@ -365,6 +365,8 @@ char* xescape_full(const char *s, const char *bad, size_t console_width, XEscape char *ans, *t, *prev, *prev2; const char *f; + assert(s); + /* Escapes all chars in bad, in addition to \ and all special chars, in \xFF style escaping. May be * reversed with cunescape(). If XESCAPE_8_BIT is specified, characters >= 127 are let through * unchanged. This corresponds to non-ASCII printable characters in pre-unicode encodings. @@ -397,7 +399,7 @@ char* xescape_full(const char *s, const char *bad, size_t console_width, XEscape if ((unsigned char) *f < ' ' || (!FLAGS_SET(flags, XESCAPE_8_BIT) && (unsigned char) *f >= 127) || - *f == '\\' || strchr(bad, *f)) { + *f == '\\' || (bad && strchr(bad, *f))) { if ((size_t) (t - ans) + 4 + 3 * force_ellipsis > console_width) break; @@ -437,7 +439,7 @@ char* xescape_full(const char *s, const char *bad, size_t console_width, XEscape char* escape_non_printable_full(const char *str, size_t console_width, XEscapeFlags flags) { if (FLAGS_SET(flags, XESCAPE_8_BIT)) - return xescape_full(str, "", console_width, flags); + return xescape_full(str, /* bad= */ NULL, console_width, flags); else return utf8_escape_non_printable_full(str, console_width, diff --git a/src/test/test-escape.c b/src/test/test-escape.c index 89a25febb4..7021ff54d2 100644 --- a/src/test/test-escape.c +++ b/src/test/test-escape.c @@ -15,7 +15,7 @@ TEST(cescape) { TEST(xescape) { _cleanup_free_ char *t = NULL; - assert_se(t = xescape("abc\\\"\b\f\n\r\t\v\a\003\177\234\313", "")); + assert_se(t = xescape("abc\\\"\b\f\n\r\t\v\a\003\177\234\313", /* bad= */ NULL)); ASSERT_STREQ(t, "abc\\x5c\"\\x08\\x0c\\x0a\\x0d\\x09\\x0b\\x07\\x03\\x7f\\x9c\\xcb"); } |