Skip to content

Add a number of tests for binaries that used to crash patchelf #617

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: 0.16-maintenance
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 95 additions & 5 deletions tests/invalid-elf.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,67 @@ TEST_CASES="invalid-shrstrtab-idx invalid-shrstrtab-size invalid-shrstrtab-zero
# Issue #64 regression test. Test ELF provided by issue submitter.
TEST_CASES=$TEST_CASES' invalid-phdr-issue-64'

# Issue #132 regression test. Test ELF provided by issue submitter.
TEST_CASES=$TEST_CASES' invalid-shrink-rpath-issue-132'

# Issue #133 regression test. Test ELFs provided by issue submitter.
set -x
for i in $(seq 0 5); do
# Not yet fixed!
if [ "$i" = 3 ]; then continue; fi
TEST_CASES=$TEST_CASES' invalid-strlen-issue-133-'$i
done
set +x

# Issue #134 regression test. Test ELFs provided by issue submitter.
set -x
for i in $(seq 0 1); do
TEST_CASES=$TEST_CASES' invalid-null-ptr-issue-134-'$i
done
set +x

# Not yet fixed!
# Issue #132 regression test. Test ELF provided by issue submitter.
#TEST_CASES=$TEST_CASES' invalid-string-index-issue-135'

# Some ELFs are immediately recognized as invalid. Others, we need to
# attempt an operation to notice the problem.

# shellcheck disable=SC2034
invalid_shrstrtab_idx_CMDS=''
# shellcheck disable=SC2034
invalid_shrstrtab_size_CMDS=''
# shellcheck disable=SC2034
invalid_shrstrtab_zero_CMDS=''
# shellcheck disable=SC2034
invalid_shrstrtab_nonterm_CMDS=''
# shellcheck disable=SC2034
invalid_shdr_name_CMDS=''
# shellcheck disable=SC2034
invalid_phdr_offset_CMDS=''
# shellcheck disable=SC2034
invalid_phdr_issue_64_CMDS=''
# shellcheck disable=SC2034
invalid_shrink_rpath_issue_132_CMDS='--shrink-rpath'
# shellcheck disable=SC2034
invalid_strlen_issue_133_0_CMDS='--shrink-rpath'
# shellcheck disable=SC2034
invalid_strlen_issue_133_1_CMDS='--shrink-rpath'
# shellcheck disable=SC2034
invalid_strlen_issue_133_2_CMDS='--shrink-rpath'
# shellcheck disable=SC2034
invalid_strlen_issue_133_3_CMDS='--shrink-rpath'
# shellcheck disable=SC2034
invalid_strlen_issue_133_4_CMDS='--shrink-rpath'
# shellcheck disable=SC2034
invalid_strlen_issue_133_5_CMDS='--shrink-rpath'
# shellcheck disable=SC2034
invalid_null_ptr_issue_134_0_CMDS='--shrink-rpath'
# shellcheck disable=SC2034
invalid_null_ptr_issue_134_1_CMDS='--shrink-rpath'
# shellcheck disable=SC2034
invalid_string_index_issue_135_CMDS='--shrink-rpath'

# shellcheck disable=SC2034
invalid_shrstrtab_idx_MSG='data region extends past file end'
# shellcheck disable=SC2034
Expand All @@ -35,24 +96,53 @@ invalid_shdr_name_MSG='data region extends past file end'
invalid_phdr_offset_MSG='data region extends past file end'
# shellcheck disable=SC2034
invalid_phdr_issue_64_MSG='program header table out of bounds'
# shellcheck disable=SC2034
invalid_shrink_rpath_issue_132_MSG='data region extends past file end'
# shellcheck disable=SC2034
invalid_strlen_issue_133_0_MSG='section name offset out of bounds'
# shellcheck disable=SC2034
invalid_strlen_issue_133_1_MSG='data region extends past file end'
# shellcheck disable=SC2034
invalid_strlen_issue_133_2_MSG='string table is not zero terminated'
# shellcheck disable=SC2034
invalid_strlen_issue_133_3_MSG='not sure yet'
# shellcheck disable=SC2034
invalid_strlen_issue_133_4_MSG='data region extends past file end'
# shellcheck disable=SC2034
invalid_strlen_issue_133_5_MSG='string table size is zero'
# shellcheck disable=SC2034
invalid_null_ptr_issue_134_0_MSG='no section headers'
# shellcheck disable=SC2034
invalid_null_ptr_issue_134_1_MSG='no section headers'
# shellcheck disable=SC2034
invalid_string_index_issue_135_MSG='no sure yet'

FAILED_TESTS=""

for tcase in $TEST_CASES; do
if [ ! -r "$TEST_DIR/$tcase" ]; then
echo "Cannot read test case: $tcase"
exit 1
echo "Cannot read test case: $tcase"
exit 1
fi

../src/patchelf --output /dev/null "$TEST_DIR/$tcase" && res=$? || res=$?
var=$(echo "$tcase-CMDS" | tr '-' '_')
cmds=
eval "cmds=\${$var}"

# Want the word-splitting, no arrays in POSIX shell
# shellcheck disable=SC2086
../src/patchelf $cmds --output /dev/null "$TEST_DIR/$tcase" && res=$? || res=$?
if killed_by_signal "$res"; then
FAILED_TESTS="$FAILED_TESTS $tcase"
FAILED_TESTS="$FAILED_TESTS $tcase"
fi

var=$(echo "$tcase-MSG" | tr '-' '_')
msg=
eval "msg=\${$var}"
../src/patchelf --output /dev/null "$TEST_DIR/$tcase" 2>&1 |

# Want the word-splitting, no arrays in POSIX shell
# shellcheck disable=SC2086
../src/patchelf $cmds --output /dev/null "$TEST_DIR/$tcase" 2>&1 |
grep "$msg" >/dev/null 2>/dev/null
done

Expand Down
Binary file added tests/invalid-elf/invalid-null-ptr-issue-134-0
Binary file not shown.
Binary file added tests/invalid-elf/invalid-null-ptr-issue-134-1
Binary file not shown.
Binary file added tests/invalid-elf/invalid-shrink-rpath-issue-132
Binary file not shown.
Binary file added tests/invalid-elf/invalid-string-index-issue-135
Binary file not shown.
Binary file added tests/invalid-elf/invalid-strlen-issue-133-0
Binary file not shown.
Binary file added tests/invalid-elf/invalid-strlen-issue-133-1
Binary file not shown.
Binary file added tests/invalid-elf/invalid-strlen-issue-133-2
Binary file not shown.
Binary file added tests/invalid-elf/invalid-strlen-issue-133-3
Binary file not shown.
Binary file added tests/invalid-elf/invalid-strlen-issue-133-4
Binary file not shown.
Binary file added tests/invalid-elf/invalid-strlen-issue-133-5
Binary file not shown.
Loading