freebsd-dev/bin/sh/tests/parameters/positional5.0
Jilles Tjoelker 7b9104c0a9 sh: Correctly handle positional parameters beyond INT_MAX on 64-bit systems.
Currently, there can be no more than INT_MAX positional parameters. Make
sure to treat all higher ones as unset to avoid incorrect results and
crashes.

On 64-bit systems, our atoi() takes the low 32 bits of the strtol() and
sign-extends them.

On 32-bit systems, the call to atoi() returned INT_MAX for too high values
and there is not enough address space for so many positional parameters, so
there was no issue.
2014-07-12 21:54:11 +00:00

15 lines
184 B
Plaintext

# $FreeBSD$
i=1
r=0
while [ $i -lt $((0x100000000)) ]; do
t=
eval t=\${$i-x}
case $t in
x) ;;
*) echo "Problem with \${$i}" >&2; r=1 ;;
esac
i=$((i + 0x10000000))
done
exit $r