diff options
author | Patrick Steinhardt <ps@pks.im> | 2017-05-19 13:59:53 +0200 |
---|---|---|
committer | Patrick Steinhardt <ps@pks.im> | 2017-06-06 09:38:44 +0200 |
commit | 46b67034a12555a6ef60d28c02d0d9d15fdc117b (patch) | |
tree | 140c8640e223259f837953e4982d8360edb9f34d | |
parent | 29f498e0fd0b4f1001ffed209042d8996956e6aa (diff) | |
download | libgit2-46b67034a12555a6ef60d28c02d0d9d15fdc117b.tar.gz |
index: don't right-pad paths when writing compressed entries
Our code to write index entries to disk does not check whether the
entry that is to be written should use prefix compression for the path.
As such, we were overallocating memory and added bogus right-padding
into the resulting index entries. As there is no padding allowed in the
index version 4 format, this should actually result in an invalid index.
Fix this by re-using the newly extracted `index_entry_size` function.
-rw-r--r-- | src/index.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/index.c b/src/index.c index 161a9da1f..820c9716d 100644 --- a/src/index.c +++ b/src/index.c @@ -2597,6 +2597,7 @@ static int write_disk_entry(git_filebuf *file, git_index_entry *entry, const cha void *mem = NULL; struct entry_short *ondisk; size_t path_len, disk_size; + int varint_len = 0; char *path; const char *path_start = entry->path; size_t same_len = 0; @@ -2614,12 +2615,10 @@ static int write_disk_entry(git_filebuf *file, git_index_entry *entry, const cha ++same_len; } path_len -= same_len; + varint_len = git_encode_varint(NULL, 0, same_len); } - if (entry->flags & GIT_IDXENTRY_EXTENDED) - disk_size = long_entry_size(path_len); - else - disk_size = short_entry_size(path_len); + disk_size = index_entry_size(path_len, varint_len, entry->flags); if (git_filebuf_reserve(file, &mem, disk_size) < 0) return -1; |