bug-libtool
[Top][All Lists]
Advanced

[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: 
\$!&*\`'()"],




reply via email to

[Prev in Thread] Current Thread [Next in Thread]