diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | grp/initgroups.c | 6 | ||||
-rw-r--r-- | intl/dcigettext.c | 12 |
3 files changed, 21 insertions, 7 deletions
@@ -1,5 +1,15 @@ +2005-03-19 Bruno Haible <bruno@clisp.org> + + * intl/dcigettext.c (struct known_translation_t): Change type of + domainname field to 'const char *'. + (DCIGETTEXT): Remove const-cast. + 2005-03-29 Thorsten Kukuk <kukuk@suse.de> + [BZ #661] + * grp/initgroups.c (internal_getgrouplist): Check if we have + enough space before adding the primary group to the list. + * posix/tst-execle1.c (do_test): Fix execle arguments. * posix/tst-execle2.c (do_test): Likewise. diff --git a/grp/initgroups.c b/grp/initgroups.c index d052cf4..b887a97 100644 --- a/grp/initgroups.c +++ b/grp/initgroups.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1989,91,93,1996-2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1989,91,93,1996-2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -73,7 +73,9 @@ internal_getgrouplist (const char *user, gid_t group, long int *size, /* Start is one, because we have the first group as parameter. */ long int start = 1; - (*groupsp)[0] = group; + /* Never store more than the starting *SIZE number of elements. */ + if (*size > 0) + (*groupsp)[0] = group; if (__nss_group_database != NULL) { diff --git a/intl/dcigettext.c b/intl/dcigettext.c index 75762ea..8163064 100644 --- a/intl/dcigettext.c +++ b/intl/dcigettext.c @@ -177,7 +177,7 @@ static void *mempcpy PARAMS ((void *dest, const void *src, size_t n)); struct known_translation_t { /* Domain in which to search. */ - char *domainname; + const char *domainname; /* The category. */ int category; @@ -436,7 +436,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) search = (struct known_translation_t *) alloca (offsetof (struct known_translation_t, msgid) + msgid_len); memcpy (search->msgid, msgid1, msgid_len); - search->domainname = (char *) domainname; + search->domainname = domainname; search->category = category; /* Since tfind/tsearch manage a balanced tree, concurrent tfind and @@ -632,9 +632,11 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) + msgid_len + domainname_len + 1); if (newp != NULL) { - newp->domainname = - mempcpy (newp->msgid, msgid1, msgid_len); - memcpy (newp->domainname, domainname, domainname_len + 1); + char *new_domainname; + + new_domainname = mempcpy (newp->msgid, msgid1, msgid_len); + memcpy (new_domainname, domainname, domainname_len + 1); + newp->domainname = new_domainname; newp->category = category; newp->counter = _nl_msg_cat_cntr; newp->domain = domain; |