sh: Do not word split "${#parameter}".
This is only a problem if IFS contains digits, which is unusual but valid. Because of an incorrect fix for PR bin/12137, "${#parameter}" was treated as ${#parameter}. The underlying problem was that "${#parameter}" erroneously added CTLESC bytes before determining the length. This was properly fixed for PR bin/56147 but the incorrect fix was not backed out. Reported by: Seeker on forums.freebsd.org MFC after: 2 weeks
This commit is contained in:
parent
aca2249d54
commit
caa7ccdc54
@ -1572,8 +1572,8 @@ varname:
|
||||
pungetc();
|
||||
}
|
||||
STPUTC('=', out);
|
||||
if (subtype != VSLENGTH && (state[level].syntax == DQSYNTAX ||
|
||||
state[level].syntax == ARISYNTAX))
|
||||
if (state[level].syntax == DQSYNTAX ||
|
||||
state[level].syntax == ARISYNTAX)
|
||||
flags |= VSQUOTE;
|
||||
*(stackblock() + typeloc) = subtype | flags;
|
||||
if (subtype != VSNORMAL) {
|
||||
|
8
tools/regression/bin/sh/expansion/length6.0
Normal file
8
tools/regression/bin/sh/expansion/length6.0
Normal file
@ -0,0 +1,8 @@
|
||||
# $FreeBSD$
|
||||
|
||||
x='!@#$%^&*()[]'
|
||||
[ ${#x} = 12 ] || echo bad 1
|
||||
[ "${#x}" = 12 ] || echo bad 2
|
||||
IFS=2
|
||||
[ ${#x} = 1 ] || echo bad 3
|
||||
[ "${#x}" = 12 ] || echo bad 4
|
Loading…
x
Reference in New Issue
Block a user