Actually add a limit to prevent infinite buffering memory

This commit is contained in:
Olivier 'reivilibre' 2023-08-11 22:19:12 +01:00
parent e306acd196
commit a9379dba14

View File

@ -7,11 +7,12 @@ use openssh_sftp_client::error::SftpErrorKind;
use openssh_sftp_client::file::{File, TokioCompatFile}; use openssh_sftp_client::file::{File, TokioCompatFile};
use openssh_sftp_client::fs::{DirEntry, Fs}; use openssh_sftp_client::fs::{DirEntry, Fs};
use openssh_sftp_client::Error::SftpError; use openssh_sftp_client::Error::SftpError;
use openssh_sftp_client::Sftp; use openssh_sftp_client::{Sftp, SftpOptions};
use ouroboros::self_referencing; use ouroboros::self_referencing;
use std::fmt::{Debug, Formatter}; use std::fmt::{Debug, Formatter};
use std::io; use std::io;
use std::io::{ErrorKind, SeekFrom}; use std::io::{ErrorKind, SeekFrom};
use std::num::NonZeroUsize;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::pin::Pin; use std::pin::Pin;
use std::sync::Arc; use std::sync::Arc;
@ -76,10 +77,16 @@ impl SftpConn {
}, },
sftp_builder: |ssh_child| { sftp_builder: |ssh_child| {
Box::pin(async move { Box::pin(async move {
let sftp_opts = SftpOptions::new()
// Don't buffer infinitely when writing files: 32 MiB per file in flight
// will do.
.tokio_compat_file_write_limit(
NonZeroUsize::new(32 * 1024 * 1024).unwrap(),
);
Sftp::new( Sftp::new(
ssh_child.stdin().take().unwrap(), ssh_child.stdin().take().unwrap(),
ssh_child.stdout().take().unwrap(), ssh_child.stdout().take().unwrap(),
Default::default(), sftp_opts,
) )
.await .await
.map_err(|e| eyre::Error::from(e)) .map_err(|e| eyre::Error::from(e))