about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--grp/initgroups.c6
-rw-r--r--intl/dcigettext.c12
3 files changed, 21 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 0aea1bfae8..abf7b31d59 100644
--- 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.
 
diff --git a/grp/initgroups.c b/grp/initgroups.c
index d052cf48f7..b887a973ff 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 75762ea18f..8163064edc 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;