pid1: do not write invalid utf-8 in error message
We'd write a sequence that was invalid unicode and this caused the d-bus connection to be terminated: $ busctl get-property org.freedesktop.systemd1 /org/freedesktop/systemd1/unit/dbus_2esocket org.freedesktop.systemd1.Unit SubState s "running" $ busctl get-property org.freedesktop.systemd1 /org/freedesktop/systemd1/unit/dbus_e2socket org.freedesktop.systemd1.Unit SubState Remote peer disconnected $ busctl get-property org.freedesktop.systemd1 /org/freedesktop/systemd1/unit/dbus_e2socket org.freedesktop.systemd1.Unit SubState (hangs) Fixes #8978.
This commit is contained in:
parent
7994ac1d85
commit
930c124c3f
|
@ -2696,12 +2696,19 @@ int manager_load_unit_from_dbus_path(Manager *m, const char *s, sd_bus_error *e,
|
|||
return 0;
|
||||
}
|
||||
|
||||
return sd_bus_error_setf(e, BUS_ERROR_NO_UNIT_FOR_INVOCATION_ID, "No unit with the specified invocation ID " SD_ID128_FORMAT_STR " known.", SD_ID128_FORMAT_VAL(invocation_id));
|
||||
return sd_bus_error_setf(e, BUS_ERROR_NO_UNIT_FOR_INVOCATION_ID,
|
||||
"No unit with the specified invocation ID " SD_ID128_FORMAT_STR " known.",
|
||||
SD_ID128_FORMAT_VAL(invocation_id));
|
||||
}
|
||||
|
||||
/* If this didn't work, we check if this is a unit name */
|
||||
if (!unit_name_is_valid(n, UNIT_NAME_PLAIN|UNIT_NAME_INSTANCE))
|
||||
return sd_bus_error_setf(e, SD_BUS_ERROR_INVALID_ARGS, "Unit name %s is neither a valid invocation ID nor unit name.", n);
|
||||
if (!unit_name_is_valid(n, UNIT_NAME_PLAIN|UNIT_NAME_INSTANCE)) {
|
||||
_cleanup_free_ char *nn = NULL;
|
||||
|
||||
nn = cescape(n);
|
||||
return sd_bus_error_setf(e, SD_BUS_ERROR_INVALID_ARGS,
|
||||
"Unit name %s is neither a valid invocation ID nor unit name.", strnull(nn));
|
||||
}
|
||||
|
||||
r = manager_load_unit(m, n, NULL, e, &u);
|
||||
if (r < 0)
|
||||
|
|
Loading…
Reference in New Issue