This is an automated email from the ASF dual-hosted git repository.

ppalaga pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-mvnd.git


The following commit(s) were added to refs/heads/master by this push:
     new 73bfecb1 Make TerminalOutput.pathToMaven() more robust to avoid #929
73bfecb1 is described below

commit 73bfecb19edd9951c7f975825333a3d04f814a0e
Author: Peter Palaga <ppal...@redhat.com>
AuthorDate: Fri Apr 12 16:04:16 2024 +0200

    Make TerminalOutput.pathToMaven() more robust to avoid #929
---
 .../mvnd/common/logging/TerminalOutput.java        | 66 ++++++++++++----------
 1 file changed, 37 insertions(+), 29 deletions(-)

diff --git 
a/common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalOutput.java 
b/common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalOutput.java
index 72fa82e4..d9877f0c 100644
--- a/common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalOutput.java
+++ b/common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalOutput.java
@@ -714,37 +714,45 @@ public class TerminalOutput implements ClientOutput {
 
     public static String pathToMaven(String location) {
         String[] p = location.split("/");
-        if (p.length >= 4 && p[p.length - 1].startsWith(p[p.length - 3] + "-" 
+ p[p.length - 2])) {
-            String artifactId = p[p.length - 3];
-            String version = p[p.length - 2];
-            String classifier;
-            String type;
-            String artifactIdVersion = artifactId + "-" + version;
-            StringBuilder sb = new StringBuilder();
-            if (p[p.length - 1].charAt(artifactIdVersion.length()) == '-') {
-                classifier =
-                        p[p.length - 1].substring(artifactIdVersion.length() + 
1, p[p.length - 1].lastIndexOf('.'));
-            } else {
-                classifier = null;
-            }
-            type = p[p.length - 1].substring(p[p.length - 1].lastIndexOf('.') 
+ 1);
-            for (int j = 0; j < p.length - 3; j++) {
-                if (j > 0) {
-                    sb.append('.');
-                }
-                sb.append(p[j]);
-            }
-            sb.append(':').append(artifactId).append(':').append(version);
-            if (!"jar".equals(type) || classifier != null) {
-                sb.append(':');
-                if (!"jar".equals(type)) {
-                    sb.append(type);
-                }
-                if (classifier != null) {
-                    sb.append(':').append(classifier);
+        if (p.length >= 4) {
+            final String artifactId = p[p.length - 3];
+            final String version = p[p.length - 2];
+            final String fileName = p[p.length - 1];
+            final int artifactIdVersionLength = artifactId.length() + 1 /* the 
dash */ + version.length();
+            if (fileName.length() > artifactIdVersionLength) {
+                /* We use fileName.length() > to avoid 
https://github.com/apache/maven-mvnd/issues/929
+                 * In the code below, we assume that the fileName ends either 
with `.<extension>`
+                 * or `-<classifier>.<extension>` */
+                final int lastPeriodPos = fileName.lastIndexOf('.');
+                if (lastPeriodPos >= 0) {
+                    final String classifier;
+                    final String type;
+                    final StringBuilder sb = new StringBuilder();
+                    if (fileName.charAt(artifactIdVersionLength) == '-') {
+                        classifier = 
fileName.substring(artifactIdVersionLength + 1, lastPeriodPos);
+                    } else {
+                        classifier = null;
+                    }
+                    type = fileName.substring(lastPeriodPos + 1);
+                    for (int j = 0; j < p.length - 3; j++) {
+                        if (j > 0) {
+                            sb.append('.');
+                        }
+                        sb.append(p[j]);
+                    }
+                    
sb.append(':').append(artifactId).append(':').append(version);
+                    if (!"jar".equals(type) || classifier != null) {
+                        sb.append(':');
+                        if (!"jar".equals(type)) {
+                            sb.append(type);
+                        }
+                        if (classifier != null) {
+                            sb.append(':').append(classifier);
+                        }
+                    }
+                    return sb.toString();
                 }
             }
-            return sb.toString();
         }
         return location;
     }

Reply via email to