$OpenBSD: patch-gettext-runtime_intl_l10nflist_c,v 1.4 2013/01/21 22:08:52 naddy Exp $
--- gettext-runtime/intl/l10nflist.c.orig	Tue Dec  4 07:28:58 2012
+++ gettext-runtime/intl/l10nflist.c	Wed Jan 16 23:06:10 2013
@@ -181,6 +181,7 @@ _nl_make_l10nflist (struct loaded_l10nfile **l10nfile_
   struct loaded_l10nfile **lastp;
   struct loaded_l10nfile *retval;
   char *cp;
+  size_t abs_filename_len;
   size_t dirlist_count;
   size_t entries;
   int cnt;
@@ -191,7 +192,7 @@ _nl_make_l10nflist (struct loaded_l10nfile **l10nfile_
     dirlist_len = 0;
 
   /* Allocate room for the full file name.  */
-  abs_filename = (char *) malloc (dirlist_len
+  abs_filename_len =		 (dirlist_len
 				  + strlen (language)
 				  + ((mask & XPG_TERRITORY) != 0
 				     ? strlen (territory) + 1 : 0)
@@ -202,6 +203,7 @@ _nl_make_l10nflist (struct loaded_l10nfile **l10nfile_
 				  + ((mask & XPG_MODIFIER) != 0
 				     ? strlen (modifier) + 1 : 0)
 				  + 1 + strlen (filename) + 1);
+  abs_filename = (char *) malloc (abs_filename_len);
 
   if (abs_filename == NULL)
     return NULL;
@@ -215,32 +217,33 @@ _nl_make_l10nflist (struct loaded_l10nfile **l10nfile_
       cp += dirlist_len;
       cp[-1] = '/';
     }
+  *cp = '\0';
 
-  cp = stpcpy (cp, language);
+  strlcat (abs_filename, language, abs_filename_len);
 
   if ((mask & XPG_TERRITORY) != 0)
     {
-      *cp++ = '_';
-      cp = stpcpy (cp, territory);
+      strlcat (abs_filename, "_", abs_filename_len);
+      strlcat (abs_filename, territory, abs_filename_len);
     }
   if ((mask & XPG_CODESET) != 0)
     {
-      *cp++ = '.';
-      cp = stpcpy (cp, codeset);
+      strlcat (abs_filename, ".", abs_filename_len);
+      strlcat (abs_filename, codeset, abs_filename_len);
     }
   if ((mask & XPG_NORM_CODESET) != 0)
     {
-      *cp++ = '.';
-      cp = stpcpy (cp, normalized_codeset);
+      strlcat (abs_filename, ".", abs_filename_len);
+      strlcat (abs_filename, normalized_codeset, abs_filename_len);
     }
   if ((mask & XPG_MODIFIER) != 0)
     {
-      *cp++ = '@';
-      cp = stpcpy (cp, modifier);
+      strlcat (abs_filename, "@", abs_filename_len);
+      strlcat (abs_filename, modifier, abs_filename_len);
     }
 
-  *cp++ = '/';
-  stpcpy (cp, filename);
+  strlcat (abs_filename, "/", abs_filename_len);
+  strlcat (abs_filename, filename, abs_filename_len);
 
   /* Look in list of already loaded domains whether it is already
      available.  */
@@ -364,7 +367,7 @@ _nl_normalize_codeset (const char *codeset, size_t nam
   if (retval != NULL)
     {
       if (only_digit)
-	wp = stpcpy (retval, "iso");
+	wp = (char *) memcpy (retval, "iso", 3) + 3;
       else
 	wp = retval;
 
