This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to annotated tag ANT_1.10.18_RC1 in repository https://gitbox.apache.org/repos/asf/ant.git
commit 3807d672ea18d9f8dafd5eb9b2fe1de05f664539 Author: Stefan Bodewig <[email protected]> AuthorDate: Sun Aug 23 20:35:55 2026 +0200 tweak scp changes a bit --- .../tools/ant/taskdefs/optional/ssh/ScpFromMessage.java | 17 ++++++++++++----- .../ant/taskdefs/optional/ssh/ScpFromMessageBySftp.java | 6 ++++-- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpFromMessage.java b/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpFromMessage.java index b7bba0cd2..fd3b455cb 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpFromMessage.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpFromMessage.java @@ -243,11 +243,16 @@ public class ScpFromMessage extends AbstractSshMessage { if (serverResponse.charAt(0) == 'C') { parseAndFetchFile(serverResponse, startFile, out, in); } else if (serverResponse.charAt(0) == 'D') { - startFile = parseAndCreateDirectory(serverResponse, - startFile); + File f = parseAndCreateDirectory(serverResponse, startFile); + if (f != null) { + startFile = f; + } sendAck(out); } else if (serverResponse.charAt(0) == 'E') { - startFile = startFile.getParentFile(); + File f = startFile.getParentFile(); + if (f != null) { + startFile = f; + } sendAck(out); } else if (serverResponse.charAt(0) == '\01' || serverResponse.charAt(0) == '\02') { @@ -265,7 +270,8 @@ public class ScpFromMessage extends AbstractSshMessage { final String directoryName = serverResponse.substring(start + 1); if (localFile.isDirectory()) { final File dir = FILE_UTILS.resolveFile(localFile, directoryName); - if (FILE_UTILS.isLeadingPath(this.localFile, dir) || getAllowFilesToEscapeDest()) { + if (FILE_UTILS.isLeadingPath(this.localFile, dir, true) + || getAllowFilesToEscapeDest()) { dir.mkdir(); log("Creating: " + dir); return dir; @@ -290,7 +296,8 @@ public class ScpFromMessage extends AbstractSshMessage { final File transferFile = localFile.isDirectory() ? new File(localFile, filename) : localFile; - if (FILE_UTILS.isLeadingPath(this.localFile, transferFile) || getAllowFilesToEscapeDest()) { + if (FILE_UTILS.isLeadingPath(this.localFile, transferFile, true) + || getAllowFilesToEscapeDest()) { fetchFile(transferFile, filesize, out, in); } else { log("Skipping: " + filename + " as target " + FILE_UTILS.getResolvedPath(transferFile) diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpFromMessageBySftp.java b/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpFromMessageBySftp.java index a33fe0638..9e6a2ac9e 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpFromMessageBySftp.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpFromMessageBySftp.java @@ -188,7 +188,8 @@ public class ScpFromMessageBySftp extends ScpFromMessage { } File newDir = FILE_UTILS.resolveFile(localFile, name); - if (FILE_UTILS.isLeadingPath(this.localFile, newDir) || getAllowFilesToEscapeDest()) { + if (FILE_UTILS.isLeadingPath(this.localFile, newDir, true) + || getAllowFilesToEscapeDest()) { getDir(channel, channel.pwd() + "/" + name + "/", newDir); @@ -219,7 +220,8 @@ public class ScpFromMessageBySftp extends ScpFromMessage { if (localFile.isDirectory()) { localFile = new File(localFile, remoteFile); - if (!FILE_UTILS.isLeadingPath(this.localFile, localFile) && !getAllowFilesToEscapeDest()) { + if (!FILE_UTILS.isLeadingPath(this.localFile, localFile, true) + && !getAllowFilesToEscapeDest()) { log("Skipping: " + remoteFile + " as target " + FILE_UTILS.getResolvedPath(localFile) + " is outside " + FILE_UTILS.getResolvedPath(this.localFile)); return;
