Hello,

telnet from inetutils-2.2 will get stuck if a local environment variable 
DISPLAY exists and and has a value longer than 44 bytes (50 -2 -4).
This is due to negotiating command 250 (X DISPLAY LOCATION) and then not 
sending it because of the buffer being too small.

The attached patch tries to hack around the problem by increasing the temporary 
buffer to some arbitrary larger value and gracefully fail (tested!) if even 
that limit is too small.
In case you want to apply the patch as is and you regard this patch as 
copyrightable material, I assign the copyright of this patch to the maintaining 
organization of this software.
A non-hackish solution would probalby dynamically allocate a temp variable of 
proper length.

Kind regards
   Jörg

-- 
Joerg Mayer                                           <jma...@loplof.de>
We are stuck with technology when what we really want is just stuff that
works. Some say that should read Microsoft instead of technology.
--- telnet.c.orig       2022-01-31 15:42:20.000000000 +0100
+++ telnet.c    2022-01-31 15:56:07.000000000 +0100
@@ -995,7 +995,7 @@
        return;
       if (SB_GET () == TELQUAL_SEND)
        {
-         unsigned char temp[50], *dp;
+         unsigned char temp[1024], *dp;
          int len;
 
          if ((dp = env_getvalue ("DISPLAY")) == NULL)
@@ -1016,6 +1016,7 @@
          if (strlen ((char *) dp) >= sizeof (temp) - 4 - 2)
            {
              printf ("lm_will: not enough room in buffer\n");
+             send_wont (TELOPT_XDISPLOC, 1);
              break;
            }
 

Reply via email to