Commit Diff


commit - 74671950360a2118267670efd700a5328f3eeca4
commit + eba5c6bb85a402346d636941ce682664585a6c0b
blob - 01ccbc4cb88041aa6126510584e0ba1f99bcda51
blob + 25249ba62043d334e9f01225ca63a12ffd86bb2f
--- lib/diff.c
+++ lib/diff.c
@@ -69,6 +69,8 @@ got_diff_blob(struct got_blob_object *blob1, struct go
 			err = got_object_blob_read_block(&len, blob1);
 			if (err)
 				goto done;
+			if (len == 0)
+				break;
 			/* Skip blob object header first time around. */
 			fwrite(blob1->read_buf + hdrlen, len - hdrlen, 1, f1);
 			hdrlen = 0;
@@ -83,6 +85,8 @@ got_diff_blob(struct got_blob_object *blob1, struct go
 			err = got_object_blob_read_block(&len, blob2);
 			if (err)
 				goto done;
+			if (len == 0)
+				break;
 			/* Skip blob object header first time around. */
 			fwrite(blob2->read_buf + hdrlen, len - hdrlen, 1, f2);
 			hdrlen = 0;
@@ -90,10 +94,14 @@ got_diff_blob(struct got_blob_object *blob1, struct go
 	} else
 		idstr2 = "/dev/null";
 
-	if (f1)
-		fflush(f1);
-	if (f2)
+	if (f1) {
+		fflush(f1);
+		rewind(f1);
+	}
+	if (f2) {
 		fflush(f2);
+		rewind(f2);
+	}
 
 	memset(&ds, 0, sizeof(ds));
 	/* XXX should stat buffers be passed in args instead of ds? */