1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-04-11 14:44:18 +02:00
Files
coreutils/tests/fold/fold-zero-width.sh
Pádraig Brady 8a1f434463 tests: avoid false failure on older Linux kernels
* tests/fold/fold-zero-width.sh: Check the shell was able to create
the redirection file, as intermittently on CentOS 5,6,7 this wasn't
the case, with the shell giving an xmalloc failure due to the ulimit.
Reported by William Bader and Bruno Haible.
2025-09-21 16:37:26 +01:00

67 lines
2.2 KiB
Bash
Executable File

#!/bin/sh
# Test fold with zero width characters.
# Copyright (C) 2025 Free Software Foundation, Inc.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
print_ver_ fold printf
getlimits_
# Make sure we do not overflow the buffer.
IO_BUFSIZE_TIMES2=$(($IO_BUFSIZE * 2))
# Fold counts by columns by default.
head -c $IO_BUFSIZE_TIMES2 /dev/zero | fold > out || fail=1
test $(wc -l < out) -eq 0 || fail=1
# Check that zero width characters are counted with --characters.
head -c $IO_BUFSIZE_TIMES2 /dev/zero | fold --characters > out || fail=1
test $(wc -l < out) -eq $(($IO_BUFSIZE_TIMES2 / 80)) || fail=1
test "$LOCALE_FR_UTF8" != none || skip_ "French UTF-8 locale not available"
LC_ALL=$LOCALE_FR_UTF8
export LC_ALL
test $(env printf '\u200B' | wc -L) -eq 0 ||
skip_ "character width mismatch"
# Same thing, but using U+200B ZERO WIDTH SPACE.
yes $(env printf '\u200B') |
head -n $IO_BUFSIZE_TIMES2 | tr -d '\n' > inp || framework_failure_
fold inp > out || fail=1
test $(wc -l < out) -eq 0 || fail=1
fold --characters inp > out || fail=1
test $(wc -l < out) -eq $(($IO_BUFSIZE_TIMES2 / 80)) || fail=1
# Ensure bounded memory operation.
test -w /dev/full && test -c /dev/full &&
vm=$(get_min_ulimit_v_ fold /dev/null) && {
# \303 results in EILSEQ on input
for c in '\n' '\0' '\303'; do
tr '\0' "$c" < /dev/zero | timeout 10 $SHELL -c \
"(ulimit -v $(($vm+12000)) && fold 2>err >/dev/full)"
ret=$?
test -f err || skip_ 'shell ulimit failure'
{ test $ret = 124 || ! grep 'space' err >/dev/null; } &&
{ fail=1; cat err; echo "fold didn't diagnose ENOSPC" >&2; }
done
}
Exit $fail