commit eba5c6bb85a402346d636941ce682664585a6c0b from: Stefan Sperling date: Sun Feb 11 23:25:40 2018 UTC repair blob diffing 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? */