#!/bin/sh
#
# Check strace options syntax.
#
# Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
# Copyright (c) 2016-2017 The strace developers.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. The name of the author may not be used to endorse or promote products
#    derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

. "${srcdir=.}/init.sh"

check_exit_status_and_stderr()
{
	$STRACE "$@" 2> "$LOG" &&
		dump_log_and_fail_with \
			"strace $* failed to handle the error properly"
	match_diff "$LOG" "$EXP" ||
		dump_log_and_fail_with \
			"strace $* failed to print expected diagnostics"
}

check_exit_status_and_stderr_using_grep()
{
	$STRACE "$@" 2> "$LOG" &&
		dump_log_and_fail_with \
			"strace $* failed to handle the error properly"
	match_grep "$LOG" "$EXP" ||
		dump_log_and_fail_with \
			"strace $* failed to print expected diagnostics"
}

strace_exp="${STRACE##* }"

check_e()
{
	local pattern="$1"; shift
	cat > "$EXP" << __EOF__
$strace_exp: $pattern
__EOF__
	check_exit_status_and_stderr "$@"
}

check_e_using_grep()
{
	local pattern="$1"; shift
	cat > "$EXP" << __EOF__
$strace_exp: $pattern
__EOF__
	check_exit_status_and_stderr_using_grep "$@"
}

check_h()
{
	local pattern="$1"; shift
	cat > "$EXP" << __EOF__
$strace_exp: $pattern
Try '$strace_exp -h' for more information.
__EOF__
	check_exit_status_and_stderr "$@"
}

check_e "Invalid process id: '0'" -p 0
check_e "Invalid process id: '-42'" -p -42
check_e "Invalid process id: '$$.'" -p $$.
check_e "Invalid process id: 'a'" -p 1,a
check_e "Syscall 'chdir' for -b isn't supported" -b chdir
check_e "Syscall 'chdir' for -b isn't supported" -b execve -b chdir

check_e "invalid system call '-1'" -e-1
check_e "invalid system call '-2'" -e -2
check_e "invalid system call '-3'" -etrace=-3
check_e "invalid system call '-4'" -e trace=-4
check_e "invalid system call '-5'" -e trace=1,-5
check_e "invalid system call '/non_syscall'" -e trace=/non_syscall
check_e "invalid system call '2147483647'" -e 2147483647
check_e "invalid system call '2147483648'" -e 2147483648
check_e "invalid system call '4294967295'" -e 4294967295
check_e "invalid system call '4294967296'" -e 4294967296

check_e "invalid descriptor '-1'" -eread=-1
check_e "invalid descriptor '-42'" -ewrite=-42
check_e "invalid descriptor '2147483648'" -eread=2147483648
check_e "invalid descriptor '4294967296'" -ewrite=4294967296
check_e "invalid descriptor 'foo'" -eread=foo
check_e "invalid descriptor ''" -ewrite=
check_e "invalid descriptor ','" -eread=,
check_e "invalid descriptor '!'" -ewrite='!'
check_e "invalid descriptor '!'" -eread='0,!'
check_e "invalid descriptor '!,'" -ewrite='!,'

check_e_using_grep 'regcomp: \+id: [[:alpha:]].+' -e trace='/+id'
check_e_using_grep 'regcomp: \*id: [[:alpha:]].+' -e trace='/*id'
check_e_using_grep 'regcomp: \{id: [[:alpha:]].+' -e trace='/{id'
check_e_using_grep 'regcomp: \(id: [[:alpha:]].+' -e trace='/(id'
check_e_using_grep 'regcomp: \[id: [[:alpha:]].+' -e trace='/[id'

check_h 'must have PROG [ARGS] or -p PID'
check_h 'PROG [ARGS] must be specified with -D' -D -p $$
check_h '-c and -C are mutually exclusive' -c -C true
check_h '-c and -C are mutually exclusive' -C -c true
check_h '(-c or -C) and -ff are mutually exclusive' -c -ff true
check_h '(-c or -C) and -ff are mutually exclusive' -C -ff true
check_h '-w must be given with (-c or -C)' -w true
check_h 'piping the output and -ff are mutually exclusive' -o '|' -ff true
check_h 'piping the output and -ff are mutually exclusive' -o '!' -ff true
check_h "invalid -a argument: '-42'" -a -42
check_h "invalid -O argument: '-42'" -O -42
check_h "invalid -s argument: '-42'" -s -42
check_h "invalid -I argument: '5'" -I 5

if [ -n "${UID-}" ]; then
	if [ "${UID-}" = 0 ]; then
		umsg="Cannot find user ':nosuchuser:'"
	else
		umsg='You must be root to use the -u option'
	fi

	check_e "$umsg" -u :nosuchuser: true

	for c in i r t T y; do
		check_e "-$c has no effect with -c
$strace_exp: $umsg" -u :nosuchuser: -c -$c true
	done
		check_e "-i has no effect with -c
$strace_exp: -r has no effect with -c
$strace_exp: -t has no effect with -c
$strace_exp: -T has no effect with -c
$strace_exp: -y has no effect with -c
$strace_exp: $umsg" -u :nosuchuser: -cirtTy true

	check_e "-tt has no effect with -r
$strace_exp: $umsg" -u :nosuchuser: -r -tt true
fi

args='-p 2147483647'
$STRACE $args 2> "$LOG" &&
	dump_log_and_fail_with \
		"strace $args failed to handle the error properly"

for cmd in PTRACE_SEIZE PTRACE_ATTACH; do
	cat > "$EXP" << __EOF__
$strace_exp: attach: ptrace($cmd, 2147483647): No such process
__EOF__
	diff -- "$EXP" "$LOG" ||
		continue
	args=
	break
done

[ -z "$args" ] ||
	dump_log_and_fail_with \
		"strace $args failed to print expected diagnostics"
