commit - 0e22967e43602d4c52a8d102e30107f8c4da765a
commit + 06e5fc98c0fca4d47edc5ba2d0e7e9d0addcafdd
blob - 41af9356c9c8a63448df12b4f5c977e9eb233dc5
blob + c7ae922fdd4a145746c22771f63ff2e6ba588bb8
--- lib/delta.c
+++ lib/delta.c
/* Decode and execute copy instructions from the delta stream. */
err = next_delta_byte(&p, &remain);
- while (err == NULL) {
+ while (err == NULL && remain > 0) {
if (*p & GOT_DELTA_BASE_COPY) {
off_t offset = 0;
size_t len = 0;
if (err)
break;
err = copy_from_base(base_file, offset, len, outfile);
- if (err == NULL)
+ if (err == NULL) {
outsize += len;
+ if (remain > 0) {
+ p++;
+ remain--;
+ }
+ }
} else {
size_t len = (size_t)*p;
if (len == 0) {
}
err = next_delta_byte(&p, &remain);
if (err)
- return err;
+ break;
err = copy_from_delta(&p, &remain, len, outfile);
if (err == NULL)
outsize += len;
}
-
- if (err == NULL) {
- if (remain == 0)
- break;
- /* Fetch the next instruction. */
- p++;
- remain--;
- }
}
if (outsize != result_size)