From f5eaadb96fb94b2d3666e53a99495840a3099aec Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Wed, 2 Oct 2024 16:01:36 -0400 Subject: color: Fix an assertion failure with embedded NUL bytes Leading NUL bytes (e.g. `*\0.gz=...`) could cause us to insert a non-prefix-free set of strings into the case-insensitive extension trie, which would lead to crashes like bfs: trie_split@src/trie.c:538: Assertion failed: `key_nibble != rep_nibble` and OOB accesses to trie leaf keys. Fix it by ignoring those extensions, since filenames cannot contain NUL bytes. Fixes: 08030aea ("color: Delay the case_sensitive decision") --- tests/bfs/color_ext_case_nul.out | 27 +++++++++++++++++++++++++++ tests/bfs/color_ext_case_nul.sh | 5 +++++ 2 files changed, 32 insertions(+) create mode 100644 tests/bfs/color_ext_case_nul.out create mode 100644 tests/bfs/color_ext_case_nul.sh (limited to 'tests') diff --git a/tests/bfs/color_ext_case_nul.out b/tests/bfs/color_ext_case_nul.out new file mode 100644 index 0000000..8ccd9a7 --- /dev/null +++ b/tests/bfs/color_ext_case_nul.out @@ -0,0 +1,27 @@ +$'rainbow/\e[1m' +$'rainbow/\e[1m/'$'\e[0m' +rainbow +rainbow/lower.gz +rainbow/lower.tar.gz +rainbow/lu.tar.GZ +rainbow/ul.TAR.gz +rainbow/upper.GZ +rainbow/upper.TAR.GZ +rainbow/exec.sh +rainbow/socket +rainbow/broken +rainbow/chardev_link +rainbow/link.txt +rainbow/sticky_ow +rainbow/sgid +rainbow/pipe +rainbow/ow +rainbow/sugid +rainbow/suid +rainbow/sticky +rainbow/file.dat +rainbow/file.txt +rainbow/lower.tar +rainbow/mh1 +rainbow/mh2 +rainbow/upper.TAR diff --git a/tests/bfs/color_ext_case_nul.sh b/tests/bfs/color_ext_case_nul.sh new file mode 100644 index 0000000..68fea1c --- /dev/null +++ b/tests/bfs/color_ext_case_nul.sh @@ -0,0 +1,5 @@ +# Regression test: embedded NUL bytes in an extension caused an assertion +# failure in the trie implementation + +export LS_COLORS='*.gz=01;31:*\0.GZ=01;32:' +bfs_diff rainbow -color -- cgit v1.2.3