mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-28 08:58:41 +00:00
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.
This commit is contained in:
parent
29f498e0fd
commit
46b67034a1
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user