You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gn...@apache.org on 2026/07/29 17:25:23 UTC
(maven) 01/01: Fix #12583: Inverted file existence check in DefaultTransport.put()
This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch backport/12612-to-maven-4.0.x
in repository https://gitbox.apache.org/repos/asf/maven.git
commit 1616d40bb544f9f89709acadc12d24c713c6be66
Author: Elliotte Rusty Harold <el...@users.noreply.github.com>
AuthorDate: Wed Jul 29 16:45:47 2026 +0000
Fix #12583: Inverted file existence check in DefaultTransport.put()
The condition Files.isRegularFile(source) in DefaultTransport.put() was
inverted — it threw when the file existed and silently accepted non-existent
files, breaking putBytes() and putString() transitively. Added the missing
negation and a new DefaultTransportTest covering non-existent file rejection,
valid file acceptance, and the putBytes() delegation chain.
Closes #12612
---
.../org/apache/maven/impl/DefaultTransport.java | 2 +-
.../apache/maven/impl/DefaultTransportTest.java | 65 ++++++++++++++++++++++
2 files changed, 66 insertions(+), 1 deletion(-)
diff --git a/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultTransport.java b/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultTransport.java
index f93e5f8d5d..68490fa40c 100644
--- a/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultTransport.java
+++ b/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultTransport.java
@@ -98,7 +98,7 @@ public Optional<String> getString(URI relativeSource, Charset charset) {
public void put(Path source, URI relativeTarget) {
requireNonNull(source, "source is null");
requireNonNull(relativeTarget, "relativeTarget is null");
- if (Files.isRegularFile(source)) {
+ if (!Files.isRegularFile(source)) {
throw new IllegalArgumentException("source file does not exist or is not a file");
}
if (relativeTarget.isAbsolute()) {
diff --git a/impl/maven-impl/src/test/java/org/apache/maven/impl/DefaultTransportTest.java b/impl/maven-impl/src/test/java/org/apache/maven/impl/DefaultTransportTest.java
new file mode 100644
index 0000000000..1e96072a79
--- /dev/null
+++ b/impl/maven-impl/src/test/java/org/apache/maven/impl/DefaultTransportTest.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.impl;
+
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import org.eclipse.aether.spi.connector.transport.PutTask;
+import org.eclipse.aether.spi.connector.transport.Transporter;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+class DefaultTransportTest {
+
+ @Test
+ void testPutWithNonExistentFileThrows(@TempDir Path tempDir) {
+ Transporter transporter = mock(Transporter.class);
+ DefaultTransport transport = new DefaultTransport(URI.create("http://example.com/test/"), transporter);
+ Path nonExistentFile = tempDir.resolve("missing.txt");
+ assertThrows(IllegalArgumentException.class, () -> transport.put(nonExistentFile, URI.create("dest.txt")));
+ }
+
+ @Test
+ void testPutWithExistingFileSucceeds(@TempDir Path tempDir) throws Exception {
+ Path sourceFile = tempDir.resolve("source.txt");
+ Files.writeString(sourceFile, "test content");
+
+ Transporter transporter = mock(Transporter.class);
+ DefaultTransport transport = new DefaultTransport(URI.create("http://example.com/test/"), transporter);
+ URI dest = URI.create("dest.txt");
+ transport.put(sourceFile, dest);
+ verify(transporter).put(any(PutTask.class));
+ }
+
+ @Test
+ void testPutBytesSucceeds() throws Exception {
+ Transporter transporter = mock(Transporter.class);
+ DefaultTransport transport = new DefaultTransport(URI.create("http://example.com/test/"), transporter);
+ URI dest = URI.create("dest.txt");
+ transport.putBytes("test content".getBytes(), dest);
+ verify(transporter).put(any(PutTask.class));
+ }
+}