Re: [PATCH v4] Disallow empty section and variable names
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Feb 10, 2011, 22:49 UTC
- Message-ID
- <7v1v3f33pz.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <20110201071347.GH24297@fm.suse.cz>
Libor Pechacek <lpechacek@suse.cz> writes:
Show 23 quoted lines
> diff --git a/config.c b/config.c
> index fde91f5..5eb89a7 100644
> --- a/config.c
> +++ b/config.c
> @@ -1113,6 +1113,7 @@ int git_config_set(const char *key, const char *value)
> int git_config_parse_key(const char *key, char **store_key, int *baselen_)
> {
> int i, dot, baselen;
> + int keylen = strlen(key);
> const char *last_dot = strrchr(key, '.');
>
> /*
> @@ -1120,11 +1121,16 @@ int git_config_parse_key(const char *key, char **store_key, int *baselen_)
> * key name separated by a dot, we have to know where the dot is.
> */
>
> - if (last_dot == NULL) {
> + if (last_dot == NULL || *key == '.') {
> error("key does not contain a section: %s", key);
> return -2;
> }
>
> + if (keylen && key[keylen-1] == '.') {Aren't these the same as saying
if (!last_dot || last_dot == key) {
...
}
if (!last_dot[1]) { /* we know last_dot is not NULL */
...
}Again, a minimum fix-up on top of your patch. Thanks.
diff --git a/config.c b/config.c index 75dd629..d5bb862 100644 --- a/config.c +++ b/config.c @@ -1113,7 +1113,6 @@ int git_config_set(const char *key, const char *value) int git_config_parse_key(const char *key, char **store_key, int *baselen_) { int i, dot, baselen; - int keylen = strlen(key); const char *last_dot = strrchr(key, '.'); /* @@ -1121,12 +1120,12 @@ int git_config_parse_key(const char *key, char **store_key, int *baselen_) * key name separated by a dot, we have to know where the dot is. */ - if (last_dot == NULL || *key == '.') { + if (last_dot == NULL || last_dot == key) { error("key does not contain a section: %s", key); return -2; } - if (keylen && key[keylen-1] == '.') { + if (!last_dot[1]) { error("key does not contain variable name: %s", key); return -2; } @@ -1138,7 +1137,7 @@ int git_config_parse_key(const char *key, char **store_key, int *baselen_) /* * Validate the key and while at it, lower case it for matching. */ - *store_key = xmalloc(keylen + 1); + *store_key = xmalloc(strlen(key) + 1); dot = 0; for (i = 0; key[i]; i++) {