[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: mode=execute argument munging bug
From: |
Ralf Wildenhues |
Subject: |
Re: mode=execute argument munging bug |
Date: |
Wed, 5 Mar 2008 21:14:40 +0100 |
User-agent: |
Mutt/1.5.17+20080114 (2008-01-14) |
* Roberto Bagnara wrote on Wed, Mar 05, 2008 at 07:37:58AM CET:
>
> It is better now, but there is still the problem that, apparently,
> libtool redirects stdin for the program it is running.
Gosh. How embarrassing. I've applied this patch.
Thanks for testing!
Ralf
2008-03-05 Ralf Wildenhues <address@hidden>
* libltdl/config/ltmain.m4sh (func_lalib_unsafe_p): redirect
and restore from stdin, not stdout.
* tests/execute-mode.at (execute mode): Adjust test to catch
this.
Report by Roberto Bagnara.
Index: libltdl/config/ltmain.m4sh
===================================================================
RCS file: /cvsroot/libtool/libtool/libltdl/config/ltmain.m4sh,v
retrieving revision 1.98
diff -u -r1.98 ltmain.m4sh
--- libltdl/config/ltmain.m4sh 4 Mar 2008 21:25:48 -0000 1.98
+++ libltdl/config/ltmain.m4sh 5 Mar 2008 20:12:28 -0000
@@ -648,7 +648,7 @@
func_lalib_unsafe_p ()
{
lalib_p=no
- if test -r "$1" && exec 5<&1 <"$1"; then
+ if test -r "$1" && exec 5<&0 <"$1"; then
for lalib_p_l in 1 2 3 4
do
read lalib_p_line
@@ -656,7 +656,7 @@
\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
esac
done
- exec 1<&5 5<&-
+ exec 0<&5 5<&-
fi
test "$lalib_p" = yes
}
Index: tests/execute-mode.at
===================================================================
RCS file: /cvsroot/libtool/libtool/tests/execute-mode.at,v
retrieving revision 1.1
diff -u -r1.1 execute-mode.at
--- tests/execute-mode.at 4 Mar 2008 21:25:48 -0000 1.1
+++ tests/execute-mode.at 5 Mar 2008 20:12:28 -0000
@@ -51,6 +51,30 @@
AT_DATA([lt-real],
[[#! /bin/sh
echo "$@"
+cat
+]])
+
+AT_DATA([libfakelib.la],
+[[# libfakelib.la - a libtool library file
+# Generated by ltmain.sh (GNU libtool 1.2605 2008/03/04 22:31:32) 2.3a
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+dlname=''
+library_names=''
+old_library='libfakelib.a'
+inherited_linker_flags=''
+dependency_libs=''
+weak_library_names=''
+current=
+age=
+revision=
+installed=no
+shouldnotlink=yes
+dlopen=''
+dlpreopen=''
+libdir=''
]])
mkdir sub
@@ -61,20 +85,26 @@
AT_CHECK([$LIBTOOL --mode=execute sub/foo])
AT_CHECK([$LIBTOOL --mode=execute ./foo foo], [], [foo
])
-AT_CHECK([$LIBTOOL --mode=execute ./lt-wrapper foo], [], [foo
+AT_CHECK([$LIBTOOL --mode=execute ./lt-wrapper foo </dev/null], [], [foo
])
AT_CHECK([cd sub && $LIBTOOL --mode=execute ./foo ../foo], [], [../foo
])
# suppose that ./foo is gdb, and lt-wrapper is the wrapper script.
-AT_CHECK([$LIBTOOL --mode=execute ./foo lt-wrapper bar baz], [],
+AT_CHECK([$LIBTOOL --mode=execute ./foo lt-wrapper bar baz </dev/null], [],
[./lt-real bar baz
])
+# check that stdin works even with -dlopen.
+AT_CHECK([echo bar | $LIBTOOL --mode=execute -dlopen libfakelib.la
./lt-wrapper foo],
+ [], [foo
+bar
+])
+
# Check that a missing real program causes an error.
# The error message and code are likely to be 126,
# "No such file or directory" but system-dependent.
mv -f lt-real lt-backup
-AT_CHECK([$LIBTOOL --mode=execute ./lt-wrapper foo || exit 1],
+AT_CHECK([$LIBTOOL --mode=execute ./lt-wrapper foo </dev/null || exit 1],
[1], [ignore], [ignore])
mv -f lt-backup lt-real
@@ -82,7 +112,7 @@
AT_CHECK([$LIBTOOL --mode=execute ./foo "arg with special chars: \$!&*\`'()"],
[], [arg with special chars: $!&*`'()
])
-AT_CHECK([$LIBTOOL --mode=execute ./lt-wrapper "arg with special chars:
\$!&*\`'()"],
+AT_CHECK([$LIBTOOL --mode=execute ./lt-wrapper "arg with special chars:
\$!&*\`'()" </dev/null],
[], [arg with special chars: $!&*`'()
])
AT_CHECK([$LIBTOOL --mode=execute ./foo lt-wrapper "arg with special chars:
\$!&*\`'()"],