Commit 785a0429 authored by Jeff King's avatar Jeff King Committed by Junio C Hamano

archive-tar: use parse_config_key when parsing config

This is fewer lines of code, but more importantly, fixes a
bogus pointer offset. We are looking for "tar." in the
section, but later assume that the dot we found is at offset
9, not 3. This is a holdover from an earlier iteration of
767cf457 which called the section "tarfilter".

As a result, we could erroneously reject some filters with
dots in their name, as well as read uninitialized memory.

Reported by (and test by) René Scharfe.
Signed-off-by: default avatarJeff King <>
Reviewed-by: default avatarJonathan Nieder <>
Signed-off-by: default avatarJunio C Hamano <>
parent 1b86bbb0
......@@ -327,20 +327,12 @@ static struct archiver *find_tar_filter(const char *name, int len)
static int tar_filter_config(const char *var, const char *value, void *data)
struct archiver *ar;
const char *dot;
const char *name;
const char *type;
int namelen;
if (prefixcmp(var, "tar."))
if (parse_config_key(var, "tar", &name, &namelen, &type) < 0 || !name)
return 0;
dot = strrchr(var, '.');
if (dot == var + 9)
return 0;
name = var + 4;
namelen = dot - name;
type = dot + 1;
ar = find_tar_filter(name, namelen);
if (!ar) {
......@@ -212,7 +212,8 @@ test_expect_success 'git-archive --prefix=olde-' '
test_expect_success 'setup tar filters' '
git config "tr ab ba" &&
git config "tr ab ba" &&
git config true
git config true &&
git config tar.invalid baz
test_expect_success 'archive --list mentions user filter' '
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment