libtool-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU Libtool branch, master, updated. v2.2.6-159-ge91f7b9


From: Peter O'Gorman
Subject: [SCM] GNU Libtool branch, master, updated. v2.2.6-159-ge91f7b9
Date: Mon, 16 Nov 2009 03:21:07 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Libtool".

The branch, master has been updated
       via  e91f7b960032074a55fc91273c1917e3082b5338 (commit)
       via  3580cddcea7eec5c07cf69e8adbe14ccf94dccc1 (commit)
      from  c242ea638d7713fd0d1406a3b6880069bce11e93 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit e91f7b960032074a55fc91273c1917e3082b5338
Author: Bob Friesenhahn <address@hidden>
Date:   Sat Nov 14 13:52:24 2009 -0600

    Don't load module.la from current directory by default.
    
    * libltdl/ltdl.c (try_dlopen): Do not attempt to load an
    unqualified module.la file from the current directory (by
    default) since doing so is insecure and is not compliant with
    the documentation.
    * tests/testsuite.at: Qualify access to module.la file in
    current directory so that test passes.

commit 3580cddcea7eec5c07cf69e8adbe14ccf94dccc1
Author: Peter O'Gorman <address@hidden>
Date:   Sat Nov 14 13:47:10 2009 -0600

    Only use preopen loader to load preopened archives
    
    * libltdl/ltdl.c: Limit checking of .a to preopen loader.
    * tests/lt_dlopen_a.at: Add test.
    * Makefile.am: Add test.

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog            |   17 +++++++++
 Makefile.am          |    1 +
 libltdl/ltdl.c       |    5 ++-
 tests/lt_dlopen_a.at |   97 ++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/testsuite.at   |    4 +-
 5 files changed, 120 insertions(+), 4 deletions(-)
 create mode 100644 tests/lt_dlopen_a.at

diff --git a/ChangeLog b/ChangeLog
index 9c20fde..6dc2298 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2009-11-14  Bob Friesenhahn  <address@hidden>
+
+       Don't load module.la from current directory by default.
+       * libltdl/ltdl.c (try_dlopen): Do not attempt to load an
+       unqualified module.la file from the current directory (by
+       default) since doing so is insecure and is not compliant with
+       the documentation.
+       * tests/testsuite.at: Qualify access to module.la file in
+       current directory so that test passes.
+
+2009-11-14  Peter O'Gorman  <address@hidden>
+
+       Only use preopen loader to load preopened archives
+       * libltdl/ltdl.c: Limit checking of .a to preopen loader.
+       * tests/lt_dlopen_a.at: Add test.
+       * Makefile.am: Add test.
+
 2009-11-14  Ralf Wildenhues  <address@hidden>
 
        Recognize `pgfortran' as Portland compiler.
diff --git a/Makefile.am b/Makefile.am
index d2033c5..2fe2f88 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -481,6 +481,7 @@ TESTSUITE_AT        = tests/testsuite.at \
                  tests/lt_dlexit.at \
                  tests/lt_dladvise.at \
                  tests/lt_dlopen.at \
+                 tests/lt_dlopen_a.at \
                  tests/lt_dlopenext.at \
                  tests/ltdl-api.at \
                  tests/need_lib_prefix.at \
diff --git a/libltdl/ltdl.c b/libltdl/ltdl.c
index a622357..24ee13f 100644
--- a/libltdl/ltdl.c
+++ b/libltdl/ltdl.c
@@ -529,7 +529,8 @@ find_module (lt_dlhandle *handle, const char *dir, const 
char *libdir,
   /* Try to open the old library first; if it was dlpreopened,
      we want the preopened version of it, even if a dlopenable
      module is available.  */
-  if (old_name && tryall_dlopen (handle, old_name, advise, 0) == 0)
+  if (old_name && tryall_dlopen (handle, old_name,
+                         advise, lt_dlloader_find ("lt_preopen") ) == 0)
     {
       return 0;
     }
@@ -1345,7 +1346,7 @@ try_dlopen (lt_dlhandle *phandle, const char *filename, 
const char *ext,
            }
 #endif
        }
-      if (!file)
+      else
        {
          file = fopen (attempt, LT_READTEXT_MODE);
        }
diff --git a/tests/lt_dlopen_a.at b/tests/lt_dlopen_a.at
new file mode 100644
index 0000000..4844d06
--- /dev/null
+++ b/tests/lt_dlopen_a.at
@@ -0,0 +1,97 @@
+# lt_dlopen_a.at -- test libltdl functionality                -*- Autotest -*-
+#
+#   Copyright (C) 2009 Free Software Foundation, Inc.
+#   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([lt_dlopen archive])
+AT_KEYWORDS([libltdl lt_dlopen_a])
+
+AT_DATA([main.c],
+[[#include <ltdl.h>
+#include <stdio.h>
+
+/* This dlopen() in the main executable should override any dlopen()s in
+   shared libraries etc.
+
+   If that is not the case (or the platform does not use dlopen()) then this
+   test should exit 77, causing the test to SKIP.
+*/
+static int retcde = 77;
+
+void * dlopen(const char *path, int mode) {
+  if (!(strcmp(path,"plugin.a") && strcmp(path,"plugin.lib")))
+    {
+      fprintf(stderr,"Tried to open archive %s\n",path);
+      retcde = 1;
+    }
+  else
+    {
+      fprintf(stderr,"Opening ... %s\n", path);
+      if (retcde == 77) retcde = 0;
+    }
+  return NULL;
+}
+
+int
+main (int argc, char* argv[])
+{
+  int err = 0;
+  lt_dlhandle plugin_handle;
+
+  lt_dlinit ();
+  plugin_handle = lt_dlopenext (argv[1]);
+  lt_dlexit ();
+  return retcde;
+}
+]])
+
+AT_DATA([plugin.c],
+[[
+int i = 1;
+]])
+
+: ${LTDLINCL="-I$abs_top_srcdir/libltdl"}
+: ${LIBLTDL="$abs_builddir/../libltdl/libltdlc.la"}
+
+CPPFLAGS="$LTDLINCL $CPPFLAGS"
+inst=`pwd`/inst
+libdir=$inst/lib
+bindir=$inst/bin
+
+AT_CHECK([$CC $CPPFLAGS $CFLAGS -c main.c || exit 77],[],[ignore],[ignore])
+AT_CHECK([$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c plugin.c || exit 
77],
+        [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o plugin.la -rpath ]dnl
+        [$libdir -module -no-undefined -avoid-version plugin.lo || exit 77],
+        [], [ignore], [ignore])
+
+AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o main$EXEEXT ]dnl
+        [main.$OBJEXT -dlopen plugin.la $LIBLTDL || exit 77],
+        [], [ignore], [ignore])
+
+mkdir -p $libdir
+mkdir -p $bindir
+
+AT_CHECK([$LIBTOOL --mode=install cp plugin.la $libdir],[], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=install cp main$EXEEXT $bindir],[], [ignore], 
[ignore])
+AT_CHECK([test -f $libdir/plugin.a || exit 77])
+LT_AT_EXEC_CHECK([$bindir/main], [], [ignore], [ignore],[$libdir/plugin.la])
+
+AT_CLEANUP
diff --git a/tests/testsuite.at b/tests/testsuite.at
index e9226ee..34f7f21 100644
--- a/tests/testsuite.at
+++ b/tests/testsuite.at
@@ -336,9 +336,9 @@ main ()
     return 1;
   }
 
-  module = lt_dlopen("module.la");
+  module = lt_dlopen("./module.la");
   if (!module) {
-    fprintf (stderr, "error dlopening module.la: %s\n", lt_dlerror());
+    fprintf (stderr, "error dlopening ./module.la: %s\n", lt_dlerror());
     goto finish;
   }
 


hooks/post-receive
-- 
GNU Libtool




reply via email to

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