diff options
| author | Oleg Andreev <oleganza@gmail.com> | 2011-10-27 16:45:44 +0200 |
|---|---|---|
| committer | Oleg Andreev <oleganza@gmail.com> | 2011-10-27 16:45:44 +0200 |
| commit | 9f861826be17d1f3d4e34df1f4b2d4bd9aaec3b0 (patch) | |
| tree | 1ae835786a7f7ca225179c7a363e046319f4a438 /src/config_file.c | |
| parent | 3eaf34f4c602b9e155e2f4c6ae26c9250ac37d50 (diff) | |
| download | libgit2-9f861826be17d1f3d4e34df1f4b2d4bd9aaec3b0.tar.gz | |
Fixed crash in config parser when empty value is encountered.
Example:
key1 = value1
key2 =
In this config the value will be a bad pointer which config object will attempt to free() causing a crash.
Diffstat (limited to 'src/config_file.c')
| -rw-r--r-- | src/config_file.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/config_file.c b/src/config_file.c index a85ae1578..3540aae0a 100644 --- a/src/config_file.c +++ b/src/config_file.c @@ -1158,19 +1158,25 @@ static int parse_variable(diskfile_backend *cfg, char **var_name, char **var_val while (isspace(value_start[0])) value_start++; - if (value_start[0] == '\0') + if (value_start[0] == '\0') { + *var_value = NULL; goto out; + } if (is_multiline_var(value_start)) { error = parse_multiline_variable(cfg, value_start, var_value); - if (error < GIT_SUCCESS) + if (error != GIT_SUCCESS) + { + *var_value = NULL; free(*var_name); + } goto out; } tmp = strdup(value_start); if (tmp == NULL) { free(*var_name); + *var_value = NULL; error = GIT_ENOMEM; goto out; } |
