X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-bus%2Fbus-message.c;h=9e712717cc34b31864af3e5d97953cc52dac2539;hb=5f7e8903b275f14d0f41f0542871d09deccb1741;hp=35a46786009881d336550a60e20ac766979d82c2;hpb=5763192abfdfafa2ca7c14c7d48393f67f28eff7;p=elogind.git diff --git a/src/libsystemd-bus/bus-message.c b/src/libsystemd-bus/bus-message.c index 35a467860..9e712717c 100644 --- a/src/libsystemd-bus/bus-message.c +++ b/src/libsystemd-bus/bus-message.c @@ -1894,9 +1894,7 @@ _public_ int sd_bus_message_open_container( } static size_t determine_word_size(size_t sz, size_t extra) { - if (sz <= 0 && extra == 0) - return 0; - else if (sz + extra <= 0xFF) + if (sz + extra <= 0xFF) return 1; else if (sz + extra*2 <= 0xFFFF) return 2; @@ -3063,7 +3061,7 @@ static int message_peek_body( } part = find_part(m, start, nbytes, (void**) &q); - if (!part || !q) + if (!part || (nbytes > 0 && !q)) return -EBADMSG; *rindex = end; @@ -4150,6 +4148,9 @@ _public_ int sd_bus_message_rewind(sd_bus_message *m, int complete) { m->rindex = c->begin; } + c->offset_index = 0; + c->item_size = c->n_offsets > 0 ? c->offsets[0] : c->end; + return !isempty(c->signature); } @@ -4848,7 +4849,7 @@ int bus_message_parse_fields(sd_bus_message *m) { uint32_t unix_fds = 0; void *offsets = NULL; unsigned n_offsets = 0; - size_t sz; + size_t sz = 0; unsigned i = 0; assert(m); @@ -5082,9 +5083,6 @@ int bus_message_parse_fields(sd_bus_message *m) { if (m->n_fds != unix_fds) return -EBADMSG; - if (isempty(m->root_container.signature) != (BUS_MESSAGE_BODY_SIZE(m) == 0)) - return -EBADMSG; - switch (m->header->type) { case SD_BUS_MESSAGE_SIGNAL: