Fix out-of-bounds error when incorporating email from stdin
[mmh] / sbr / concat.c
index 4d4e15c..9efe731 100644 (file)
@@ -1,40 +1,49 @@
-
 /*
- * concat.c -- concatenate a variable number (minimum of 1)
- *             of strings in managed memory
- *
- * $Id$
- *
- * This code is Copyright (c) 2002, by the authors of nmh.  See the
- * COPYRIGHT file in the root directory of the nmh distribution for
- * complete copyright information.
- */
+** concat.c -- concatenate a variable number (minimum of 1)
+**             of strings in managed memory
+**
+** This code is Copyright (c) 2002, by the authors of nmh.  See the
+** COPYRIGHT file in the root directory of the nmh distribution for
+** complete copyright information.
+*/
 
 #include <h/mh.h>
 #include <h/utils.h>
+#include <stdarg.h>
+
+
+static char *
+copy(char *from, char *to)
+{
+        while ((*to = *from)) {
+                to++;
+                from++;
+        }
+        return (to);
+}
 
 
 char *
-concat (char *s1, ...)
+concat(char *s1, ...)
 {
-    char *cp, *dp, *sp;
-    size_t len;
-    va_list list;
+       char *cp, *dp, *sp;
+       size_t len;
+       va_list list;
 
-    len = strlen (s1) + 1;
-    va_start(list, s1); 
-    while ((cp = va_arg(list, char *)))
-       len += strlen (cp);
-    va_end(list);
+       len = strlen(s1) + 1;
+       va_start(list, s1);
+       while ((cp = va_arg(list, char *)))
+               len += strlen(cp);
+       va_end(list);
 
-    dp = sp = mh_xmalloc(len);
+       dp = sp = mh_xcalloc(len, sizeof(char));
 
-    sp = copy(s1, sp);
+       sp = copy(s1, sp);
 
-    va_start(list, s1); 
-    while ((cp = va_arg (list, char *)))
-       sp = copy(cp, sp);
-    va_end(list);
+       va_start(list, s1);
+       while ((cp = va_arg(list, char *)))
+               sp = copy(cp, sp);
+       va_end(list);
 
-    return dp;
+       return dp;
 }