]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-bus: escape invalid characters in error message
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 26 Jul 2025 18:55:16 +0000 (03:55 +0900)
committerLuca Boccassi <luca.boccassi@gmail.com>
Sun, 27 Jul 2025 10:03:15 +0000 (11:03 +0100)
At many places, we pass arguments of dbus method calls to
sd_bus_error_setf(), and produces unprintable log messages.
Let's always escape the generated error message.

This fixes something like the following:
```
[ 1921.875668] systemd-logind[611]: Got message type=method_call sender=:1.46 destination=:1.6 path=/org/freedesktop/login1 interface=org.freedesktop.login1.Manager member=GetSeat  cookie=1344 reply_cookie=0 signature=s error-name=n/a error-message=n/a
[ 1921.875758] systemd-logind[611]: [725B blob data]
[ 1921.875777] systemd-logind[611]: [768B blob data]
```

src/libsystemd/sd-bus/bus-error.c

index b61df06632d380028ff845a954917133720a17e7..cf501c33c9fb0c81cbb5dbd1015d33a2ea993307 100644 (file)
@@ -7,6 +7,7 @@
 #include "errno-list.h"
 #include "errno-util.h"
 #include "string-util.h"
+#include "utf8.h"
 
 BUS_ERROR_MAP_ELF_REGISTER const sd_bus_error_map bus_standard_errors[] = {
         SD_BUS_ERROR_MAP(SD_BUS_ERROR_FAILED,                             EACCES),
@@ -246,7 +247,7 @@ _public_ int sd_bus_error_setfv(sd_bus_error *e, const char *name, const char *f
                          * this, since we at least managed to write the error name */
 
                         if (vasprintf(&mesg, format, ap) >= 0)
-                                e->message = TAKE_PTR(mesg);
+                                e->message = utf8_escape_non_printable(mesg);
                 }
 
                 e->_need_free = 1;