diff --git a/CHANGES b/CHANGES index 2a12aba..8d524a7 100644 --- a/CHANGES +++ b/CHANGES @@ -26,6 +26,10 @@ corrections: address PTY does not take any parameters but did not report an error when some were given + Marcus Meissner provided a patch that fixes invalid output and possible + process crash when socat prints info about an unnamed unix domain + socket + ####################### V 1.7.1.3: security: diff --git a/sysutils.c b/sysutils.c index 6b31788..8815900 100644 --- a/sysutils.c +++ b/sysutils.c @@ -1,5 +1,5 @@ /* source: sysutils.c */ -/* Copyright Gerhard Rieger 2001-2008 */ +/* Copyright Gerhard Rieger 2001-2011 */ /* Published under the GNU General Public License V.2, see file COPYING */ /* translate socket addresses into human readable form */ @@ -215,10 +215,14 @@ char *sockaddr_unix_info(const struct sockaddr_un *sa, socklen_t salen, char *bu } else #endif /* WITH_ABSTRACT_UNIXSOCKET */ { - nextc = - sanitize_string(sa->sun_path, - MIN(UNIX_PATH_MAX, strlen(sa->sun_path)), - ubuff, XIOSAN_DEFAULT_BACKSLASH_OCT_3); + if (salen <= XIOUNIXSOCKOVERHEAD) { + nextc = sanitize_string ("", MIN(UNIX_PATH_MAX, strlen("")), + ubuff, XIOSAN_DEFAULT_BACKSLASH_OCT_3); + } else { + nextc = sanitize_string(sa->sun_path, + MIN(UNIX_PATH_MAX, strlen(sa->sun_path)), + ubuff, XIOSAN_DEFAULT_BACKSLASH_OCT_3); + } *nextc = '\0'; strncpy(buff, ubuff, blen); }