From 408495bbff42d176d340658977bf1942b11495cf Mon Sep 17 00:00:00 2001 From: dkf Date: Tue, 26 Oct 2010 13:59:28 +0000 Subject: * unix/tclUnixSock.c (TcpGetOptionProc): Prevent crash if interp is * win/tclWinSock.c (TcpGetOptionProc): NULL (a legal situation). --- ChangeLog | 10 +++++++--- unix/tclUnixSock.c | 20 +++++++++----------- win/tclWinSock.c | 5 +++-- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 39f8f9b..46f3e2c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,13 +1,18 @@ +2010-10-26 Donal K. Fellows + + * unix/tclUnixSock.c (TcpGetOptionProc): Prevent crash if interp is + * win/tclWinSock.c (TcpGetOptionProc): NULL (a legal situation). + 2010-10-26 Reinhard Max * unix/tclUnixSock.c (TcpGetOptionProc): Added support for - ::tcl::unsupported::noReverseDNS, which if set, prevents + ::tcl::unsupported::noReverseDNS, which if set to any value, prevents [fconfigure -sockname] and [fconfigure -peername] from doing reverse DNS queries. 2010-10-17 Alexandre Ferrieux - * doc/info.n : [Patch 2995655] : + * doc/info.n: [Patch 2995655]: * generic/tclBasic.c: Report inner contexts in [info errorstack] * generic/tclCompCmds.c: * generic/tclCompile.c: @@ -18,7 +23,6 @@ * tests/error.test: * tests/result.test: - 2010-10-20 Donal K. Fellows * generic/tclCompCmds.c (TclCompileDictForCmd): Update the compilation diff --git a/unix/tclUnixSock.c b/unix/tclUnixSock.c index 7507356..3455e29 100644 --- a/unix/tclUnixSock.c +++ b/unix/tclUnixSock.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclUnixSock.c,v 1.29 2010/10/26 13:14:09 rmax Exp $ + * RCS: @(#) $Id: tclUnixSock.c,v 1.30 2010/10/26 13:59:28 dkf Exp $ */ #include "tclInt.h" @@ -620,10 +620,10 @@ TcpGetOptionProc( * initialized by caller. */ { TcpState *statePtr = (TcpState *) instanceData; - char host[NI_MAXHOST], port[NI_MAXSERV]; size_t len = 0; int reverseDNS = 0; +#define SUPPRESS_RDNS_VAR "::tcl::unsupported::noReverseDNS" if (optionName != NULL) { len = strlen(optionName); @@ -645,7 +645,7 @@ TcpGetOptionProc( return TCL_OK; } - if (Tcl_GetVar(interp, "::tcl::unsupported::noReverseDNS", 0) != NULL) { + if (interp != NULL && Tcl_GetVar(interp, SUPPRESS_RDNS_VAR, 0) != NULL) { reverseDNS = NI_NUMERICHOST; } @@ -668,11 +668,10 @@ TcpGetOptionProc( sizeof(port), reverseDNS | NI_NUMERICSERV); Tcl_DStringAppendElement(dsPtr, host); Tcl_DStringAppendElement(dsPtr, port); - if (len == 0) { - Tcl_DStringEndSublist(dsPtr); - } else { - return TCL_OK; - } + if (len) { + return TCL_OK; + } + Tcl_DStringEndSublist(dsPtr); } else { /* * getpeername failed - but if we were asked for all the options @@ -743,11 +742,10 @@ TcpGetOptionProc( } } if (found) { - if (len == 0) { - Tcl_DStringEndSublist(dsPtr); - } else { + if (len) { return TCL_OK; } + Tcl_DStringEndSublist(dsPtr); } else { if (interp) { Tcl_AppendResult(interp, "can't get sockname: ", diff --git a/win/tclWinSock.c b/win/tclWinSock.c index 7f3dbac..347aa1c 100644 --- a/win/tclWinSock.c +++ b/win/tclWinSock.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclWinSock.c,v 1.78 2010/10/26 13:14:09 rmax Exp $ + * RCS: @(#) $Id: tclWinSock.c,v 1.79 2010/10/26 13:59:28 dkf Exp $ * * ----------------------------------------------------------------------- * @@ -2079,6 +2079,7 @@ TcpGetOptionProc( SOCKET sock; size_t len = 0; int reverseDNS = 0; +#define SUPPRESS_RDNS_VAR "::tcl::unsupported::noReverseDNS" /* * Check that WinSock is initialized; do not call it if not, to prevent @@ -2118,7 +2119,7 @@ TcpGetOptionProc( return TCL_OK; } - if (Tcl_GetVar(interp, "::tcl::unsupported::noReverseDNS", 0) != NULL) { + if (interp != NULL && Tcl_GetVar(interp, SUPPRESS_RDNS_VAR, 0) != NULL) { reverseDNS = NI_NUMERICHOST; } -- cgit v0.12