diff --git a/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/Makefile b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/Makefile new file mode 100644 index 0000000..b3b39d4 --- /dev/null +++ b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/Makefile @@ -0,0 +1,62 @@ +# Copyright (c) 2008 Red Hat, Inc. All rights reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Michal Nowak + + +TOPLEVEL_NAMESPACE=/tools +PACKAGE_NAME=ltrace +RELATIVE_PATH=Regression/427444-ltrace-crashes-process-to-be-analysed + +export TEST=$(TOPLEVEL_NAMESPACE)/$(PACKAGE_NAME)/$(RELATIVE_PATH) +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE reproducer.c + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + chmod a+x ./runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + + +$(METADATA): Makefile + @touch $(METADATA) + @echo "Owner: Michal Nowak " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Description: ltrace crashes process to be analysed" >> $(METADATA) + @echo "Bug: 427444" >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: $(PACKAGE_NAME)" >> $(METADATA) + @echo "Requires: $(PACKAGE_NAME)" >> $(METADATA) + @echo "Requires: gcc" >> $(METADATA) + @echo "Requires: glibc-devel" >> $(METADATA) + @echo "License: GPLv3+" >> $(METADATA) + + rhts-lint $(METADATA) + diff --git a/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/PURPOSE b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/PURPOSE new file mode 100644 index 0000000..3d0230b --- /dev/null +++ b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/PURPOSE @@ -0,0 +1 @@ +ltrace could possibly crash traced application on s390 and s390x. diff --git a/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/main.fmf b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/main.fmf new file mode 100644 index 0000000..6430ffa --- /dev/null +++ b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/main.fmf @@ -0,0 +1,17 @@ +summary: ltrace crashes process to be analysed +description: | + ltrace could possibly crash traced application on s390 and s390x. +contact: Michal Nowak +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +- gcc +- glibc-devel +duration: 5m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=427444 +extra-summary: /tools/ltrace/Regression/427444-ltrace-crashes-process-to-be-analysed +extra-task: /tools/ltrace/Regression/427444-ltrace-crashes-process-to-be-analysed diff --git a/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/reproducer.c b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/reproducer.c new file mode 100644 index 0000000..d0ccb5d --- /dev/null +++ b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/reproducer.c @@ -0,0 +1,69 @@ +#include +#include +#include +#include +#include + + +#ifndef NI_MAXHOST +#define NI_MAXHOST 1025 +#endif // NI_MAX_HOST + +// On a DARWIN system EAI_OVERFLOW is define as EAI_MAX +#ifndef EAI_OVERFLOW +#define EAI_OVERFLOW EAI_MAX +#endif // EAI_OVERFLOW + +int main(int argc, char *argv[]) +{ +// sleep before we can catch you via ltrace + sleep(5); + struct addrinfo * result; + + size_t hostname_len = NI_MAXHOST; + char * hostname = NULL; + + int error; + + if ( 0 != ( error = getaddrinfo( "www.example.com", NULL, NULL, &result ) ) ) + { + fprintf( stderr, "error using getaddrinfo: %s\n", gai_strerror( error ) ); + } + + if ( result ) + { + for( ; ; hostname_len *= 2 ) + { + hostname = ( char * ) realloc( hostname, hostname_len ); + + if ( NULL == hostname ) + { + perror( "" ); + break; + } + + error = getnameinfo( result->ai_addr, result->ai_addrlen, hostname, hostname_len, NULL, 0, 0 ); + + if ( 0 == error ) + { + break; + } + + if ( EAI_OVERFLOW != error ) + { + fprintf( stderr, "error using getaddrinfo: %s\n", gai_strerror( error ) ); + break; + } + } + + if ( NULL != hostname ) + { + free( hostname ); + } + + freeaddrinfo( result ); + } + + return 0; +} + diff --git a/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/runtest.sh b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/runtest.sh new file mode 100755 index 0000000..d945edc --- /dev/null +++ b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/runtest.sh @@ -0,0 +1,46 @@ +#!/bin/bash +# +# Copyright (c) 2008 Red Hat, Inc. All rights reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Michal Nowak + +# source the test script helpers +. /usr/bin/rhts_environment.sh +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="$(rpm -qf $(which ltrace))" + +rlJournalStart + rlPhaseStartSetup "Gathering information & compiling" + rlAssertRpm $PACKAGE + rlAssertRpm $(rpm -qf $(which gcc)) + rlShowRunningKernel + + rlRun "gcc reproducer.c -o reproducer" 0 "Compiling the reproducer" + rlPhaseEnd + + rlPhaseStartTest "Testing the executable under ltrace" + rlRun "./reproducer &" 0 "Fire the reproducer in the background" + rlWatchdog "ltrace -o ltrace-test.log -p $( pgrep reproducer )" 200 + rlAssertNotGrep "gimme_arg called with wrong arguments" ltrace-test.log + rlPhaseEnd + + rlPhaseStartCleanup "Doing clean-up" + rlBundleLogs "ltrace-outputs" ltrace-test.log + rlRun "rm -f ltrace-test.log reproducer" + rlPhaseEnd + rlJournalPrintText +rlJournalEnd