1
0
mirror of https://git.libssh.org/projects/libssh.git synced 2025-08-01 11:26:52 +03:00

fix: sftp_packet_read stuck in an infinite loop in blocking mode

Signed-off-by: Liu Husong <huliu@janestreet.com>
Reviewed-by: Jakub Jelen <jjelen@redhat.com>
Reviewed-by: Eshan Kelkar <eshankelkar@galorithm.com>
This commit is contained in:
Liu Husong
2024-06-04 00:53:31 +08:00
committed by husong998
parent c662bcc466
commit 2d3b7e07af
5 changed files with 104 additions and 43 deletions

View File

@ -135,8 +135,13 @@ int benchmarks_raw_up (ssh_session session, struct argument_s *args,
snprintf(cmd,sizeof(cmd),"%s /tmp/eater.py", PYTHON_PATH);
if(ssh_channel_request_exec(channel,cmd)==SSH_ERROR)
goto error;
if((err=ssh_channel_read(channel,buffer,sizeof(buffer)-1,0))==SSH_ERROR)
goto error;
err = ssh_channel_read(channel, buffer, sizeof(buffer) - 1, 0);
if (err == SSH_ERROR)
goto error;
if (err == SSH_AGAIN) {
fprintf(stderr, "ssh_channel_read timeout");
goto error;
}
buffer[err]=0;
if(!strstr(buffer,"go")){
fprintf(stderr,"parse error : %s\n",buffer);
@ -160,9 +165,13 @@ int benchmarks_raw_up (ssh_session session, struct argument_s *args,
if(args->verbose>0)
fprintf(stdout,"Finished upload, now waiting the ack\n");
if((err=ssh_channel_read(channel,buffer,5,0))==SSH_ERROR)
err = ssh_channel_read(channel, buffer, 5, 0);
if (err == SSH_ERROR)
goto error;
if (err == SSH_AGAIN) {
fprintf(stderr, "ssh_channel_read timeout");
goto error;
}
buffer[err]=0;
if(!strstr(buffer,"done")){
fprintf(stderr,"parse error : %s\n",buffer);
@ -272,8 +281,12 @@ int benchmarks_raw_down (ssh_session session, struct argument_s *args,
if(toread > args->chunksize)
toread = args->chunksize;
r=ssh_channel_read(channel,buffer,toread,0);
if(r == SSH_ERROR)
goto error;
if (r == SSH_ERROR)
goto error;
if (r == SSH_AGAIN) {
fprintf(stderr, "ssh_channel_read timeout");
goto error;
}
total += r;
}