Commit 47ea80ba authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

avoid an overflow if an excessive amount of servers are used

parent 95c3fa83
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
/* $Id$ */

/* Copyright 2005 by Daniel Stenberg.
/* Copyright (C) 2005 - 2006, Daniel Stenberg
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose and without fee is hereby granted, provided
@@ -39,7 +39,9 @@ int ares_getsock(ares_channel channel,
  if (!channel->queries)
    return 0;

  for (i = 0; i < channel->nservers; i++)
  for (i = 0;
       (i < channel->nservers) && (sockindex < ARES_GETSOCK_MAXNUM);
       i++)
    {
      server = &channel->servers[i];
      if (server->udp_socket != ARES_SOCKET_BAD)
@@ -56,13 +58,12 @@ int ares_getsock(ares_channel channel,
           break;
         socks[sockindex] = server->tcp_socket;
         bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
         sockindex++;

         if (server->qhead) {
         if (server->qhead)
           /* then the tcp socket is also writable! */
           bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex-1);
         }
           bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex);

         sockindex++;
       }
    }
  return bitmap;