This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix crash in gldelf64ppc_new_vers_pattern


A version script with a literal name (in quotes) causes
gldelf64ppc_new_vers_pattern to crash because entry->pattern is NULL.

Andreas.

2007-05-14  Andreas Schwab  <schwab@suse.de>

	* emultempl/ppc64elf.em (_new_vers_pattern): Handle null pattern.

testsuite/:
	* ld-elf/dl2a.list: New file.
	* ld-elf/shared.exp: Add test using --dynamic-list=dl2a.list.


--- ld/emultempl/ppc64elf.em.~1.52.~	2007-03-27 11:49:47.000000000 +0200
+++ ld/emultempl/ppc64elf.em	2007-05-14 00:33:24.000000000 +0200
@@ -414,17 +414,22 @@ gld${EMULATION_NAME}_new_vers_pattern (s
   unsigned int len;
   char *dot_pat;
 
-  if (!dotsyms || entry->pattern[0] == '*' || entry->pattern[0] == '.')
+  if (!dotsyms
+      || (entry->pattern != NULL
+	  && (entry->pattern[0] == '*' || entry->pattern[0] == '.')))
     return entry;
 
   dot_entry = xmalloc (sizeof *dot_entry);
   *dot_entry = *entry;
   dot_entry->next = entry;
-  len = strlen (entry->pattern) + 2;
-  dot_pat = xmalloc (len);
-  dot_pat[0] = '.';
-  memcpy (dot_pat + 1, entry->pattern, len - 1);
-  dot_entry->pattern = dot_pat;
+  if (entry->pattern != NULL)
+    {
+      len = strlen (entry->pattern) + 2;
+      dot_pat = xmalloc (len);
+      dot_pat[0] = '.';
+      memcpy (dot_pat + 1, entry->pattern, len - 1);
+      dot_entry->pattern = dot_pat;
+    }
   if (entry->symbol != NULL)
     {
       len = strlen (entry->symbol) + 2;
--- /dev/null	2006-11-24 23:46:54.000000000 +0100
+++ ld/testsuite/ld-elf/dl2a.list	2007-05-14 00:13:27.000000000 +0200
@@ -0,0 +1,3 @@
+{
+  "foo";
+};
--- ld/testsuite/ld-elf/shared.exp.~1.6.~	2007-02-16 11:08:52.000000000 +0100
+++ ld/testsuite/ld-elf/shared.exp	2007-05-14 00:14:12.000000000 +0200
@@ -75,6 +75,9 @@ set build_tests {
   {"Build libdl2a.so with --dynamic-list=dl2.list"
    "-shared -Wl,--dynamic-list=dl2.list" "-fPIC"
    {dl2.c dl2xxx.c} {} "libdl2a.so"}
+  {"Build libdl2a.so with --dynamic-list=dl2a.list"
+   "-shared -Wl,--dynamic-list=dl2a.list" "-fPIC"
+   {dl2.c dl2xxx.c} {} "libdl2a.so"}
   {"Build libdl2a.so with --dynamic-list-data"
    "-shared -Wl,--dynamic-list-data" "-fPIC"
    {dl2.c dl2xxx.c} {} "libdl2a.so"}

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]