Merge branch 'ab/refspec-init-fix'
Make refspec parsing codepath more robust. * ab/refspec-init-fix: refspec: initalize `refspec_item` in `valid_fetch_refspec()` refspec: add back a refspec_item_init() function refspec: s/refspec_item_init/&_or_die/g
This commit is contained in:
commit
a909726903
@ -1077,7 +1077,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
||||
if (option_required_reference.nr || option_optional_reference.nr)
|
||||
setup_reference();
|
||||
|
||||
refspec_item_init(&refspec, value.buf, REFSPEC_FETCH);
|
||||
refspec_item_init_or_die(&refspec, value.buf, REFSPEC_FETCH);
|
||||
|
||||
strbuf_reset(&value);
|
||||
|
||||
|
@ -684,7 +684,7 @@ static const char *get_tracking_branch(const char *remote, const char *refspec)
|
||||
const char *spec_src;
|
||||
const char *merge_branch;
|
||||
|
||||
refspec_item_init(&spec, refspec, REFSPEC_FETCH);
|
||||
refspec_item_init_or_die(&spec, refspec, REFSPEC_FETCH);
|
||||
spec_src = spec.src;
|
||||
if (!*spec_src || !strcmp(spec_src, "HEAD"))
|
||||
spec_src = "HEAD";
|
||||
|
13
refspec.c
13
refspec.c
@ -124,11 +124,16 @@ static int parse_refspec(struct refspec_item *item, const char *refspec, int fet
|
||||
return 1;
|
||||
}
|
||||
|
||||
void refspec_item_init(struct refspec_item *item, const char *refspec, int fetch)
|
||||
int refspec_item_init(struct refspec_item *item, const char *refspec, int fetch)
|
||||
{
|
||||
memset(item, 0, sizeof(*item));
|
||||
return parse_refspec(item, refspec, fetch);
|
||||
}
|
||||
|
||||
if (!parse_refspec(item, refspec, fetch))
|
||||
void refspec_item_init_or_die(struct refspec_item *item, const char *refspec,
|
||||
int fetch)
|
||||
{
|
||||
if (!refspec_item_init(item, refspec, fetch))
|
||||
die("Invalid refspec '%s'", refspec);
|
||||
}
|
||||
|
||||
@ -152,7 +157,7 @@ void refspec_append(struct refspec *rs, const char *refspec)
|
||||
{
|
||||
struct refspec_item item;
|
||||
|
||||
refspec_item_init(&item, refspec, rs->fetch);
|
||||
refspec_item_init_or_die(&item, refspec, rs->fetch);
|
||||
|
||||
ALLOC_GROW(rs->items, rs->nr + 1, rs->alloc);
|
||||
rs->items[rs->nr++] = item;
|
||||
@ -191,7 +196,7 @@ void refspec_clear(struct refspec *rs)
|
||||
int valid_fetch_refspec(const char *fetch_refspec_str)
|
||||
{
|
||||
struct refspec_item refspec;
|
||||
int ret = parse_refspec(&refspec, fetch_refspec_str, REFSPEC_FETCH);
|
||||
int ret = refspec_item_init(&refspec, fetch_refspec_str, REFSPEC_FETCH);
|
||||
refspec_item_clear(&refspec);
|
||||
return ret;
|
||||
}
|
||||
|
@ -32,7 +32,10 @@ struct refspec {
|
||||
int fetch;
|
||||
};
|
||||
|
||||
void refspec_item_init(struct refspec_item *item, const char *refspec, int fetch);
|
||||
int refspec_item_init(struct refspec_item *item, const char *refspec,
|
||||
int fetch);
|
||||
void refspec_item_init_or_die(struct refspec_item *item, const char *refspec,
|
||||
int fetch);
|
||||
void refspec_item_clear(struct refspec_item *item);
|
||||
void refspec_init(struct refspec *rs, int fetch);
|
||||
void refspec_append(struct refspec *rs, const char *refspec);
|
||||
|
Loading…
Reference in New Issue
Block a user