Commit bce9484813ad6aa3d365b11d5f6171e7f33cbbc5

Philip Kelley 2014-06-27T11:51:35

Fix assert when receiving uncommon sideband packet

diff --git a/src/indexer.c b/src/indexer.c
index 0b1cf3c..1f59afa 100644
--- a/src/indexer.c
+++ b/src/indexer.c
@@ -433,6 +433,8 @@ static int write_at(git_indexer *idx, const void *data, git_off_t offset, size_t
 	git_map map;
 	int error;
 
+	assert(data && size);
+
 	/* the offset needs to be at the beginning of the a page boundary */
 	page_start = (offset / page_size) * page_size;
 	page_offset = offset - page_start;
@@ -451,6 +453,9 @@ static int append_to_pack(git_indexer *idx, const void *data, size_t size)
 {
 	git_off_t current_size = idx->pack->mwf.size;
 
+	if (!size)
+		return 0;
+
 	/* add the extra space we need at the end */
 	if (p_ftruncate(idx->pack->mwf.fd, current_size + size) < 0) {
 		giterr_set(GITERR_OS, "Failed to increase size of pack file '%s'", idx->pack->pack_name);
diff --git a/src/transports/smart_protocol.c b/src/transports/smart_protocol.c
index a52aacc..8289116 100644
--- a/src/transports/smart_protocol.c
+++ b/src/transports/smart_protocol.c
@@ -592,7 +592,9 @@ int git_smart__download_pack(
 				}
 			} else if (pkt->type == GIT_PKT_DATA) {
 				git_pkt_data *p = (git_pkt_data *) pkt;
-				error = writepack->append(writepack, p->data, p->len, stats);
+
+				if (p->len)
+					error = writepack->append(writepack, p->data, p->len, stats);
 			} else if (pkt->type == GIT_PKT_FLUSH) {
 				/* A flush indicates the end of the packfile */
 				git__free(pkt);