a55fa56
This is a backport of
a55fa56
https://cyrus.foundation/cyrus-imapd/commit/?id=ff4e6c71d932b3e6bbfa67d76f095e27ff21bad0
a55fa56
a55fa56
The patch is mentioned in http://seclists.org/oss-sec/2015/q3/651 as fixing
a55fa56
potential overflows.
a55fa56
a55fa56
diff --git a/master/master.c b/master/master.c
a55fa56
index 3886441..455548b 100644
a55fa56
--- a/master/master.c
a55fa56
+++ b/master/master.c
a55fa56
@@ -197,13 +197,15 @@ void event_free(struct event *a)
a55fa56
     free(a);
a55fa56
 }
a55fa56
 
a55fa56
-void get_prog(char *path, unsigned size, char *const *cmd)
a55fa56
+void get_prog(char *path, size_t size, char *const *cmd)
a55fa56
 {
a55fa56
+    if (!size) return;
a55fa56
     if (cmd[0][0] == '/') {
a55fa56
-	/* master lacks strlcpy, due to no libcyrus */
a55fa56
-	snprintf(path, size, "%s", cmd[0]);
a55fa56
+        /* master lacks strlcpy, due to no libcyrus */
a55fa56
+        strncpy(path, cmd[0], size - 1);
a55fa56
     }
a55fa56
     else snprintf(path, size, "%s/%s", SERVICE_PATH, cmd[0]);
a55fa56
+    path[size-1] = '\0';
a55fa56
 }
a55fa56
 
a55fa56
 void get_statsock(int filedes[2])