Commit a1ecddf0 by Russell Belfer

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.
parent c9d78bde
...@@ -1343,10 +1343,9 @@ static int parse_variable(diskfile_backend *cfg, char **var_name, char **var_val ...@@ -1343,10 +1343,9 @@ static int parse_variable(diskfile_backend *cfg, char **var_name, char **var_val
else else
value_start = var_end + 1; value_start = var_end + 1;
if (git__isspace(var_end[-1])) { var_end--;
do var_end--; while (git__isspace(*var_end))
while (git__isspace(var_end[0])); var_end--;
}
*var_name = git__strndup(line, var_end - line + 1); *var_name = git__strndup(line, var_end - line + 1);
GITERR_CHECK_ALLOC(*var_name); GITERR_CHECK_ALLOC(*var_name);
......
...@@ -266,6 +266,22 @@ void test_config_read__foreach_match(void) ...@@ -266,6 +266,22 @@ void test_config_read__foreach_match(void)
git_config_free(cfg); 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 #if 0
BEGIN_TEST(config10, "a repo's config overrides the global config") BEGIN_TEST(config10, "a repo's config overrides the global config")
......
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