diff --git a/diff.c b/diff.c index 526f198059..349a61d588 100644 --- a/diff.c +++ b/diff.c @@ -1008,11 +1008,13 @@ static const char *userdiff_word_regex(struct diff_filespec *one) } static void init_diff_words_data(struct emit_callback *ecbdata, - struct diff_options *o, + struct diff_options *orig_opts, struct diff_filespec *one, struct diff_filespec *two) { int i; + struct diff_options *o = xmalloc(sizeof(struct diff_options)); + memcpy(o, orig_opts, sizeof(struct diff_options)); ecbdata->diff_words = xcalloc(1, sizeof(struct diff_words_data)); @@ -1052,6 +1054,7 @@ static void free_diff_words_data(struct emit_callback *ecbdata) { if (ecbdata->diff_words) { diff_words_flush(ecbdata); + free (ecbdata->diff_words->opt); free (ecbdata->diff_words->minus.text.ptr); free (ecbdata->diff_words->minus.orig); free (ecbdata->diff_words->plus.text.ptr); diff --git a/t/t4034-diff-words.sh b/t/t4034-diff-words.sh index 310ace1b5d..30d42cb3bf 100755 --- a/t/t4034-diff-words.sh +++ b/t/t4034-diff-words.sh @@ -365,7 +365,7 @@ test_expect_success 'setup history with two files' ' git commit -mmodified -a ' -test_expect_failure 'wordRegex for the first file does not apply to the second' ' +test_expect_success 'wordRegex for the first file does not apply to the second' ' echo "*.tex diff=tex" >.gitattributes && git config diff.tex.wordRegex "[a-z]+|." && cat >expect <<-\EOF &&