mirror of
https://github.com/git/git
synced 2024-08-24 18:26:02 +00:00
receive-pack: fix "borrowing from alternate object store" implementation
In the alternate_object_database structure, ent->base[] is a buffer the users can use to form pathnames to loose objects, and ent->name is a pointer into that buffer (it points at one beyond ".git/objects/"). If you get a call to add_refs_from_alternate() after somebody used the entry (has_loose_object() has been called, for example), *ent->name would not be NUL, and ent->base[] won't be the path to the object store. This caller is expecting to read the path to the object store in ent->base[]; it needs to NUL terminate the buffer if it wants to. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
53ffb878a9
commit
b8492539f9
|
@ -466,12 +466,17 @@ static int delete_only(struct command *cmd)
|
|||
|
||||
static int add_refs_from_alternate(struct alternate_object_database *e, void *unused)
|
||||
{
|
||||
char *other = xstrdup(make_absolute_path(e->base));
|
||||
size_t len = strlen(other);
|
||||
char *other;
|
||||
size_t len;
|
||||
struct remote *remote;
|
||||
struct transport *transport;
|
||||
const struct ref *extra;
|
||||
|
||||
e->name[-1] = '\0';
|
||||
other = xstrdup(make_absolute_path(e->base));
|
||||
e->name[-1] = '/';
|
||||
len = strlen(other);
|
||||
|
||||
while (other[len-1] == '/')
|
||||
other[--len] = '\0';
|
||||
if (len < 8 || memcmp(other + len - 8, "/objects", 8))
|
||||
|
|
Loading…
Reference in a new issue