X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-bus%2Fbus-match.c;h=342819d9c06937479a033a0768a865dde715c727;hb=8e959fbf3862172b53d200cda659795c3744fa78;hp=49fc6335c23d0815b951a5aefd25fb7655e951e1;hpb=ae7bed3f2d1823e82984e757872b3b753d5c869b;p=elogind.git diff --git a/src/libsystemd-bus/bus-match.c b/src/libsystemd-bus/bus-match.c index 49fc6335c..342819d9c 100644 --- a/src/libsystemd-bus/bus-match.c +++ b/src/libsystemd-bus/bus-match.c @@ -22,6 +22,8 @@ #include "bus-internal.h" #include "bus-message.h" #include "bus-match.h" +#include "bus-error.h" +#include "bus-util.h" /* Example: * @@ -153,7 +155,7 @@ static bool value_node_test( * should contain all well-known names of the sender, * hence we can fix things there correctly. */ - if (node->value.str[0] != ':' && value_str[0] == ':') + if (node->value.str[0] != ':' && value_str && value_str[0] == ':') return true; return false; @@ -272,7 +274,10 @@ int bus_match_run( /* Run the callback. And then invoke siblings. */ if (node->leaf.callback) { - r = node->leaf.callback(bus, m, node->leaf.userdata); + _cleanup_bus_error_free_ sd_bus_error error_buffer = SD_BUS_ERROR_NULL; + + r = node->leaf.callback(bus, m, node->leaf.userdata, &error_buffer); + r = bus_maybe_reply_error(m, r, &error_buffer); if (r != 0) return r; } @@ -750,6 +755,14 @@ int bus_match_parse( escaped = false; } + if (!value) { + value = strdup(""); + if (!value) { + r = -ENOMEM; + goto fail; + } + } + if (t == BUS_MATCH_MESSAGE_TYPE) { r = bus_message_type_from_string(value, &u); if (r < 0)