This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.11-260-g4c35fb6
- From: drepper at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 12 Mar 2010 15:57:37 -0000
- Subject: GNU C Library master sources branch, master, updated. glibc-2.11-260-g4c35fb6
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 C Library master sources".
The branch, master has been updated
via 4c35fb65c9ea221561bc5698358944a73383b3d6 (commit)
from 4bf7d392453cbcbd65b36c054e1fdbdb1590def7 (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 -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=4c35fb65c9ea221561bc5698358944a73383b3d6
commit 4c35fb65c9ea221561bc5698358944a73383b3d6
Author: Andreas Schwab <schwab@redhat.com>
Date: Fri Mar 12 07:57:19 2010 -0800
Don't underestimate length of DST substitution
diff --git a/ChangeLog b/ChangeLog
index c3fda93..be5d555 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2010-03-12 Andreas Schwab <schwab@redhat.com>
+
+ * elf/dl-dst.h: Include "trusted-dirs.h".
+ (DL_DST_REQUIRED): Take $LIB into account.
+
2010-03-11 Roland McGrath <roland@redhat.com>
* elf/elf.h (R_X86_64_GOT64, R_X86_64_GOTPCREL64): New macros.
diff --git a/elf/dl-dst.h b/elf/dl-dst.h
index 76076a6..ae8d119 100644
--- a/elf/dl-dst.h
+++ b/elf/dl-dst.h
@@ -18,6 +18,8 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
+#include "trusted-dirs.h"
+
/* Determine the number of DST elements in the name. Only if IS_PATH is
nonzero paths are recognized (i.e., multiple, ':' separated filenames). */
#define DL_DST_COUNT(name, is_path) \
@@ -39,12 +41,13 @@
\
if (__cnt > 0) \
{ \
- size_t origin_len; \
+ size_t dst_len; \
/* Now we make a guess how many extra characters on top of the \
length of S we need to represent the result. We know that \
we have CNT replacements. Each at most can use \
- MAX (strlen (ORIGIN), strlen (_dl_platform)) \
- minus 7 (which is the length of "$ORIGIN"). \
+ MAX (MAX (strlen (ORIGIN), strlen (_dl_platform)), \
+ strlen (DL_DST_LIB)) \
+ minus 4 (which is the length of "$LIB"). \
\
First get the origin string if it is not available yet. \
This can only happen for the map of the executable. */ \
@@ -53,14 +56,16 @@
{ \
assert ((l)->l_name[0] == '\0'); \
(l)->l_origin = _dl_get_origin (); \
- origin_len = ((l)->l_origin && (l)->l_origin != (char *) -1 \
+ dst_len = ((l)->l_origin && (l)->l_origin != (char *) -1 \
? strlen ((l)->l_origin) : 0); \
} \
else \
- origin_len = (l)->l_origin == (char *) -1 \
+ dst_len = (l)->l_origin == (char *) -1 \
? 0 : strlen ((l)->l_origin); \
- \
- __len += __cnt * (MAX (origin_len, GLRO(dl_platformlen)) - 7); \
+ dst_len = MAX (MAX (dst_len, GLRO(dl_platformlen)), \
+ strlen (DL_DST_LIB)); \
+ if (dst_len > 4) \
+ __len += __cnt * (dst_len - 4); \
} \
\
__len; })
@@ -72,7 +77,7 @@
if ((l) == NULL) \
{ \
const char *origin = _dl_get_origin (); \
- origin_len = (origin && origin != (char *) -1 ? strlen (origin) : 0); \
+ dst_len = (origin && origin != (char *) -1 ? strlen (origin) : 0); \
} \
else
#endif
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 5 +++++
elf/dl-dst.h | 21 +++++++++++++--------
2 files changed, 18 insertions(+), 8 deletions(-)
hooks/post-receive
--
GNU C Library master sources