Prevent buffer overrun in log_event().
authorIain Patterson <me@iain.cx>
Fri, 15 Nov 2013 11:21:58 +0000 (11:21 +0000)
committerIain Patterson <me@iain.cx>
Fri, 15 Nov 2013 16:03:00 +0000 (16:03 +0000)
We were only expecting six message strings but we could possible receive
more.

event.cpp

index 995b7af..32e4acf 100644 (file)
--- a/event.cpp
+++ b/event.cpp
@@ -1,6 +1,7 @@
 #include "nssm.h"\r
 \r
 #define NSSM_ERROR_BUFSIZE 65535\r
+#define NSSM_NUM_EVENT_STRINGS 16\r
 unsigned long tls_index;\r
 \r
 /* Convert error code to error string - must call LocalFree() on return value */\r
@@ -34,7 +35,7 @@ void log_event(unsigned short type, unsigned long id, ...) {
   va_list arg;\r
   int count;\r
   char *s;\r
-  char *strings[6];\r
+  char *strings[NSSM_NUM_EVENT_STRINGS];\r
 \r
   /* Open event log */\r
   HANDLE handle = RegisterEventSource(0, TEXT(NSSM));\r
@@ -43,7 +44,8 @@ void log_event(unsigned short type, unsigned long id, ...) {
   /* Log it */\r
   count = 0;\r
   va_start(arg, id);\r
-  while ((s = va_arg(arg, char *))) strings[count++] = s;\r
+  while ((s = va_arg(arg, char *)) && count < NSSM_NUM_EVENT_STRINGS - 1) strings[count++] = s;\r
+  strings[count] = 0;\r
   va_end(arg);\r
   ReportEvent(handle, type, 0, id, 0, count, 0, (const char **) strings, 0);\r
 \r