Skip to content

Commit 07be53c

Browse files
rostedtshuahkh
authored andcommitted
selftests/ftrace: Differentiate bash and dash in dynevent_limitations.tc
bash and dash evaluate variables differently. dash will evaluate '\\' every time it is read whereas bash does not. TEST_STRING="$TEST_STRING \\$i" echo $TEST_STRING With i=123 On bash, that will print "\123" but on dash, that will print the escape sequence of \123 as the \ will be interpreted again in the echo. The dynevent_limitations.tc test created a very large list of arguments to test the maximum number of arguments to pass to the dynamic events file. It had a loop of: TEST_STRING=$1 # Acceptable for i in `seq 1 $MAX_ARGS`; do TEST_STRING="$TEST_STRING \\$i" done echo "$TEST_STRING" >> dynamic_events This worked fine on bash, but when run on dash it failed. This was due to dash interpreting the "\\$i" twice. Once when it was assigned to TEST_STRING and a second time with the echo $TEST_STRING. bash does not process the backslash more than the first time. To solve this, assign a double backslash to a variable "bs" and then echo it to "ts". If "ts" changes, it is dash, if not, it is bash. Then update "bs" accordingly, and use that to assign TEST_STRING. Now this could possibly just check if "$BASH" is defined or not, but this is testing if the issue exists and not just which shell is being used. Link: https://lore.kernel.org/r/20250414210900.4de5e8b9@gandalf.local.home Fixes: 581a7b2 ("selftests/ftrace: Add dynamic events argument limitation test case") Reported-by: Mark Brown <broonie@kernel.org> Closes: https://lore.kernel.org/all/350786cc-9e40-4396-ab95-4f10d69122fb@sirena.org.uk/ Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org> Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
1 parent 8ffd015 commit 07be53c

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

tools/testing/selftests/ftrace/test.d/dynevent/dynevent_limitations.tc

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,32 @@
77
MAX_ARGS=128
88
EXCEED_ARGS=$((MAX_ARGS + 1))
99

10+
# bash and dash evaluate variables differently.
11+
# dash will evaluate '\\' every time it is read whereas bash does not.
12+
#
13+
# TEST_STRING="$TEST_STRING \\$i"
14+
# echo $TEST_STRING
15+
#
16+
# With i=123
17+
# On bash, that will print "\123"
18+
# but on dash, that will print the escape sequence of \123 as the \ will
19+
# be interpreted again in the echo.
20+
#
21+
# Set a variable "bs" to save a double backslash, then echo that
22+
# to "ts" to see if $ts changed or not. If it changed, it's dash,
23+
# if not, it's bash, and then bs can equal a single backslash.
24+
bs='\\'
25+
ts=`echo $bs`
26+
if [ "$ts" = '\\' ]; then
27+
# this is bash
28+
bs='\'
29+
fi
30+
1031
check_max_args() { # event_header
1132
TEST_STRING=$1
1233
# Acceptable
1334
for i in `seq 1 $MAX_ARGS`; do
14-
TEST_STRING="$TEST_STRING \\$i"
35+
TEST_STRING="$TEST_STRING $bs$i"
1536
done
1637
echo "$TEST_STRING" >> dynamic_events
1738
echo > dynamic_events

0 commit comments

Comments
 (0)