From: Lennart Poettering Date: Fri, 16 Nov 2018 12:00:40 +0000 (+0100) Subject: sd-bus: make strict asan shut up X-Git-Tag: v240~309 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ac0a94f7438b49a0890d9806db1fa211a5bca10a;p=thirdparty%2Fsystemd.git sd-bus: make strict asan shut up asan doesn't like it if we use strndup() (i.e. a string function) on a non-NULL terminated buffer (i.e. something that isn't really a string). Let's hence use memdup_suffix0() instead of strndup(), which is more appropriate for binary data that is to become a string. Fixes: #10385 --- diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c index 697553e74ed..bd3e1f34460 100644 --- a/src/libsystemd/sd-bus/bus-message.c +++ b/src/libsystemd/sd-bus/bus-message.c @@ -4057,7 +4057,7 @@ _public_ int sd_bus_message_enter_container(sd_bus_message *m, end = m->rindex + 0; else end = m->rindex + c->item_size; - + m->containers[m->n_containers++] = (struct bus_container) { .enclosing = type, .signature = TAKE_PTR(signature), @@ -5078,6 +5078,7 @@ int bus_message_parse_fields(sd_bus_message *m) { return -EBADMSG; if (*p == 0) { + char *k; size_t l; /* We found the beginning of the signature @@ -5091,9 +5092,11 @@ int bus_message_parse_fields(sd_bus_message *m) { p[1 + l - 1] != SD_BUS_TYPE_STRUCT_END) return -EBADMSG; - if (free_and_strndup(&m->root_container.signature, - p + 1 + 1, l - 2) < 0) + k = memdup_suffix0(p + 1 + 1, l - 2); + if (!k) return -ENOMEM; + + free_and_replace(m->root_container.signature, k); break; }