$OpenBSD: patch-gnats_files_c,v 1.2 2007/12/28 17:11:25 espie Exp $
--- gnats/files.c.orig	Sun Feb 11 22:36:25 2001
+++ gnats/files.c	Fri Dec 28 18:00:24 2007
@@ -41,7 +41,7 @@ find_submitter (cptr, site)
   if (site == NULL)
     return -1;
 
-  sprintf (path, "%s/gnats-adm/%s", gnats_root, SUBMITTERS);
+  snprintf (path, PATH_MAX, "%s/gnats-adm/%s", gnats_root, SUBMITTERS);
   err = get_adm_record (path, array, site);
 
   if (err == -1) 
@@ -87,7 +87,7 @@ find_category (cptr, category)
   char **array = (char **) alloca (NUM_CATEGORY_FIELDS * sizeof (char *));
   int err;
 
-  sprintf (path, "%s/gnats-adm/%s", gnats_root, CATEGORIES);
+  snprintf (path, PATH_MAX, "%s/gnats-adm/%s", gnats_root, CATEGORIES);
   err = get_adm_record (path, array, category);
 
   if (err == -1)
@@ -143,7 +143,7 @@ find_responsible (responsible, person)
 	 we don't end up with garbage.  */
       memset (array, 0, NUM_RESPONSIBLE_FIELDS * sizeof (char *));
 
-      sprintf (path, "%s/gnats-adm/%s", gnats_root, RESPONSIBLE_FILE);
+      snprintf (path, PATH_MAX, "%s/gnats-adm/%s", gnats_root, RESPONSIBLE_FILE);
       err = get_adm_record (path, array, person);
       xfree (path);
       if (err == -1)
@@ -177,13 +177,15 @@ get_adm_record (fname, ptr, key)
   char line[STR_MAX], temp[STR_MAX];
   char *l, *l2;
   char *keyed;
+  size_t keyedsize;
   int err = -1, keyedlen;
 
   /* append a delimiting ':' to the end of sting to make sure the match
      is fully correct.  */
-  keyed = (char *) alloca (strlen(key) + 2);
-  /* which is slower - strcpy/strcat or sprintf? */
-  sprintf (keyed, "%s:", key);
+  keyedsize = strlen(key) + 2;
+  keyed = (char *) alloca (keyedsize);
+  /* which is slower - strlcpy/strlcat or snprintf? */
+  snprintf (keyed, keyedsize, "%s:", key);
   keyedlen = strlen(keyed); 
 
   fp = fopen (fname,"r");
@@ -271,7 +273,7 @@ init_responsibles ()
   char *path = (char *) alloca (PATH_MAX);
 
   memset (array, 0, NUM_RESPONSIBLE_FIELDS * sizeof (char *));
-  sprintf (path, "%s/gnats-adm/%s", gnats_root, RESPONSIBLE_FILE);
+  snprintf (path, PATH_MAX, "%s/gnats-adm/%s", gnats_root, RESPONSIBLE_FILE);
   fp = fopen (path, "r");
   if (fp == NULL)
     return 0;
@@ -358,7 +360,7 @@ init_classes ()
   int  i, nerrs = 0;
 
   memset (array, 0, NUM_CLASS_FIELDS * sizeof (char *));
-  sprintf (path, "%s/gnats-adm/%s", gnats_root, CLASSES);
+  snprintf (path, PATH_MAX, "%s/gnats-adm/%s", gnats_root, CLASSES);
   fp = fopen (path, "r");
 
   if (fp == NULL)
@@ -549,11 +551,11 @@ get_class_enum_field ()
   line = xmalloc (totlen * sizeof(char)); 
   line[0] = '\0';
   c = class_chain;
-  strcat (line, c->key);
+  strlcat (line, c->key, totlen);
   for (c = c->next; c; c = c->next)
     {
-      strcat (line,  " | ");
-      strcat (line, c->key);
+      strlcat (line,  " | ", totlen);
+      strlcat (line, c->key, totlen);
     }
   return line;
 }
@@ -593,7 +595,7 @@ init_states ()
   int  i, nerrs = 0;
 
   memset (array, 0, NUM_STATE_FIELDS * sizeof (char *));
-  sprintf (path, "%s/gnats-adm/%s", gnats_root, STATES);
+  snprintf (path, PATH_MAX, "%s/gnats-adm/%s", gnats_root, STATES);
   fp = fopen (path, "r");
 
   if (fp == NULL)
@@ -779,11 +781,11 @@ get_state_enum_field ()
   char line[STR_MAX];
   line[0] = '\0';
   s = state_chain;
-  strcat (line, s->key);
+  strlcat (line, s->key, sizeof(line));
   for (s = s->next; s; s = s->next)
     {
-      strcat (line,  " | ");
-      strcat (line, s->key);
+      strlcat (line,  " | ", sizeof(line));
+      strlcat (line, s->key, sizeof(line));
     }
   return (strdup (line));
 }
@@ -901,7 +903,7 @@ get_responsible_addr (full, strict, name)
     {
       address = (char *) xmalloc (STR_MAX);
       if (full)
-	sprintf (address, "%s:%s:%s", r->key, r->fullname, r->alias);
+	snprintf (address, STR_MAX, "%s:%s:%s", r->key, r->fullname, r->alias);
       else
 	{
 	  if (r->alias[0]
@@ -909,9 +911,9 @@ get_responsible_addr (full, strict, name)
 		 added a space after the colon, we don't accept that as
 		 an address.  */
 	      && isalpha (r->alias[0]))
-	    sprintf (address, "%s", r->alias);
+	    snprintf (address, STR_MAX, "%s", r->alias);
 	  else
-	    sprintf (address, "%s", r->key);
+	    snprintf (address, STR_MAX, "%s", r->key);
 	}
     }
 
