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;

Reply via email to