summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorOleg Verych <olecom@flower.upol.cz>2007-10-17 12:34:03 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2007-10-17 12:34:03 +0800
commitb2e1d1f967655e4987cae4be15b64b6ed3cf2ea4 (patch)
tree986e582315631286e8f0d87e8fe9da4d34942c7a /src
parent[EXEC] Fixed execing of scripts with no hash-bang (diff)
downloaddash-b2e1d1f967655e4987cae4be15b64b6ed3cf2ea4.tar.gz
dash-b2e1d1f967655e4987cae4be15b64b6ed3cf2ea4.zip
[BUILTIN] Disallow completely blank strings in non-arithmetic context.
* NULL as a number argument:

olecom@deen:/mnt/debian/src/dash-0.5.3$ time src/dash tst-01.sh
test: 20: `': bad number
`' eq 0: 2  must be >1, Not A Number
test: 20: `': bad number
`' ne 0: 2  must be >1, Not A Number
test: 20: `': bad number
`' gt 0: 2  must be >1, Not A Number
test: 20: `': bad number
`' ge 0: 2  must be >1, Not A Number
test: 20: `': bad number
`' lt 0: 2  must be >1, Not A Number
test: 20: `': bad number
`' le 0: 2  must be >1, Not A Number
/usr/bin/test: invalid integer `'
`' eq 0: 2  must be >1, Not A Number
/usr/bin/test: invalid integer `'
`' ne 0: 2  must be >1, Not A Number
/usr/bin/test: invalid integer `'
`' gt 0: 2  must be >1, Not A Number
/usr/bin/test: invalid integer `'
`' ge 0: 2  must be >1, Not A Number
/usr/bin/test: invalid integer `'
`' lt 0: 2  must be >1, Not A Number
/usr/bin/test: invalid integer `'
`' le 0: 2  must be >1, Not A Number

#!/usr/bin/printf This not executable script%c\n

test_arithm() {
    for aop in eq ne gt ge lt le
    do  "$1" 0 -$aop "$NOTHING"
	echo "\`' $aop 0:" $? " must be >1, Not A Number"
    done
}
# opengroup.org/onlinepubs/000095399/utilites/test.html (nothing about long):
test_arithm test
test_arithm /usr/bin/test

# shend
Diffstat (limited to 'src')
-rw-r--r--src/mystring.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/mystring.c b/src/mystring.c
index b84b7e2..8e1200a 100644
--- a/src/mystring.c
+++ b/src/mystring.c
@@ -123,6 +123,13 @@ intmax_t atomax(const char *s, int base)
 	if (errno != 0)
 		sh_error(illnum, s);
 
+	/*
+	 * Disallow completely blank strings in non-arithmetic (base != 0)
+	 * contexts.
+	 */
+	if (base && (p == s))
+		sh_error(illnum, s);
+
 	while (isspace((unsigned char)*p))
 	      p++;