From 7b50221c63a89322778c9df0ad78f883f6ce06e6 Mon Sep 17 00:00:00 2001 From: Daniel Collins Date: Thu, 21 Jul 2011 18:41:52 +0000 Subject: [PATCH] Changed format of log timestamp and fixed buffer overflow when converting some IPX addresses to text. --- changes.txt | 2 ++ src/ipxwrapper.h | 20 ++++++++++---------- src/log.c | 2 +- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/changes.txt b/changes.txt index d878b47..6b26c6d 100644 --- a/changes.txt +++ b/changes.txt @@ -19,6 +19,8 @@ Version 0.2.1: Cleanup: Call r_ winsock calls directly in router code to prevent it from generating extra log messages. + + Bugfix: Fixed buffer overflow when converting certain addresses to text. Version 0.2: Implemented ioctlsocket() function with support for FIONREAD. diff --git a/src/ipxwrapper.h b/src/ipxwrapper.h index e84ccf9..b82e9a3 100644 --- a/src/ipxwrapper.h +++ b/src/ipxwrapper.h @@ -54,21 +54,21 @@ #define NET_TO_STRING(s, net) \ sprintf( \ s, "%02X:%02X:%02X:%02X", \ - (unsigned int)net[0], \ - (unsigned int)net[1], \ - (unsigned int)net[2], \ - (unsigned int)net[3] \ + (unsigned int)(unsigned char)(net[0]), \ + (unsigned int)(unsigned char)(net[1]), \ + (unsigned int)(unsigned char)(net[2]), \ + (unsigned int)(unsigned char)(net[3]) \ ) #define NODE_TO_STRING(s, node) \ sprintf( \ s, "%02X:%02X:%02X:%02X:%02X:%02X", \ - (unsigned int)node[0], \ - (unsigned int)node[1], \ - (unsigned int)node[2], \ - (unsigned int)node[3], \ - (unsigned int)node[4], \ - (unsigned int)node[5] \ + (unsigned int)(unsigned char)(node[0]), \ + (unsigned int)(unsigned char)(node[1]), \ + (unsigned int)(unsigned char)(node[2]), \ + (unsigned int)(unsigned char)(node[3]), \ + (unsigned int)(unsigned char)(node[4]), \ + (unsigned int)(unsigned char)(node[5]) \ ) typedef struct ipx_socket ipx_socket; diff --git a/src/log.c b/src/log.c index 8c6aeb6..121d096 100644 --- a/src/log.c +++ b/src/log.c @@ -72,7 +72,7 @@ void log_printf(const char *fmt, ...) { vsnprintf(msg, 1024, fmt, argv); va_end(argv); - snprintf(tstr, 32, "[%u.%u] ", (unsigned int)(called/1000), (unsigned int)((called % 1000) / 10)); + snprintf(tstr, 32, "[%u.%02u] ", (unsigned int)(called/1000), (unsigned int)((called % 1000) / 10)); OVERLAPPED off; off.Offset = 0;