Follow-up Comment #14, bug #66142 (group screen):

The proposed patch works in a specific case of eval where the argument to eval
is longer than 4 characters. It does not work for be with

screen -S session-name -X screen bash -c 'sleep 5'

as -c yields len 2 and MAXPATHLEN-len is still larger than fits after «screen
bash»

The following patch seems to work more generally by tracking the remaining
space in the buffer (maybe MAXPATHLEN should be replaced with
«ARRAY_SIZE(m.m.command.cmd)-1» for uniformity).


--- a/attacher.c        2025-02-24 20:15:31.701820351 +0100
+++ b/attacher.c        2025-02-24 20:17:05.893826559 +0100
@@ -457,13 +457,18 @@
        }
        p = m.m.command.cmd;
        n = 0;
+        size_t buffer_size_left = MAXPATHLEN;
        for (; *av && n < MAXARGS - 1; ++av, ++n) {
                size_t len;
                len = strlen(*av) + 1;
+                if(len > buffer_size_left) {
+                        Panic(0, "Total length of the command to send too
large.\n");
+                }
                if (p + len >= m.m.command.cmd + ARRAY_SIZE(m.m.command.cmd) - 
1)
                        break;
-               strncpy(p, *av, MAXPATHLEN);
+               strncpy(p, *av, buffer_size_left);
                p += len;
+                buffer_size_left -= len;
        }
        *p = 0;
        m.m.command.nargs = n;





    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?66142>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/

Attachment: signature.asc
Description: PGP signature

Reply via email to