169 lines
5.4 KiB
Diff
169 lines
5.4 KiB
Diff
From c4c2a96ec73775b1a4d4d850bb9ae7f50bc6912e Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Carlo=20Marcelo=20Arenas=20Bel=C3=B3n?= <carenas@gmail.com>
|
|
Date: Mon, 18 May 2020 11:44:16 -0700
|
|
Subject: [PATCH] t4210: detect REG_ILLSEQ dynamically and skip affected tests
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
7187c7bbb8 (t4210: skip i18n tests that don't work on FreeBSD, 2019-11-27)
|
|
adds a REG_ILLSEQ prerequisite, and to do that copies the common branch in
|
|
test-lib and expands it to include it in a special case for FreeBSD.
|
|
|
|
Instead; test for it using a previously added extension to test-tool and
|
|
use that, together with a function that identifies when regcomp/regexec
|
|
will be called with broken patterns to avoid any test that would otherwise
|
|
rely on undefined behaviour.
|
|
|
|
The description of the first test which wasn't accurate has been corrected,
|
|
and the test rearranged for clarity, including a helper function that avoids
|
|
overly long lines.
|
|
|
|
Only the affected engines will have their tests suppressed, also including
|
|
"fixed" if the PCRE optimization that uses LIBPCRE2 since b65abcafc7
|
|
(grep: use PCRE v2 for optimized fixed-string search, 2019-07-01) is not
|
|
available.
|
|
|
|
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
|
|
Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
|
|
Signed-off-by: Junio C Hamano <gitster@pobox.com>
|
|
---
|
|
t/t4210-log-i18n.sh | 77 ++++++++++++++++++++++++++++++++++++++++-------------
|
|
t/test-lib.sh | 6 -----
|
|
2 files changed, 59 insertions(+), 24 deletions(-)
|
|
|
|
diff --git a/t/t4210-log-i18n.sh b/t/t4210-log-i18n.sh
|
|
index c379208..d2dfcf1 100755
|
|
--- a/t/t4210-log-i18n.sh
|
|
+++ b/t/t4210-log-i18n.sh
|
|
@@ -10,6 +10,13 @@ latin1_e=$(printf '\351')
|
|
# invalid UTF-8
|
|
invalid_e=$(printf '\303\50)') # ")" at end to close opening "("
|
|
|
|
+have_reg_illseq=
|
|
+if test_have_prereq GETTEXT_LOCALE &&
|
|
+ ! LC_ALL=$is_IS_locale test-tool regex --silent $latin1_e
|
|
+then
|
|
+ have_reg_illseq=1
|
|
+fi
|
|
+
|
|
test_expect_success 'create commits in different encodings' '
|
|
test_tick &&
|
|
cat >msg <<-EOF &&
|
|
@@ -51,43 +58,77 @@ test_expect_success !MINGW 'log --grep does not find non-reencoded values (utf8)
|
|
test_must_be_empty actual
|
|
'
|
|
|
|
-test_expect_success !MINGW 'log --grep does not find non-reencoded values (latin1)' '
|
|
+test_expect_success 'log --grep does not find non-reencoded values (latin1)' '
|
|
git log --encoding=ISO-8859-1 --format=%s --grep=$utf8_e >actual &&
|
|
test_must_be_empty actual
|
|
'
|
|
|
|
+triggers_undefined_behaviour () {
|
|
+ local engine=$1
|
|
+
|
|
+ case $engine in
|
|
+ fixed)
|
|
+ if test -n "$have_reg_illseq" &&
|
|
+ ! test_have_prereq LIBPCRE2
|
|
+ then
|
|
+ return 0
|
|
+ fi
|
|
+ ;;
|
|
+ basic|extended)
|
|
+ if test -n "$have_reg_illseq"
|
|
+ then
|
|
+ return 0
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ return 1
|
|
+}
|
|
+
|
|
+mismatched_git_log () {
|
|
+ local pattern=$1
|
|
+
|
|
+ LC_ALL=$is_IS_locale git log --encoding=ISO-8859-1 --format=%s \
|
|
+ --grep=$pattern
|
|
+}
|
|
+
|
|
for engine in fixed basic extended perl
|
|
do
|
|
prereq=
|
|
if test $engine = "perl"
|
|
then
|
|
- prereq="PCRE"
|
|
- else
|
|
- prereq=""
|
|
+ prereq=PCRE
|
|
fi
|
|
force_regex=
|
|
if test $engine != "fixed"
|
|
then
|
|
- force_regex=.*
|
|
+ force_regex='.*'
|
|
fi
|
|
- test_expect_success !MINGW,!REGEX_ILLSEQ,GETTEXT_LOCALE,$prereq "-c grep.patternType=$engine log --grep does not find non-reencoded values (latin1 + locale)" "
|
|
- cat >expect <<-\EOF &&
|
|
- latin1
|
|
- utf8
|
|
- EOF
|
|
- LC_ALL=\"$is_IS_locale\" git -c grep.patternType=$engine log --encoding=ISO-8859-1 --format=%s --grep=\"$force_regex$latin1_e\" >actual &&
|
|
- test_cmp expect actual
|
|
- "
|
|
|
|
- test_expect_success !MINGW,GETTEXT_LOCALE,$prereq "-c grep.patternType=$engine log --grep does not find non-reencoded values (latin1 + locale)" "
|
|
- LC_ALL=\"$is_IS_locale\" git -c grep.patternType=$engine log --encoding=ISO-8859-1 --format=%s --grep=\"$force_regex$utf8_e\" >actual &&
|
|
- test_must_be_empty actual
|
|
+ test_expect_success $prereq "config grep.patternType=$engine" "
|
|
+ git config grep.patternType $engine
|
|
"
|
|
|
|
- test_expect_success !MINGW,!REGEX_ILLSEQ,GETTEXT_LOCALE,$prereq "-c grep.patternType=$engine log --grep does not die on invalid UTF-8 value (latin1 + locale + invalid needle)" "
|
|
- LC_ALL=\"$is_IS_locale\" git -c grep.patternType=$engine log --encoding=ISO-8859-1 --format=%s --grep=\"$force_regex$invalid_e\" >actual &&
|
|
+ test_expect_success GETTEXT_LOCALE,$prereq "log --grep does not find non-reencoded values (latin1 + locale)" "
|
|
+ mismatched_git_log '$force_regex$utf8_e' >actual &&
|
|
test_must_be_empty actual
|
|
"
|
|
+
|
|
+ if ! triggers_undefined_behaviour $engine
|
|
+ then
|
|
+ test_expect_success !MINGW,GETTEXT_LOCALE,$prereq "log --grep searches in log output encoding (latin1 + locale)" "
|
|
+ cat >expect <<-\EOF &&
|
|
+ latin1
|
|
+ utf8
|
|
+ EOF
|
|
+ mismatched_git_log '$force_regex$latin1_e' >actual &&
|
|
+ test_cmp expect actual
|
|
+ "
|
|
+
|
|
+ test_expect_success GETTEXT_LOCALE,$prereq "log --grep does not die on invalid UTF-8 value (latin1 + locale + invalid needle)" "
|
|
+ mismatched_git_log '$force_regex$invalid_e' >actual &&
|
|
+ test_must_be_empty actual
|
|
+ "
|
|
+ fi
|
|
done
|
|
|
|
test_done
|
|
diff --git a/t/test-lib.sh b/t/test-lib.sh
|
|
index 0ea1e5a..81473fe 100644
|
|
--- a/t/test-lib.sh
|
|
+++ b/t/test-lib.sh
|
|
@@ -1454,12 +1454,6 @@ case $uname_s in
|
|
test_set_prereq SED_STRIPS_CR
|
|
test_set_prereq GREP_STRIPS_CR
|
|
;;
|
|
-FreeBSD)
|
|
- test_set_prereq REGEX_ILLSEQ
|
|
- test_set_prereq POSIXPERM
|
|
- test_set_prereq BSLASHPSPEC
|
|
- test_set_prereq EXECKEEPSPID
|
|
- ;;
|
|
*)
|
|
test_set_prereq POSIXPERM
|
|
test_set_prereq BSLASHPSPEC
|
|
--
|
|
1.8.3.1
|
|
|