summaryrefslogtreecommitdiffstats
path: root/lib/lwres/context.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/lwres/context.c')
-rw-r--r--lib/lwres/context.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/lwres/context.c b/lib/lwres/context.c
index 464a2cf..d042c87 100644
--- a/lib/lwres/context.c
+++ b/lib/lwres/context.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007-2009 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: context.c,v 1.50.332.2 2008/12/30 23:46:49 tbox Exp $ */
+/* $Id: context.c,v 1.50.332.5 2009/09/01 23:47:05 tbox Exp $ */
/*! \file context.c
lwres_context_create() creates a #lwres_context_t structure for use in
@@ -471,6 +471,17 @@ lwres_context_sendrecv(lwres_context_t *ctx,
result = lwres_context_send(ctx, sendbase, sendlen);
if (result != LWRES_R_SUCCESS)
return (result);
+
+ /*
+ * If this is not checked, select() can overflow,
+ * causing corruption elsewhere.
+ */
+ if (ctx->sock >= (int)FD_SETSIZE) {
+ close(ctx->sock);
+ ctx->sock = -1;
+ return (LWRES_R_IOERROR);
+ }
+
again:
FD_ZERO(&readfds);
FD_SET(ctx->sock, &readfds);
OpenPOWER on IntegriCloud