Commit Diff


commit - 063c1beddf228ca8de0908dfc24c5a045de41ab3
commit + ab3ad429d13810549bc4338c59fe5e8a0168e228
blob - eaca8311fc195b30910f37ca7d19b7bfe34ffc13
blob + 4ad316f3338e6906c54c7dfc2aeb43250fc05ee3
--- lib/pack.c
+++ lib/pack.c
@@ -954,19 +954,25 @@ resolve_offset_delta(struct got_delta_chain *deltas,
 	err = add_delta(deltas, pack->path_packfile, delta_offset, tslen,
 	    delta_type, delta_size, delta_data_offset, delta_buf, delta_len);
 	if (err)
-		return err;
+		goto done;
 
 	/* An offset delta must be in the same packfile. */
-	if (base_offset >= pack->filesize)
-		return got_error(GOT_ERR_PACK_OFFSET);
+	if (base_offset >= pack->filesize) {
+		err = got_error(GOT_ERR_PACK_OFFSET);
+		goto done;
+	}
 
 	err = parse_object_type_and_size(&base_type, &base_size, &base_tslen,
 	    pack, base_offset);
 	if (err)
-		return err;
+		goto done;
 
-	return resolve_delta_chain(deltas, repo, packidx, pack, base_offset,
+	err = resolve_delta_chain(deltas, repo, packidx, pack, base_offset,
 	    base_tslen, base_type, base_size, recursion - 1);
+done:
+	if (err)
+		free(delta_buf);
+	return err;
 }
 
 static const struct got_error *