Blame cyrus-imapd-2.3.18-potential-overflow.patch
|
|
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])
|