summaryrefslogtreecommitdiff
path: root/refspec.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2018-06-28 19:53:29 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-06-28 19:53:29 (GMT)
commita9097269036141876c586ddeee561a37b686c8e5 (patch)
tree7f496e3fd3a4c8aca1fe95c0978744e28e860e28 /refspec.c
parented843436dd4924c10669820cc73daf50f0b4dabd (diff)
parent7865d157a5e8d86f46e626d933bda5c18eab196a (diff)
downloadgit-a9097269036141876c586ddeee561a37b686c8e5.zip
git-a9097269036141876c586ddeee561a37b686c8e5.tar.gz
git-a9097269036141876c586ddeee561a37b686c8e5.tar.bz2
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
Diffstat (limited to 'refspec.c')
-rw-r--r--refspec.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/refspec.c b/refspec.c
index 78edc48..e8010dc 100644
--- a/refspec.c
+++ b/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;
}