bug-inetutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bug-inetutils] bug found in inetutils-1.5 telnet binary


From: Debarshi Ray
Subject: Re: [bug-inetutils] bug found in inetutils-1.5 telnet binary
Date: Mon, 14 Apr 2008 19:18:52 +0530

>  I have attached a small manyfd.c program that invokes telnet to show the
> problem, and I have attached a better version of sys_bsd.c.
>
>  The revised sys_bsd.c adds an integer "nfds" and sets it while using
> FD_SET, so that select() can be called this way
>
>   select(nfds+1, &ibits, &obits, &xbits, &TimeValue)

Since the attached sys_bsd.c did not produce a clear 'diff' neither
against the 1.5 version or the current copy in CVS, I tried to
visually pick and apply your changes against the file in CVS. That
seems to boil down to:

Index: telnet/sys_bsd.c
===================================================================
RCS file: /sources/inetutils/inetutils/telnet/sys_bsd.c,v
retrieving revision 1.14
diff -u -p -r1.14 sys_bsd.c
--- telnet/sys_bsd.c    4 Jun 2007 17:27:01 -0000       1.14
+++ telnet/sys_bsd.c    14 Apr 2008 11:03:49 -0000
@@ -1062,42 +1062,57 @@ process_rings (int netin, int netout, in
   */
  int returnValue = 0;
  static struct timeval TimeValue = { 0 };
+  int nfds = 0;

  if (netout)
    {
      FD_SET (net, &obits);
+      if (net > nfds)
+        nfds = net;
    }
  if (ttyout)
    {
      FD_SET (tout, &obits);
+      if (tout > nfds)
+        nfds = tout;
    }
 #if defined(TN3270)
  if (ttyin)
    {
      FD_SET (tin, &ibits);
+      if (tin > nfds)
+        nfds = tin;
    }
 #else /* defined(TN3270) */
  if (ttyin)
    {
      FD_SET (tin, &ibits);
+      if (tin > nfds)
+        nfds = tin;
    }
 #endif /* defined(TN3270) */
 #if defined(TN3270)
  if (netin)
    {
      FD_SET (net, &ibits);
+      if (net > nfds)
+        nfds = net;
    }
 #else /* !defined(TN3270) */
  if (netin)
    {
      FD_SET (net, &ibits);
+      if (net > nfds)
+        nfds = net;
    }
 #endif /* !defined(TN3270) */
  if (netex)
    {
      FD_SET (net, &xbits);
+      if (net > nfds)
+        nfds = net;
    }
-  if ((c = select (16, &ibits, &obits, &xbits,
+  if ((c = select (nfds+1, &ibits, &obits, &xbits,
                  (poll == 0) ? (struct timeval *) 0 : &TimeValue)) < 0)
    {
      if (c == -1)

Also available at http://rishi.fedorapeople.org/gnu/telnet-select.diff

Applying it fixed the issue for me. Thank you Edward. :-)

Happy hacking,
Debarshi
-- 
"From what we get, we can make a living; what we give, however, makes a life."
    -- Arthur Ashe




reply via email to

[Prev in Thread] Current Thread [Next in Thread]