if (m->n_containers > 0)
return -EBADMSG;
+ if (m->poisoned)
+ return -ESTALE;
+
/* If there's a non-trivial signature set, then add it in here */
if (!isempty(m->root_container.signature)) {
r = message_append_field_signature(m, SD_BUS_MESSAGE_HEADER_SIGNATURE, m->root_container.signature, NULL);
static int bus_message_setup_iovec(sd_bus_message *m) {
struct bus_body_part *part;
- unsigned n;
+ unsigned n, i;
int r;
assert(m);
return r;
}
- for (part = &m->body; part && part->size > 0; part = part->next) {
+ for (i = 0, part = &m->body; i < m->n_body_parts; i++, part = part->next) {
r = append_iovec(m, part->data, part->size);
if (r < 0)
return r;