mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-07 03:25:56 +00:00
Merge pull request #1769 from ethomson/configparse
Parse config headers with quoted quotes
This commit is contained in:
commit
c7d4904c47
@ -792,6 +792,11 @@ static int parse_section_header_ext(diskfile_backend *cfg, const char *line, con
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
case 0:
|
||||||
|
set_parse_error(cfg, 0, "Unexpected end-of-line in section header");
|
||||||
|
git_buf_free(&buf);
|
||||||
|
return -1;
|
||||||
|
|
||||||
case '"':
|
case '"':
|
||||||
++quote_marks;
|
++quote_marks;
|
||||||
continue;
|
continue;
|
||||||
@ -801,6 +806,12 @@ static int parse_section_header_ext(diskfile_backend *cfg, const char *line, con
|
|||||||
|
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case '"':
|
case '"':
|
||||||
|
if (&line[rpos-1] == last_quote) {
|
||||||
|
set_parse_error(cfg, 0, "Missing closing quotation mark in section header");
|
||||||
|
git_buf_free(&buf);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
case '\\':
|
case '\\':
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -431,10 +431,10 @@ void test_config_read__simple_read_from_specific_level(void)
|
|||||||
git_config_free(cfg);
|
git_config_free(cfg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void clean_empty_config(void *unused)
|
static void clean_test_config(void *unused)
|
||||||
{
|
{
|
||||||
GIT_UNUSED(unused);
|
GIT_UNUSED(unused);
|
||||||
cl_fixture_cleanup("./empty");
|
cl_fixture_cleanup("./testconfig");
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_config_read__can_load_and_parse_an_empty_config_file(void)
|
void test_config_read__can_load_and_parse_an_empty_config_file(void)
|
||||||
@ -442,10 +442,21 @@ void test_config_read__can_load_and_parse_an_empty_config_file(void)
|
|||||||
git_config *cfg;
|
git_config *cfg;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
cl_set_cleanup(&clean_empty_config, NULL);
|
cl_set_cleanup(&clean_test_config, NULL);
|
||||||
cl_git_mkfile("./empty", "");
|
cl_git_mkfile("./testconfig", "");
|
||||||
cl_git_pass(git_config_open_ondisk(&cfg, "./empty"));
|
cl_git_pass(git_config_open_ondisk(&cfg, "./testconfig"));
|
||||||
cl_assert_equal_i(GIT_ENOTFOUND, git_config_get_int32(&i, cfg, "nope.neither"));
|
cl_assert_equal_i(GIT_ENOTFOUND, git_config_get_int32(&i, cfg, "nope.neither"));
|
||||||
|
|
||||||
git_config_free(cfg);
|
git_config_free(cfg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_config_read__corrupt_header(void)
|
||||||
|
{
|
||||||
|
git_config *cfg;
|
||||||
|
|
||||||
|
cl_set_cleanup(&clean_test_config, NULL);
|
||||||
|
cl_git_mkfile("./testconfig", "[sneaky ] \"quoted closing quote mark\\\"");
|
||||||
|
cl_git_fail(git_config_open_ondisk(&cfg, "./testconfig"));
|
||||||
|
|
||||||
|
git_config_free(cfg);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user