Commit Diff


commit - 2edc2f9dc130b3033b3ac7fe72754b2e6ef15dc7
commit + f97edf0cbcf2ee1ea1d71a162699f0be79bd0400
blob - 1df2b67a5d1be7e6d8c93905c0833dd40165bc3b
blob + 1afcaaffa734eb472002229d279079cb970029da
--- lib/repository.c
+++ lib/repository.c
@@ -252,11 +252,16 @@ const struct got_error *
 got_repo_pack_fds_open(int **pack_fds)
 {
 	const struct got_error *err = NULL;
-	int i, pack_fds_tmp[GOT_PACK_NUM_TEMPFILES];
+	int i, *pack_fds_tmp;
 
+	pack_fds_tmp = calloc(GOT_PACK_NUM_TEMPFILES, sizeof(int));
+	if (pack_fds_tmp == NULL)
+		return got_error_from_errno("calloc");
 	*pack_fds = calloc(GOT_PACK_NUM_TEMPFILES, sizeof(**pack_fds));
-	if (*pack_fds == NULL)
+	if (*pack_fds == NULL) {
+		free(pack_fds_tmp);
 		return got_error_from_errno("calloc");
+	}
 
 	for (i = 0; i < GOT_PACK_NUM_TEMPFILES; i++) {
 		pack_fds_tmp[i] = got_opentempfd();
@@ -266,7 +271,7 @@ got_repo_pack_fds_open(int **pack_fds)
 			return err;
 		}
 	}
-	memcpy(*pack_fds, pack_fds_tmp, sizeof(pack_fds_tmp));
+	memcpy(*pack_fds, pack_fds_tmp, GOT_PACK_NUM_TEMPFILES * sizeof(int));
 	return err;
 }