From 468739b361bbdc5c4e1c7e44118f64d81f9fa398 Mon Sep 17 00:00:00 2001 From: Plamen Totev Date: Mon, 5 Feb 2018 20:55:41 +0200 Subject: [PATCH] Fix the module name is not extracted when the path to the module contains spaces When `MainClassModuleNameExtractor` is run in external JVM a file with arguments for the JVM is created. This file contains the paths to the modules but if those paths contain spaces they are not properly escaped and as a result `MainClassModuleNameExtractor` receives corrupted paths as arguments. Quote all paths in the file so spaces are handled properly. --- .../java/jpms/MainClassModuleNameExtractor.java | 6 +++++- .../AbstractFilenameModuleNameExtractorTest.java | 7 +++++++ .../plexus-java-1.0.0-SNAPSHOT.jar | Bin 0 -> 363 bytes 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 plexus-java/src/test/resources/jar with spaces in path/plexus-java-1.0.0-SNAPSHOT.jar diff --git a/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/MainClassModuleNameExtractor.java b/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/MainClassModuleNameExtractor.java index 558633d..f6988f4 100644 --- a/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/MainClassModuleNameExtractor.java +++ b/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/MainClassModuleNameExtractor.java @@ -78,7 +78,11 @@ public Map extract( Map files ) for ( Path p : files.values() ) { - argsWriter.append( p.toAbsolutePath().toString() ); + // make sure the path is surrounded with quotes in case there is space + argsWriter.append( '"' ); + // make sure to escape Windows paths + argsWriter.append( p.toAbsolutePath().toString().replace( "\\", "\\\\" ) ); + argsWriter.append( '"' ); argsWriter.newLine(); } } diff --git a/plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/AbstractFilenameModuleNameExtractorTest.java b/plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/AbstractFilenameModuleNameExtractorTest.java index 02475c1..96e0307 100644 --- a/plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/AbstractFilenameModuleNameExtractorTest.java +++ b/plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/AbstractFilenameModuleNameExtractorTest.java @@ -60,4 +60,11 @@ public void testJarUnsupported() throws Exception assertEquals( null, name ); } + @Test + public void testJarWithSpacesInPath() throws Exception + { + String name = getExtractor().extract( Paths.get( "src/test/resources/jar with spaces in path/plexus-java-1.0.0-SNAPSHOT.jar" ) ); + assertEquals( "org.codehaus.plexus.languages.java", name ); + } + } diff --git a/plexus-java/src/test/resources/jar with spaces in path/plexus-java-1.0.0-SNAPSHOT.jar b/plexus-java/src/test/resources/jar with spaces in path/plexus-java-1.0.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..f68d9c3343135fb9448953f7560676cd715d1275 GIT binary patch literal 363 zcmWIWW@Zs#00GwQZ(d*ql;8x?zOEsTx}JV+`T;;?TwsagIp4fACtj_#2J%1{q#3Tv z*U`_@%{4eg&)3bdv?M<_u_QBD*Ec_9X1$Z+u*@F$n<|-AiGZ+{IpfucaE(Qg#5F>*GLzkZ$=Ut}D zjOaAPXk0#l84WT=9f;vZBl!#27LN27hWkKUdUYg3LAJr@0B=?{kW-j|@F0+$0^%?L E01%Z)ZU6uP literal 0 HcmV?d00001