Don't // Check if file_name is '.' or '..'

This commit is contained in:
ChristianVisintin 2020-12-05 21:11:03 +01:00
parent af7bd17422
commit ce56c227db
2 changed files with 20 additions and 7 deletions

View file

@ -172,6 +172,10 @@ impl FtpFileTransfer {
Err(_) => 0,
};
let file_name: String = String::from(metadata.get(8).unwrap().as_str());
// Check if file_name is '.' or '..'
if file_name.as_str() == "." || file_name.as_str() == ".." {
return Err(())
}
let mut abs_path: PathBuf = PathBuf::from(path);
let extension: Option<String> = match abs_path.as_path().extension() {
None => None,
@ -510,7 +514,7 @@ impl FileTransfer for FtpFileTransfer {
) -> Result<Box<dyn Write>, FileTransferError> {
match &mut self.stream {
Some(stream) => match stream.put_with_stream(&file_name.to_string_lossy()) {
Ok(writer) => Ok(Box::new(writer)),
Ok(writer) => Ok(Box::new(writer)), // NOTE: don't use BufWriter here, since already returned by the library
Err(err) => Err(FileTransferError::new_ex(
FileTransferErrorType::FileCreateDenied,
format!("{}", err),
@ -529,7 +533,7 @@ impl FileTransfer for FtpFileTransfer {
fn recv_file(&mut self, file: &FsFile) -> Result<Box<dyn Read>, FileTransferError> {
match &mut self.stream {
Some(stream) => match stream.get(&file.abs_path.as_path().to_string_lossy()) {
Ok(reader) => Ok(Box::new(reader)),
Ok(reader) => Ok(Box::new(reader)), // NOTE: don't use BufReader here, since already returned by the library
Err(err) => Err(FileTransferError::new_ex(
FileTransferErrorType::NoSuchFileOrDirectory,
format!("{}", err),

View file

@ -35,7 +35,7 @@ use crate::utils::lstime_to_systime;
// Includes
use regex::Regex;
use ssh2::{Channel, Session};
use std::io::{Read, Write};
use std::io::{BufReader, BufWriter, Read, Write};
use std::net::TcpStream;
use std::path::{Path, PathBuf};
use std::time::SystemTime;
@ -176,6 +176,10 @@ impl ScpFileTransfer {
true => self.get_name_and_link(metadata.get(8).unwrap().as_str()),
false => (String::from(metadata.get(8).unwrap().as_str()), None),
};
// Check if file_name is '.' or '..'
if file_name.as_str() == "." || file_name.as_str() == ".." {
return Err(())
}
let mut abs_path: PathBuf = PathBuf::from(path);
let extension: Option<String> = match abs_path.as_path().extension() {
None => None,
@ -467,7 +471,7 @@ impl FileTransfer for ScpFileTransfer {
let p: PathBuf = self.wrkdir.clone();
match self.perform_shell_cmd_with_path(
p.as_path(),
format!("unset LANG; ls -l \"{}\"", path.display()).as_str(),
format!("unset LANG; ls -la \"{}\"", path.display()).as_str(),
) {
Ok(output) => {
// Split output by (\r)\n
@ -584,7 +588,12 @@ impl FileTransfer for ScpFileTransfer {
let p: PathBuf = self.wrkdir.clone();
match self.perform_shell_cmd_with_path(
p.as_path(),
format!("mv -f \"{}\" \"{}\"; echo $?", path.display(), dst.display()).as_str(),
format!(
"mv -f \"{}\" \"{}\"; echo $?",
path.display(),
dst.display()
)
.as_str(),
) {
Ok(output) => {
// Check if output is 0
@ -703,7 +712,7 @@ impl FileTransfer for ScpFileTransfer {
(mtime, atime)
};
match session.scp_send(file_name, mode, local.size as u64, Some(times)) {
Ok(channel) => Ok(Box::new(channel)),
Ok(channel) => Ok(Box::new(BufWriter::with_capacity(8192, channel))),
Err(err) => Err(FileTransferError::new_ex(
FileTransferErrorType::ProtocolError,
format!("{}", err),
@ -726,7 +735,7 @@ impl FileTransfer for ScpFileTransfer {
// Set blocking to true
session.set_blocking(true);
match session.scp_recv(file.abs_path.as_path()) {
Ok(reader) => Ok(Box::new(reader.0)),
Ok(reader) => Ok(Box::new(BufReader::with_capacity(8192, reader.0))),
Err(err) => Err(FileTransferError::new_ex(
FileTransferErrorType::ProtocolError,
format!("{}", err),