зеркало из https://github.com/microsoft/git.git
Merge branch 'jk/maint-config-bogus-section' into maint
"git config --rename-section" to rename an existing section into a bogus one did not check the new name. By Jeff King * jk/maint-config-bogus-section: config: reject bogus section names for --rename-section
This commit is contained in:
Коммит
4c8ad06e7c
24
config.c
24
config.c
|
@ -1552,20 +1552,42 @@ static int section_name_match (const char *buf, const char *name)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int section_name_is_ok(const char *name)
|
||||
{
|
||||
/* Empty section names are bogus. */
|
||||
if (!*name)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* Before a dot, we must be alphanumeric or dash. After the first dot,
|
||||
* anything goes, so we can stop checking.
|
||||
*/
|
||||
for (; *name && *name != '.'; name++)
|
||||
if (*name != '-' && !isalnum(*name))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* if new_name == NULL, the section is removed instead */
|
||||
int git_config_rename_section_in_file(const char *config_filename,
|
||||
const char *old_name, const char *new_name)
|
||||
{
|
||||
int ret = 0, remove = 0;
|
||||
char *filename_buf = NULL;
|
||||
struct lock_file *lock = xcalloc(sizeof(struct lock_file), 1);
|
||||
struct lock_file *lock;
|
||||
int out_fd;
|
||||
char buf[1024];
|
||||
FILE *config_file;
|
||||
|
||||
if (new_name && !section_name_is_ok(new_name)) {
|
||||
ret = error("invalid section name: %s", new_name);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!config_filename)
|
||||
config_filename = filename_buf = git_pathdup("config");
|
||||
|
||||
lock = xcalloc(sizeof(struct lock_file), 1);
|
||||
out_fd = hold_lock_file_for_update(lock, config_filename, 0);
|
||||
if (out_fd < 0) {
|
||||
ret = error("could not lock config file %s", config_filename);
|
||||
|
|
|
@ -550,6 +550,14 @@ EOF
|
|||
|
||||
test_expect_success "rename succeeded" "test_cmp expect .git/config"
|
||||
|
||||
test_expect_success 'renaming empty section name is rejected' '
|
||||
test_must_fail git config --rename-section branch.zwei ""
|
||||
'
|
||||
|
||||
test_expect_success 'renaming to bogus section is rejected' '
|
||||
test_must_fail git config --rename-section branch.zwei "bogus name"
|
||||
'
|
||||
|
||||
cat >> .git/config << EOF
|
||||
[branch "zwei"] a = 1 [branch "vier"]
|
||||
EOF
|
||||
|
|
Загрузка…
Ссылка в новой задаче