about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRyan S. Arnold <rsa@us.ibm.com>2011-05-25 11:11:25 -0500
committerRyan S. Arnold <rsa@us.ibm.com>2011-05-25 11:11:25 -0500
commitd3207287b36184f3d0fe531bb2dba1a9fb67e3c3 (patch)
tree479e1c22ae9f4abd0f8931296c8a19e274406b2d
parenta789ac929256779b79a40a654fe80cdea384897d (diff)
downloadglibc-d3207287b36184f3d0fe531bb2dba1a9fb67e3c3.tar.gz
glibc-d3207287b36184f3d0fe531bb2dba1a9fb67e3c3.tar.xz
glibc-d3207287b36184f3d0fe531bb2dba1a9fb67e3c3.zip
Correct "//" in search paths due to LD_AT_PLATFORM=""
-rw-r--r--ChangeLog8
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/dl-librecon.h20
2 files changed, 23 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 37438bbd95..f172c0d465 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2011-05-25  Ryan S. Arnold  <rsa@us.ibm.com>
+
+	* sysdeps/unix/sysv/linux/powerpc/dl-librecon.h
+	(EXTRA_LD_ENVVARS_11): Fix condition where there's an extra slash in
+	the search path, i.e., "//" when LD_AT_PLATFORM= or
+	LD_AT_PLATFORM="".
+	(EXTRA_UNSECURE_ENVVARS): Add LD_AT_PLATFORM to the list.
+
 2011-02-11  Jakub Jelinek  <jakub@redhat.com>
 
 	* stdio-common/printf-parsemb.c (__parse_one_specmb): Handle
diff --git a/sysdeps/unix/sysv/linux/powerpc/dl-librecon.h b/sysdeps/unix/sysv/linux/powerpc/dl-librecon.h
index 19dafac63e..19c3da7cfb 100644
--- a/sysdeps/unix/sysv/linux/powerpc/dl-librecon.h
+++ b/sysdeps/unix/sysv/linux/powerpc/dl-librecon.h
@@ -1,5 +1,5 @@
 /* Optional code to distinguish library flavours.
-   Copyright (C) 2010 Free Software Foundation, Inc.
+   Copyright (C) 2010, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Peter Bergner <bergner@linux.vnet.ibm.com>
 
@@ -20,17 +20,27 @@
 
 #ifndef _DL_LIBRECON_H
 
+#include <string.h>
 #include <sysdeps/unix/sysv/linux/dl-librecon.h>
 
 /* Recognizing extra environment variables.  */
 #define EXTRA_LD_ENVVARS_11 \
   if (memcmp (envline, "AT_PLATFORM", 11) == 0)				      \
     {									      \
-      GLRO(dl_platform) = &envline[12];					      \
-      /* Determine the length of the platform name.  */			      \
-      if (GLRO(dl_platform) != NULL)					      \
-        GLRO(dl_platformlen) = strlen (GLRO(dl_platform));		      \
+      int platformlen = strlen (&envline[12]);				      \
+      GLRO(dl_platformlen) = platformlen;				      \
+      if (platformlen > 0)						      \
+	{								      \
+	  GLRO(dl_platform) = &envline[12];				      \
+	  break;							      \
+	}								      \
+      GLRO(dl_platform) = NULL;						      \
       break;		 		 		 		      \
     }
 
+/* Extra unsecure variables.  The names are all stuffed in a single
+   string which means they have to be terminated with a '\0' explicitly.  */
+#define EXTRA_UNSECURE_ENVVARS \
+  "LD_AT_PLATFORM\0"
+
 #endif /* dl-librecon.h */