[BZ #661]
authorRoland McGrath <roland@gnu.org>
Tue, 29 Mar 2005 23:41:03 +0000 (23:41 +0000)
committerRoland McGrath <roland@gnu.org>
Tue, 29 Mar 2005 23:41:03 +0000 (23:41 +0000)
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.

[BZ #661]
* grp/initgroups.c (internal_getgrouplist): Check if we have
enough space before adding the primary group to the list.

ChangeLog
grp/initgroups.c
intl/dcigettext.c

index 0aea1bf..abf7b31 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
 
index d052cf4..b887a97 100644 (file)
@@ -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)
     {
index 75762ea..8163064 100644 (file)
@@ -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;