commit - 904df868d68e12778fedf815fe73a70919d71b19
commit + b00c982167ffc56b444ff3211a2b5a62c56ec589
blob - 325eec8a4a865b83e3bde9ce509f2fc339a25189
blob + 24bc13c17a4bac288c81125e4564e661ca7d4fd6
--- lib/privsep.c
+++ lib/privsep.c
const struct got_error *err = NULL;
struct got_imsg_tree_object itree;
struct got_tree_entry *te;
+ size_t totlen;
itree.nentries = tree->entries.nentries;
if (imsg_compose(ibuf, GOT_IMSG_TREE, 0, 0, -1, &itree, sizeof(itree))
== -1)
return got_error_from_errno();
- err = flush_imsg(ibuf);
- if (err)
- return err;
-
+ totlen = sizeof(itree);
SIMPLEQ_FOREACH(te, &tree->entries.head, entry) {
struct got_imsg_tree_entry ite;
uint8_t *buf = NULL;
if (len > MAX_IMSGSIZE)
return got_error(GOT_ERR_NO_SPACE);
+ if (totlen + len >= MAX_IMSGSIZE - IMSG_HEADER_SIZE) {
+ err = flush_imsg(ibuf);
+ if (err)
+ return err;
+ }
+
buf = malloc(len);
if (buf == NULL)
return got_error_from_errno();
free(buf);
if (err)
return err;
-
- err = flush_imsg(ibuf);
- if (err)
- return err;
+ totlen += len;
}
- return NULL;
+ return flush_imsg(ibuf);
}
const struct got_error *