screen-devel
[Top][All Lists]
Advanced

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

[screen-devel] [bug #25291] Screen crashes after passing through a zmode


From: Alexander Naumov
Subject: [screen-devel] [bug #25291] Screen crashes after passing through a zmodem transfer
Date: Wed, 10 Jul 2024 07:39:46 -0400 (EDT)

Follow-up Comment #8, bug #25291 (group screen):

Ok, we have a patch:

% cat ~/gnu/zmodem.patch 
diff --git a/src/process.c b/src/process.c
index 129e2dc..cbd33f2 100644
--- a/src/process.c
+++ b/src/process.c
@@ -1190,7 +1190,7 @@ static void DoCommandZmodem(struct action *act)
                int i;
                for (i = 0; i < 4; i++)
                        if (!strcmp(zmodes[i], *args))
-                               return;
+                               break;
                if (i == 4 && !strcmp(*args, "on"))
                        i = 1;
                if (i == 4) {
diff --git a/src/window.c b/src/window.c
index 9f5e2d4..042d152 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1812,7 +1812,6 @@ static void zmodem_found(Window *p, int send, char *bp,
size_t len)
 
 void zmodem_abort(Window *p, Display *d)
 {
-       Display *olddisplay = display;
        Layer *oldflayer = flayer;
        if (p) {
                if (p->w_savelayer && p->w_savelayer->l_next) {
@@ -1831,7 +1830,6 @@ void zmodem_abort(Window *p, Display *d)
                D_readev.condpos = D_readev.condneg = NULL;
                Activate(D_fore ? D_fore->w_norefresh : 0);
        }
-       display = olddisplay;
        flayer = oldflayer;
 }


Let's test it... git master branch, Kubuntu:

% cat /etc/issue
Ubuntu 22.04.4 LTS

% dpkg -s konsole | grep '^Version:'
Version: 4:21.12.3-0ubuntu1

% git branch 
* master

% git pull
Enter passphrase for key '/home/alex/.ssh/id_rsa.screen': 
Already up to date.

% git rev-parse HEAD
fcfa6d2da0735d27d322ff22147534ecfb4d7302

% git apply ~/gnu/zmodem.patch

% echo $?
0

% ./configure
% make
% sudo make install

% screen -v
Screen version 4.99.0 (build on 2024-07-10 13:07:15) 


I have 3 tabs in Konsole. First one I'm going to use for the first screen
session 'source', second for the second one 'zmodem' and last one for the
"screen -ls", i.e. for some outside checks (there is no screen session
there).

Start first screen session:

[3] % screen -ls
No Sockets found in /home/alex/.screen.
[1] % screen -S source
[3] % screen -ls
There is a screen on:
        13271.source    (Attached)
1 Socket in /home/alex/.screen.


Start second screen session and enable zmodem mode there.
Check file name (example test name... let's say "passwd")

[2] % screen -S zmodem
[2] C-a :zmodem pass

# I get message 'zmodem mode is pass'

[3] % screen -ls
There are screens on:
        13344.source    (Attached)
        13393.zmodem    (Attached)
2 Sockets in /home/alex/.screen.

[2] % ls -la passwd
ls: cannot access 'passwd': No such file or directory


Send some test file from the first screen session 'source' to the second one
'zmodem' by usging 'sz' command:

[1] C-a : !!! sz /etc/passwd
Sending: passwd
Bytes Sent:   2717   BPS:511578                          

Transfer complete
% echo $?
0


Second session. Check the file again.
Third tab: Check the state of both screen sessions:

[2] % ls -la passwd
-rw-r--r-- 1 alex alex 2717 Sep 28  2023 passwd
[3] % screen -ls
There are screens on:
        14102.source    (Attached)
        14118.zmodem    (Attached)
2 Sockets in /home/alex/.screen.


Both screens are alive. No dead sessions. No crashes. File is there...





    _______________________________________________________

Reply to this item at:

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

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

Attachment: signature.asc
Description: PGP signature


reply via email to

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