Commit 0ba62ba5 by Edward Thomson

Merge pull request #3384 from libgit2/cmn/regex-nofail

diff: don't error out on an invalid regex
parents f594b6ff e451cd5c
...@@ -97,8 +97,7 @@ static int diff_driver_add_patterns( ...@@ -97,8 +97,7 @@ static int diff_driver_add_patterns(
for (scan = regex_str; scan; scan = end) { for (scan = regex_str; scan; scan = end) {
/* get pattern to fill in */ /* get pattern to fill in */
if ((pat = git_array_alloc(drv->fn_patterns)) == NULL) { if ((pat = git_array_alloc(drv->fn_patterns)) == NULL) {
error = -1; return -1;
break;
} }
pat->flags = regex_flags; pat->flags = regex_flags;
...@@ -117,10 +116,9 @@ static int diff_driver_add_patterns( ...@@ -117,10 +116,9 @@ static int diff_driver_add_patterns(
break; break;
if ((error = regcomp(&pat->re, buf.ptr, regex_flags)) != 0) { if ((error = regcomp(&pat->re, buf.ptr, regex_flags)) != 0) {
/* if regex fails to compile, warn? fail? */ /*
error = giterr_set_regex(&pat->re, error); * TODO: issue a warning
regfree(&pat->re); */
break;
} }
} }
...@@ -128,7 +126,8 @@ static int diff_driver_add_patterns( ...@@ -128,7 +126,8 @@ static int diff_driver_add_patterns(
(void)git_array_pop(drv->fn_patterns); /* release last item */ (void)git_array_pop(drv->fn_patterns); /* release last item */
git_buf_free(&buf); git_buf_free(&buf);
return error; /* We want to ignore bad patterns, so return success regardless */
return 0;
} }
static int diff_driver_xfuncname(const git_config_entry *entry, void *payload) static int diff_driver_xfuncname(const git_config_entry *entry, void *payload)
......
...@@ -250,3 +250,29 @@ void test_diff_drivers__builtins(void) ...@@ -250,3 +250,29 @@ void test_diff_drivers__builtins(void)
git_buf_free(&expected); git_buf_free(&expected);
git_vector_free(&files); git_vector_free(&files);
} }
void test_diff_drivers__invalid_pattern(void)
{
git_config *cfg;
git_index *idx;
git_diff *diff;
git_patch *patch;
git_diff_options opts = GIT_DIFF_OPTIONS_INIT;
g_repo = cl_git_sandbox_init("userdiff");
cl_git_mkfile("userdiff/.gitattributes", "*.storyboard diff=storyboard\n");
cl_git_pass(git_repository_config__weakptr(&cfg, g_repo));
cl_git_pass(git_config_set_string(cfg, "diff.storyboard.xfuncname", "<!--(.*?)-->"));
cl_git_mkfile("userdiff/dummy.storyboard", "");
cl_git_pass(git_repository_index__weakptr(&idx, g_repo));
cl_git_pass(git_index_add_bypath(idx, "dummy.storyboard"));
cl_git_mkfile("userdiff/dummy.storyboard", "some content\n");
cl_git_pass(git_diff_index_to_workdir(&diff, g_repo, NULL, &opts));
cl_git_pass(git_patch_from_diff(&patch, diff, 0));
git_patch_free(patch);
git_diff_free(diff);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment