Fix config parser boundary logic

The config file parser was not working right if there was no
whitespace between the value name and the equals sign.  This
fixes that.
This commit is contained in:
Russell Belfer 2012-08-12 07:59:30 -07:00
parent c9d78bde94
commit a1ecddf01c
3 changed files with 23 additions and 4 deletions

View File

@ -1343,10 +1343,9 @@ static int parse_variable(diskfile_backend *cfg, char **var_name, char **var_val
else
value_start = var_end + 1;
if (git__isspace(var_end[-1])) {
do var_end--;
while (git__isspace(var_end[0]));
}
var_end--;
while (git__isspace(*var_end))
var_end--;
*var_name = git__strndup(line, var_end - line + 1);
GITERR_CHECK_ALLOC(*var_name);

View File

@ -266,6 +266,22 @@ void test_config_read__foreach_match(void)
git_config_free(cfg);
}
void test_config_read__whitespace_not_required_around_assignment(void)
{
git_config *cfg;
const char *str;
cl_git_pass(git_config_open_ondisk(&cfg, cl_fixture("config/config14")));
cl_git_pass(git_config_get_string(&str, cfg, "a.b"));
cl_assert_equal_s(str, "c");
cl_git_pass(git_config_get_string(&str, cfg, "d.e"));
cl_assert_equal_s(str, "f");
git_config_free(cfg);
}
#if 0
BEGIN_TEST(config10, "a repo's config overrides the global config")

View File

@ -0,0 +1,4 @@
[a]
b=c
[d]
e = f