Commit Diff


commit - bafaf650cf9ee98df6390dc7b731fcf9546fb714
commit + 8767bb940965a692a36958085832958a312923bc
blob - 42f3f969ab74fe9847c174eb9571b9b832599bf9
blob + 70dc341711c8c61360f3c8d9af25137cd6b9b9fb
--- lib/privsep.c
+++ lib/privsep.c
@@ -1565,7 +1565,7 @@ got_privsep_recv_tree(struct got_tree_object **tree, s
 	int nentries = 0;
 
 	*tree = NULL;
-get_more:
+
 	err = read_imsg(ibuf);
 	if (err)
 		goto done;
@@ -1579,9 +1579,18 @@ get_more:
 
 		n = imsg_get(ibuf, &imsg);
 		if (n == 0) {
-			if (*tree && (*tree)->nentries != nentries)
-				goto get_more;
-			break;
+			if ((*tree)) {
+				if (nentries < (*tree)->nentries) {
+					err = read_imsg(ibuf);
+					if (err)
+						break;
+					continue;
+				} else
+					break;
+			} else {
+				err = got_error(GOT_ERR_PRIVSEP_MSG);
+				break;
+			}
 		}
 
 		if (imsg.hdr.len < IMSG_HEADER_SIZE + min_datalen) {