iquote.tests   [plain text]


# bug in bash up to and including bash-3.0 (including patches)
#
# problem is conflict between CTLNUL used internally to denote quoted null
# characters and its value (0x7f) appearing in the expansion of a variable
#
unset x
recho "xxx${x}yyy"

y=$'\177'
recho "xxx${y}yyy"

unset y

unset undef

set ""
recho ${undef-"x$*y"}

set $'\177'
recho ${undef-"x$*y"}

shift $#

f()
{
	recho "-${*-x}-"
}

f ''
f $'\177'

unset -f f

x=12345

recho "${x:6:1}"

x=
recho "${x:0:1}"

y=$'\177'
recho "${y:0:1}"

y=xxx$'\177'yyy
recho "${y:3:3}"

unset x y

eval tmp=`printf "$'\\\\\x%x'\n" 127`
printf "%#1x\n" "'$tmp"

x=$'\177'
printf "%#1x\n" "'$x"

a=127
eval c=\$\'\\$(printf '%o' $a)\'
printf "%#1x\n" "'$c"

recho "$c"
recho "$c"@
recho @"$c"@
recho @"$c"

recho "$c"
recho "$c@"
recho "@$c@"
recho "@$c"

unset tmp x a c

qtest()
{
	recho ${#q} "${q}" ${q}
}

q=$'\x7f'
qtest

q=${q}a
qtest

q=$'\x7fa'
qtest

q="${q}a"
qtest

unset -f qtest
unset q

set -- ''
recho "${*:1}"
recho  ${*:1}
recho  -${*:1}-
recho  -"${*:1}"-

set $'\177'
recho "${*:1}"
recho "-${*:1}-"

recho  ${*:1}
recho -${*:1}-

shift $#

DEL=`awk 'END{printf("%c", 0+127)}' </dev/null`
T1=a\ $DEL
T2="a $DEL"
set -- x $(echo $T1|wc -c) $(echo $T2|wc -c); shift
L1=$1; L2=$2
case "$L1/$L2" in
4/4) echo ok;;
*) echo CTLNUL bug: L1=$L1, L2=$L2;;
esac

x=$'\177'
recho "aaa${x}bbb"
recho ccc"${x}"ddd
recho eee"$x"fff
recho ggg"$(echo $x)"hhh

x=
recho "aaa${x}bbb"
recho ccc"${x}"ddd
recho eee"$x"fff
recho ggg"$(echo $x)"hhh

set -- $'\177'
recho "aaa${1}bbb"
recho ccc"${1}"ddd
recho eee"$1"fff
recho ggg"$(echo $1)"hhh

set -- ""
recho "aaa${1}bbb"
recho ccc"${1}"ddd
recho eee"$1"fff
recho ggg"$(echo $1)"hhh

recho aaa$'\177'bbb
recho ccc""ddd
recho "eeefff"
recho ggg"$(echo $'\177')"hhh