Tests: fix randstring() with BSD `tr`
authorMichael Jeanson <mjeanson@efficios.com>
Fri, 13 Nov 2020 23:19:31 +0000 (18:19 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 28 Oct 2022 20:26:37 +0000 (16:26 -0400)
On FreeBSD, `tr` will error out with an "Illegal byte sequence"
error when it is provided with an invalid multi-byte character.
This happens regularly when its input is random.

Forcing `tr` to use the 'C' locale works around this problem as
that locale only allows single-byte characters.

Change-Id: I8d8e84fb7f356205dd45479538e5bc0bff3c1668
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
tests/utils/utils.sh

index 196f636e68b3625731b9a16483be696345042fc0..1428afd62841ad99a930fc6fee7be617a2ddf1e0 100644 (file)
@@ -204,8 +204,13 @@ function validate_kernel_version ()
 #  $2 = include special characters; 1 = yes, 0 = no; defaults to yes
 function randstring()
 {
+       local len="${1:-16}"
+
        [ "$2" == "0" ] && CHAR="[:alnum:]" || CHAR="[:graph:]"
-       cat /dev/urandom 2>/dev/null | tr -cd "$CHAR" 2>/dev/null | head -c ${1:-16} 2>/dev/null
+       # /dev/urandom isn't guaranteed to generate valid multi-byte characters.
+       # Specifying the C locale eliminates the "Illegal byte sequence" error
+       # that 'tr' outputs in such cases.
+       LC_CTYPE=C tr -cd "$CHAR" < /dev/urandom 2>/dev/null | head -c "$len" 2>/dev/null
        echo
 }
 
This page took 0.026965 seconds and 4 git commands to generate.