$OpenBSD: patch-gnats_config_c,v 1.1 2003/08/25 23:35:06 brad Exp $
--- gnats/config.c.orig	Thu Nov  5 12:54:11 1998
+++ gnats/config.c	Wed Jul  2 13:23:13 2003
@@ -106,6 +106,7 @@ configure()
 {
   FILE *fp;
   char line[STR_MAX];
+  size_t len;
 
 #ifndef STDCINIT
   confs[0].key = "GNATS_ADDR"; confs[0].val = gnats_addr;
@@ -140,8 +141,9 @@ configure()
     xfree (fname);
   
 #define CONFSTR "%s/gnats-adm/config"
-  fname = xmalloc (strlen (gnats_root) + sizeof (CONFSTR) - 1);
-  sprintf (fname, CONFSTR, gnats_root);
+  len = strlen (gnats_root) + sizeof (CONFSTR) - 1;
+  fname = xmalloc (len);
+  snprintf (fname, len, CONFSTR, gnats_root);
   
   fp = fopen (fname, "r");
   
@@ -163,10 +165,10 @@ configure()
 	    {
 	      /* Mimic somewhat the sh interpretation of the line.  */
 	      if (*p == '\'')
-		strcpy (confs[i].val, safe_strtok(p+1, "'"));
+		strlcpy (confs[i].val, safe_strtok(p+1, "'"), n+1);
 	      else if (*p == '"')
-		strcpy (confs[i].val, string_extract_double_quoted(p+1));
-	      else strcpy (confs[i].val, safe_strtok(p, " \t\n"));
+		strlcpy (confs[i].val, string_extract_double_quoted(p+1), n+1);
+	      else strlcpy (confs[i].val, safe_strtok(p, " \t\n"), n+1);
 	    }
 	  break;
 	}
@@ -196,9 +198,11 @@ string_extract_double_quoted (string)
   register int c, j, i;		/* character, temp pos, str pos */
   char *temp;			/* The new string we return. */
   int pass_next;		/* State variables for the machine. */
+  size_t len;
 
   pass_next = 0;
-  temp = (char *)xmalloc (strlen (string) + 1);
+  len = strlen (string) + 1;
+  temp = (char *)xmalloc (len);
 
   for (j = 0, i = 0; (c = string[i]) != '\0'; i++)
     {
@@ -234,7 +238,7 @@ string_extract_double_quoted (string)
       temp[j++] = c;
     }
   temp[j] = '\0';
-  strcpy (string, temp);
+  strlcpy (string, temp, len);
   xfree (temp);
   return (string);
 }
