| Line | |
|---|
| 1 | # bug in bash up to and including bash-3.0 (including patches)
|
|---|
| 2 | #
|
|---|
| 3 | # problem is conflict between CTLNUL used internally to denote quoted null
|
|---|
| 4 | # characters and its value (0x7f) appearing in the expansion of a variable
|
|---|
| 5 | #
|
|---|
| 6 | unset x
|
|---|
| 7 | recho "xxx${x}yyy"
|
|---|
| 8 |
|
|---|
| 9 | y=$'\177'
|
|---|
| 10 | recho "xxx${y}yyy"
|
|---|
| 11 |
|
|---|
| 12 | unset y
|
|---|
| 13 |
|
|---|
| 14 | unset undef
|
|---|
| 15 |
|
|---|
| 16 | set ""
|
|---|
| 17 | recho ${undef-"x$*y"}
|
|---|
| 18 |
|
|---|
| 19 | set $'\177'
|
|---|
| 20 | recho ${undef-"x$*y"}
|
|---|
| 21 |
|
|---|
| 22 | shift $#
|
|---|
| 23 |
|
|---|
| 24 | f()
|
|---|
| 25 | {
|
|---|
| 26 | recho "-${*-x}-"
|
|---|
| 27 | }
|
|---|
| 28 |
|
|---|
| 29 | f ''
|
|---|
| 30 | f $'\177'
|
|---|
| 31 |
|
|---|
| 32 | unset -f f
|
|---|
| 33 |
|
|---|
| 34 | x=12345
|
|---|
| 35 |
|
|---|
| 36 | recho "${x:6:1}"
|
|---|
| 37 |
|
|---|
| 38 | x=
|
|---|
| 39 | recho "${x:0:1}"
|
|---|
| 40 |
|
|---|
| 41 | y=$'\177'
|
|---|
| 42 | recho "${y:0:1}"
|
|---|
| 43 |
|
|---|
| 44 | y=xxx$'\177'yyy
|
|---|
| 45 | recho "${y:3:3}"
|
|---|
| 46 |
|
|---|
| 47 | unset x y
|
|---|
| 48 |
|
|---|
| 49 | eval tmp=`printf "$'\\\\\x%x'\n" 127`
|
|---|
| 50 | printf "%#1x\n" "'$tmp"
|
|---|
| 51 |
|
|---|
| 52 | x=$'\177'
|
|---|
| 53 | printf "%#1x\n" "'$x"
|
|---|
| 54 |
|
|---|
| 55 | a=127
|
|---|
| 56 | eval c=\$\'\\$(printf '%o' $a)\'
|
|---|
| 57 | printf "%#1x\n" "'$c"
|
|---|
| 58 |
|
|---|
| 59 | recho "$c"
|
|---|
| 60 | recho "$c"@
|
|---|
| 61 | recho @"$c"@
|
|---|
| 62 | recho @"$c"
|
|---|
| 63 |
|
|---|
| 64 | recho "$c"
|
|---|
| 65 | recho "$c@"
|
|---|
| 66 | recho "@$c@"
|
|---|
| 67 | recho "@$c"
|
|---|
| 68 |
|
|---|
| 69 | unset tmp x a c
|
|---|
| 70 |
|
|---|
| 71 | qtest()
|
|---|
| 72 | {
|
|---|
| 73 | recho ${#q} "${q}" ${q}
|
|---|
| 74 | }
|
|---|
| 75 |
|
|---|
| 76 | q=$'\x7f'
|
|---|
| 77 | qtest
|
|---|
| 78 |
|
|---|
| 79 | q=${q}a
|
|---|
| 80 | qtest
|
|---|
| 81 |
|
|---|
| 82 | q=$'\x7fa'
|
|---|
| 83 | qtest
|
|---|
| 84 |
|
|---|
| 85 | q="${q}a"
|
|---|
| 86 | qtest
|
|---|
| 87 |
|
|---|
| 88 | unset -f qtest
|
|---|
| 89 | unset q
|
|---|
| 90 |
|
|---|
| 91 | set -- ''
|
|---|
| 92 | recho "${*:1}"
|
|---|
| 93 | recho ${*:1}
|
|---|
| 94 | recho -${*:1}-
|
|---|
| 95 | recho -"${*:1}"-
|
|---|
| 96 |
|
|---|
| 97 | set $'\177'
|
|---|
| 98 | recho "${*:1}"
|
|---|
| 99 | recho "-${*:1}-"
|
|---|
| 100 |
|
|---|
| 101 | recho ${*:1}
|
|---|
| 102 | recho -${*:1}-
|
|---|
| 103 |
|
|---|
| 104 | shift $#
|
|---|
| 105 |
|
|---|
| 106 | DEL=`awk 'END{printf("%c", 0+127)}' </dev/null`
|
|---|
| 107 | T1=a\ $DEL
|
|---|
| 108 | T2="a $DEL"
|
|---|
| 109 | set -- x $(echo $T1|wc -c) $(echo $T2|wc -c); shift
|
|---|
| 110 | L1=$1; L2=$2
|
|---|
| 111 | case "$L1/$L2" in
|
|---|
| 112 | 4/4) echo ok;;
|
|---|
| 113 | *) echo CTLNUL bug: L1=$L1, L2=$L2;;
|
|---|
| 114 | esac
|
|---|
| 115 |
|
|---|
| 116 | x=$'\177'
|
|---|
| 117 | recho "aaa${x}bbb"
|
|---|
| 118 | recho ccc"${x}"ddd
|
|---|
| 119 | recho eee"$x"fff
|
|---|
| 120 | recho ggg"$(echo $x)"hhh
|
|---|
| 121 |
|
|---|
| 122 | x=
|
|---|
| 123 | recho "aaa${x}bbb"
|
|---|
| 124 | recho ccc"${x}"ddd
|
|---|
| 125 | recho eee"$x"fff
|
|---|
| 126 | recho ggg"$(echo $x)"hhh
|
|---|
| 127 |
|
|---|
| 128 | set -- $'\177'
|
|---|
| 129 | recho "aaa${1}bbb"
|
|---|
| 130 | recho ccc"${1}"ddd
|
|---|
| 131 | recho eee"$1"fff
|
|---|
| 132 | recho ggg"$(echo $1)"hhh
|
|---|
| 133 |
|
|---|
| 134 | set -- ""
|
|---|
| 135 | recho "aaa${1}bbb"
|
|---|
| 136 | recho ccc"${1}"ddd
|
|---|
| 137 | recho eee"$1"fff
|
|---|
| 138 | recho ggg"$(echo $1)"hhh
|
|---|
| 139 |
|
|---|
| 140 | recho aaa$'\177'bbb
|
|---|
| 141 | recho ccc""ddd
|
|---|
| 142 | recho "eeefff"
|
|---|
| 143 | recho ggg"$(echo $'\177')"hhh
|
|---|
Note:
See
TracBrowser
for help on using the repository browser.