Index: gotd/repo_write.c
--- gotd/repo_write.c.orig
+++ gotd/repo_write.c
@@ -1392,6 +1392,8 @@ verify_packfile(void)
 		return got_error_from_errno("pack index fstat");
 
 	packidx = malloc(sizeof(*packidx));
+	if (packidx == NULL)
+		return got_error_from_errno("malloc");
 	memset(packidx, 0, sizeof(*packidx));
 	packidx->fd = client->packidx_fd;
 	client->packidx_fd = -1;
@@ -2231,7 +2233,7 @@ repo_write_dispatch_session(int fd, short event, void 
 			fatalx("%s", err->msg);
 	}
 
-	for (;;) {
+	while (err == NULL) {
 		if ((n = imsg_get(ibuf, &imsg)) == -1)
 			fatal("%s: imsg_get error", __func__);
 		if (n == 0)	/* No more messages. */
@@ -2320,6 +2322,7 @@ repo_write_dispatch_session(int fd, short event, void 
 			break;
 		default:
 			log_debug("unexpected imsg %d", imsg.hdr.type);
+			err = got_error(GOT_ERR_PRIVSEP_MSG);
 			break;
 		}
 
