[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
mode=execute argument munging bug (was: [libtool 2.2] testsuite: 34 fail
From: |
Ralf Wildenhues |
Subject: |
mode=execute argument munging bug (was: [libtool 2.2] testsuite: 34 failed) |
Date: |
Tue, 4 Mar 2008 22:25:50 +0100 |
User-agent: |
Mutt/1.5.17+20080114 (2008-01-14) |
Hello Roberto,
* Roberto Bagnara wrote on Mon, Mar 03, 2008 at 09:14:48PM CET:
>
> $ cat mycommand
> #!/bin/sh
> echo "mycommand invoked with argument '$1'"
> $ mycommand ciao
> mycommand invoked with argument 'ciao'
> $ ./libtool --mode=execute mycommand ciao
> mycommand invoked with argument '/home/roberto/tppl/'
> $
>
> Note that /home/roberto/tppl/ is the directory where the libtool
> script is located. I can also do
>
> $ cd interfaces/
> $ ../libtool --mode=execute ../mycommand ciao
> mycommand invoked with argument '/home/roberto/tppl/'
>
> Is this behavior normal?
No. Thank you for the bug report. I've applied the fix below.
FWIW, the ordering of the tests in execute-mode.at is such that the
first set still passes for 1.5.26.
> ./libtool is what has been created at configure time and a bzipped
> version of it is attached to this file.
It wasn't attached to the message, but that's not a problem. :-)
Cheers,
Ralf
* libltdl/config/ltmain.m4sh (func_mode_execute): Replace only
arguments we have identified as shell or C wrappers.
(func_emit_wrapper): Output error message on stderr.
* tests/execute-mode.at: New file, with --mode=execute tests.
* Makefile.am: Adjust.
* NEWS: Update.
Fixes 2.2 regression. Report by Roberto Bagnara.
Index: Makefile.am
===================================================================
RCS file: /cvsroot/libtool/libtool/Makefile.am,v
retrieving revision 1.229
diff -u -r1.229 Makefile.am
--- Makefile.am 18 Jan 2008 10:49:40 -0000 1.229
+++ Makefile.am 4 Mar 2008 21:16:26 -0000
@@ -447,6 +447,7 @@
tests/search-path.at \
tests/indirect_deps.at \
tests/archive-in-archive.at \
+ tests/execute-mode.at \
tests/destdir.at \
tests/old-m4-iface.at \
tests/am-subdir.at \
Index: NEWS
===================================================================
RCS file: /cvsroot/libtool/libtool/NEWS,v
retrieving revision 1.220
diff -u -r1.220 NEWS
--- NEWS 4 Mar 2008 21:00:18 -0000 1.220
+++ NEWS 4 Mar 2008 21:16:27 -0000
@@ -6,6 +6,9 @@
- Fix 2.2 regression in libltdl that causes memory corruption upon
repeated `lt_dlinit(); lt_dlexit()'.
+ - Fix 2.2 regression in that `libtool --mode=execute CMD ARGS' does not
+ transform ARGS that do not look like shell or C wrappers of libtool
+ programs.
New in 2.2: 2008-03-01; CVS version 2.1c, Libtool team:
Index: libltdl/config/ltmain.m4sh
===================================================================
RCS file: /cvsroot/libtool/libtool/libltdl/config/ltmain.m4sh,v
retrieving revision 1.97
diff -u -r1.97 ltmain.m4sh
--- libltdl/config/ltmain.m4sh 28 Jan 2008 15:49:46 -0000 1.97
+++ libltdl/config/ltmain.m4sh 4 Mar 2008 21:16:29 -0000
@@ -1694,12 +1694,14 @@
# Do a test to see if this is really a libtool program.
if func_ltwrapper_script_p "$file"; then
func_source "$file"
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
elif func_ltwrapper_executable_p "$file"; then
func_ltwrapper_scriptname "$file"
func_source "$func_ltwrapper_scriptname_result"
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
fi
- # Transform arg to wrapped name.
- file="$progdir/$program"
;;
esac
# Quote arguments (to preserve shell metacharacters).
@@ -2468,7 +2470,7 @@
;;
esac
$ECHO "\
- \$ECHO \"\$0: cannot exec \$program \$*\"
+ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
exit 1
fi
else
--- /dev/null 2008-03-02 10:33:19.200041011 +0100
+++ tests/execute-mode.at 2008-03-04 22:15:22.000000000 +0100
@@ -0,0 +1,92 @@
+# execute-mode.at -- libtool --mode=execute -*- Autotest -*-
+#
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# Written by Ralf Wildenhues, 2008
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool 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 2 of
+# the License, or (at your option) any later version.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+####
+
+AT_SETUP([execute mode])
+AT_KEYWORDS([libtool])
+
+AT_DATA([foo],
+[[#! /bin/sh
+if test $# -gt 0; then
+ echo "$@"
+else
+ :
+fi
+]])
+
+AT_DATA([lt-wrapper],
+[[#! /bin/sh
+# Generated by GNU libtool.
+# fake wrapper script.
+program=lt-real
+progdir=.
+if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
+ # Run the actual program with our arguments.
+ exec "$progdir/$program" ${1+"$@"}
+ echo "$0: cannot exec $program $*" >&2
+ exit 1
+fi
+]])
+
+AT_DATA([lt-real],
+[[#! /bin/sh
+echo "$@"
+]])
+
+mkdir sub
+cp foo sub/foo
+chmod +x foo sub/foo lt-wrapper lt-real
+
+AT_CHECK([$LIBTOOL --mode=execute ./foo])
+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([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], [],
+ [./lt-real bar baz
+])
+
+# 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],
+ [1], [ignore], [ignore])
+mv -f lt-backup lt-real
+
+# Now use arguments that require decent quoting.
+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:
\$!&*\`'()"],
+ [], [arg with special chars: $!&*`'()
+])
+AT_CHECK([$LIBTOOL --mode=execute ./foo lt-wrapper "arg with special chars:
\$!&*\`'()"],
+ [], [./lt-real arg with special chars: $!&*`'()
+])
+
+AT_CLEANUP
- mode=execute argument munging bug (was: [libtool 2.2] testsuite: 34 failed),
Ralf Wildenhues <=