mirror of
https://github.com/nextcloud/desktop.git
synced 2024-10-27 15:05:19 +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 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);
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -237,6 +237,30 @@ static void check_csync_excluded(void **state)
|
|||
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||
rc = csync_excluded_no_ctx(csync->excludes, "bond0071", CSYNC_FTW_TYPE_FILE);
|
||||
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)
|
||||
|
@ -426,6 +450,29 @@ static void check_csync_excluded_traversal(void **state)
|
|||
rc = csync_excluded_traversal(csync, "bond0071", CSYNC_FTW_TYPE_FILE);
|
||||
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)
|
||||
|
|
Loading…
Reference in a new issue