git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 9/9] pack-objects: don't leak pack window reference when splitting packs

From
Nicolas Pitre <nico@cam.org>
Date
Oct 29, 2008, 23:02 UTC
Message-ID
<1225321372-6570-10-git-send-email-nico@cam.org>
In-Reply-To
<1225321372-6570-9-git-send-email-nico@cam.org>
Signed-off-by: Nicolas Pitre <nico@cam.org>
---
 builtin-pack-objects.c |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c
index 826c762..c93d69a 100644
--- a/builtin-pack-objects.c
+++ b/builtin-pack-objects.c
@@ -389,22 +389,28 @@ static unsigned long write_object(struct sha1file *f,
 			dheader[pos] = ofs & 127;
 			while (ofs >>= 7)
 				dheader[--pos] = 128 | (--ofs & 127);
-			if (limit && hdrlen + sizeof(dheader) - pos + datalen + 20 >= limit)
+			if (limit && hdrlen + sizeof(dheader) - pos + datalen + 20 >= limit) {
+				unuse_pack(&w_curs);
 				return 0;
+			}
 			sha1write(f, header, hdrlen);
 			sha1write(f, dheader + pos, sizeof(dheader) - pos);
 			hdrlen += sizeof(dheader) - pos;
 			reused_delta++;
 		} else if (type == OBJ_REF_DELTA) {
-			if (limit && hdrlen + 20 + datalen + 20 >= limit)
+			if (limit && hdrlen + 20 + datalen + 20 >= limit) {
+				unuse_pack(&w_curs);
 				return 0;
+			}
 			sha1write(f, header, hdrlen);
 			sha1write(f, entry->delta->idx.sha1, 20);
 			hdrlen += 20;
 			reused_delta++;
 		} else {
-			if (limit && hdrlen + datalen + 20 >= limit)
+			if (limit && hdrlen + datalen + 20 >= limit) {
+				unuse_pack(&w_curs);
 				return 0;
+			}
 			sha1write(f, header, hdrlen);
 		}
 		copy_pack_data(f, p, &w_curs, offset, datalen);
-- 
1.6.0.3.757.g01be.dirty
Previous: Nicolas PitreNext: Junio C Hamano
Message 10 of 12 in “more robustness against pack corruptions”
  1. 0/9 more robustness against pack corruptionsNicolas Pitre, Oct 29, 2008
  2. 1/9 close another possibility for propagating pack corruptionNicolas Pitre, Oct 29, 2008
  3. 2/9 better validation on delta base object offsetsNicolas Pitre, Oct 29, 2008
  4. 3/9 make unpack_object_header() non fatalNicolas Pitre, Oct 29, 2008
  5. 4/9 make packed_object_info() resilient to pack corruptionsNicolas Pitre, Oct 29, 2008
  6. 5/9 make check_object() resilient to pack corruptionsNicolas Pitre, Oct 29, 2008
  7. 6/9 make find_pack_revindex() aware of the nasty worldNicolas Pitre, Oct 29, 2008
  8. 7/9 pack-objects: allow "fixing" a corrupted pack without a full repackNicolas Pitre, Oct 29, 2008
  9. 8/9 extend test coverage for latest pack corruption resilience improvementsNicolas Pitre, Oct 29, 2008
  10. 9/9 pack-objects: don't leak pack window reference when splitting packsNicolas Pitre, Oct 29, 2008
  11. Junio C HamanoOct 31, 2008
  12. Nicolas PitreOct 31, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.