mirror of
https://github.com/nextcloud/desktop.git
synced 2024-10-27 23:17:13 +03:00
Excludes: Fix bug with escapes in the regex, add tests
This commit is contained in:
parent
f609ea3bef
commit
01bbbb7d08
2 changed files with 48 additions and 1 deletions
|
@ -463,7 +463,7 @@ void csync_s::TraversalExcludes::prepare(c_strlist_t *excludes)
|
||||||
if (exclude[0] == '\r') continue; // empty line
|
if (exclude[0] == '\r') continue; // empty line
|
||||||
|
|
||||||
/* If an exclude entry contains some fnmatch-ish characters, we use the C-style codepath without QRegularEpression */
|
/* If an exclude entry contains some fnmatch-ish characters, we use the C-style codepath without QRegularEpression */
|
||||||
if (strchr(exclude, '/') || strchr(exclude, '[') || strchr(exclude, '{')) {
|
if (strchr(exclude, '/') || strchr(exclude, '[') || strchr(exclude, '{') || strchr(exclude, '\\')) {
|
||||||
_csync_exclude_add(&list_patterns_fnmatch, exclude);
|
_csync_exclude_add(&list_patterns_fnmatch, exclude);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -237,6 +237,30 @@ static void check_csync_excluded(void **state)
|
||||||
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
rc = csync_excluded_no_ctx(csync->excludes, "bond0071", CSYNC_FTW_TYPE_FILE);
|
rc = csync_excluded_no_ctx(csync->excludes, "bond0071", CSYNC_FTW_TYPE_FILE);
|
||||||
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
|
/* brackets */
|
||||||
|
_csync_exclude_add( &(csync->excludes), "a [bc] d" );
|
||||||
|
csync_exclude_traversal_prepare(csync);
|
||||||
|
rc = csync_excluded_no_ctx(csync->excludes, "a d d", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
rc = csync_excluded_no_ctx(csync->excludes, "a d", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
rc = csync_excluded_no_ctx(csync->excludes, "a b d", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
rc = csync_excluded_no_ctx(csync->excludes, "a c d", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* escapes */
|
||||||
|
_csync_exclude_add( &(csync->excludes), "\\a \\* \\?" );
|
||||||
|
csync_exclude_traversal_prepare(csync);
|
||||||
|
rc = csync_excluded_no_ctx(csync->excludes, "\\a \\* \\?", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
rc = csync_excluded_no_ctx(csync->excludes, "a b c", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
rc = csync_excluded_no_ctx(csync->excludes, "a * ?", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void check_csync_excluded_traversal(void **state)
|
static void check_csync_excluded_traversal(void **state)
|
||||||
|
@ -426,6 +450,29 @@ static void check_csync_excluded_traversal(void **state)
|
||||||
rc = csync_excluded_traversal(csync, "bond0071", CSYNC_FTW_TYPE_FILE);
|
rc = csync_excluded_traversal(csync, "bond0071", CSYNC_FTW_TYPE_FILE);
|
||||||
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
|
/* brackets */
|
||||||
|
_csync_exclude_add( &(csync->excludes), "a [bc] d" );
|
||||||
|
csync_exclude_traversal_prepare(csync);
|
||||||
|
rc = csync_excluded_traversal(csync, "a d d", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
rc = csync_excluded_traversal(csync, "a d", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
rc = csync_excluded_traversal(csync, "a b d", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
rc = csync_excluded_traversal(csync, "a c d", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* escapes */
|
||||||
|
_csync_exclude_add( &(csync->excludes), "\\a \\* \\?" );
|
||||||
|
csync_exclude_traversal_prepare(csync);
|
||||||
|
rc = csync_excluded_traversal(csync, "\\a \\* \\?", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
rc = csync_excluded_traversal(csync, "a b c", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
rc = csync_excluded_traversal(csync, "a * ?", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void check_csync_pathes(void **state)
|
static void check_csync_pathes(void **state)
|
||||||
|
|
Loading…
Reference in a new issue