Skip to content

Commit a909726

Browse files
committed
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
2 parents ed84343 + 7865d15 commit a909726

File tree

4 files changed

+15
-7
lines changed

4 files changed

+15
-7
lines changed

builtin/clone.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1077,7 +1077,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
10771077
if (option_required_reference.nr || option_optional_reference.nr)
10781078
setup_reference();
10791079

1080-
refspec_item_init(&refspec, value.buf, REFSPEC_FETCH);
1080+
refspec_item_init_or_die(&refspec, value.buf, REFSPEC_FETCH);
10811081

10821082
strbuf_reset(&value);
10831083

builtin/pull.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -684,7 +684,7 @@ static const char *get_tracking_branch(const char *remote, const char *refspec)
684684
const char *spec_src;
685685
const char *merge_branch;
686686

687-
refspec_item_init(&spec, refspec, REFSPEC_FETCH);
687+
refspec_item_init_or_die(&spec, refspec, REFSPEC_FETCH);
688688
spec_src = spec.src;
689689
if (!*spec_src || !strcmp(spec_src, "HEAD"))
690690
spec_src = "HEAD";

refspec.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,16 @@ static int parse_refspec(struct refspec_item *item, const char *refspec, int fet
124124
return 1;
125125
}
126126

127-
void refspec_item_init(struct refspec_item *item, const char *refspec, int fetch)
127+
int refspec_item_init(struct refspec_item *item, const char *refspec, int fetch)
128128
{
129129
memset(item, 0, sizeof(*item));
130+
return parse_refspec(item, refspec, fetch);
131+
}
130132

131-
if (!parse_refspec(item, refspec, fetch))
133+
void refspec_item_init_or_die(struct refspec_item *item, const char *refspec,
134+
int fetch)
135+
{
136+
if (!refspec_item_init(item, refspec, fetch))
132137
die("Invalid refspec '%s'", refspec);
133138
}
134139

@@ -152,7 +157,7 @@ void refspec_append(struct refspec *rs, const char *refspec)
152157
{
153158
struct refspec_item item;
154159

155-
refspec_item_init(&item, refspec, rs->fetch);
160+
refspec_item_init_or_die(&item, refspec, rs->fetch);
156161

157162
ALLOC_GROW(rs->items, rs->nr + 1, rs->alloc);
158163
rs->items[rs->nr++] = item;
@@ -191,7 +196,7 @@ void refspec_clear(struct refspec *rs)
191196
int valid_fetch_refspec(const char *fetch_refspec_str)
192197
{
193198
struct refspec_item refspec;
194-
int ret = parse_refspec(&refspec, fetch_refspec_str, REFSPEC_FETCH);
199+
int ret = refspec_item_init(&refspec, fetch_refspec_str, REFSPEC_FETCH);
195200
refspec_item_clear(&refspec);
196201
return ret;
197202
}

refspec.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ struct refspec {
3232
int fetch;
3333
};
3434
35-
void refspec_item_init(struct refspec_item *item, const char *refspec, int fetch);
35+
int refspec_item_init(struct refspec_item *item, const char *refspec,
36+
int fetch);
37+
void refspec_item_init_or_die(struct refspec_item *item, const char *refspec,
38+
int fetch);
3639
void refspec_item_clear(struct refspec_item *item);
3740
void refspec_init(struct refspec *rs, int fetch);
3841
void refspec_append(struct refspec *rs, const char *refspec);

0 commit comments

Comments
 (0)