mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-01 23:50:11 +00:00
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:
parent
c9d78bde94
commit
a1ecddf01c
@ -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);
|
||||
|
@ -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")
|
||||
|
4
tests-clar/resources/config/config14
Normal file
4
tests-clar/resources/config/config14
Normal file
@ -0,0 +1,4 @@
|
||||
[a]
|
||||
b=c
|
||||
[d]
|
||||
e = f
|
Loading…
Reference in New Issue
Block a user