Re: [PATCH] Git segmentation faults if submodule path is empty.
- From
Jharrod LaFon <jlafon@eyesopen.com>
- Date
- Aug 16, 2013, 15:12 UTC
- Message-ID
- <AFCBD71A-21CB-45CC-8386-C65173B6D173@eyesopen.com>
- In-Reply-To
- <20130816131406.GC20138@sigill.intra.peff.net>
OK, I'll incorporate Jeff's changes, add a test and resubmit the patch.
Thanks,
-- Jharrod LaFon OpenEye Scientific Software
On Aug 16, 2013, at 7:14 AM, Jeff King <peff@peff.net> wrote:
Show 47 quoted lines
> On Fri, Aug 16, 2013 at 09:09:58AM -0400, Jeff King wrote:
>
>>>> - if (parse_config_key(var, "submodule", &name, &namelen, &key) < 0 || !name)
>>>> + if (parse_config_key(var, "submodule", &name, &namelen, &key) < 0 || !name || !value)
>>>> return 0;
>>
>> I think this is also the wrong place to make the check, anyway. It is
>> saying that all values of submodule.X.Y must be non-NULL. But that is
>> not true. The submodule.X.fetchRecurseSubmodules option can be a
>> boolean, and:
>>
>> [submodule "foo"]
>> fetchRecurseSubmodules
>>
>> is perfectly valid (and is broken by this patch).
>
> IOW, I think this is the right fix:
>
> diff --git a/submodule.c b/submodule.c
> index 3f0a3f9..c0f93c2 100644
> --- a/submodule.c
> +++ b/submodule.c
> @@ -134,6 +134,9 @@ int parse_submodule_config_option(const char *var, const char *value)
> return 0;
>
> if (!strcmp(key, "path")) {
> + if (!value)
> + return config_error_nonbool(var);
> +
> config = unsorted_string_list_lookup(&config_name_for_path, value);
> if (config)
> free(config->util);
> @@ -151,6 +154,9 @@ int parse_submodule_config_option(const char *var, const char *value)
> } else if (!strcmp(key, "ignore")) {
> char *name_cstr;
>
> + if (!value)
> + return config_error_nonbool(var);
> +
> if (strcmp(value, "untracked") && strcmp(value, "dirty") &&
> strcmp(value, "all") && strcmp(value, "none")) {
> warning("Invalid parameter \"%s\" for config option \"submodule.%s.ignore\"", value, var);
>
> And new options, as they are added, must decide whether they are boolean
> or not (and check !value as appropriate).
>
> -Peff