commit 3efa19e75ebf0cd7f05f7a3a757ce16f60498dbd from: Stefan Sperling date: Fri Jul 13 08:51:34 2018 UTC fix more memleaks commit - 58c811c51491d5fcdd876688e147ce6b96f755c0 commit + 3efa19e75ebf0cd7f05f7a3a757ce16f60498dbd blob - c8bef69378fb819bd6da341a564b69f4c607c911 blob + 89c49ef2aabd9550a244a7e724def3014b1fc8d9 --- lib/inflate.c +++ lib/inflate.c @@ -310,7 +310,7 @@ got_inflate_to_mem_mmap(uint8_t **outbuf, size_t *outl err = got_inflate_read_mmap(&zb, map, offset, len, &avail, &consumed); if (err) - return err; + goto done; offset += consumed; len -= consumed; *outlen += avail; blob - 1c66bfadb8250179fc94476c4ca906a53a5a71cf blob + eaca8311fc195b30910f37ca7d19b7bfe34ffc13 --- lib/pack.c +++ lib/pack.c @@ -983,7 +983,7 @@ resolve_ref_delta(struct got_delta_chain *deltas, stru uint64_t base_size; size_t base_tslen; off_t delta_data_offset; - uint8_t *delta_buf; + uint8_t *delta_buf = NULL; size_t delta_len; if (delta_offset >= pack->filesize) @@ -1006,7 +1006,7 @@ resolve_ref_delta(struct got_delta_chain *deltas, stru err = got_inflate_to_mem_mmap(&delta_buf, &delta_len, pack->map, mapoff, pack->filesize - mapoff); if (err) - return err; + goto done; } else { ssize_t n = read(pack->fd, &id, sizeof(id)); if (n < 0) @@ -1015,22 +1015,25 @@ resolve_ref_delta(struct got_delta_chain *deltas, stru return got_error(GOT_ERR_BAD_PACKFILE); err = got_inflate_to_mem_fd(&delta_buf, &delta_len, pack->fd); if (err) - return err; + goto done; } 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; /* Delta base must be in the same pack file. */ idx = get_object_idx(packidx, &id, repo); - if (idx == -1) - return got_error(GOT_ERR_BAD_PACKFILE); + if (idx == -1) { + err = got_error(GOT_ERR_BAD_PACKFILE); + goto done; + } base_offset = get_object_offset(packidx, idx); if (base_offset == (uint64_t)-1) { - return got_error(GOT_ERR_BAD_PACKIDX); + err = got_error(GOT_ERR_BAD_PACKIDX); + goto done; } if (base_offset >= pack->filesize) { @@ -1046,6 +1049,8 @@ resolve_ref_delta(struct got_delta_chain *deltas, stru 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; }