You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by so...@apache.org on 2018/11/17 12:56:35 UTC
[maven-archiver] branch master updated: [MSHARED-773] - Fail on
invalid 'Automatic-Module-Name' in MANIFEST
This is an automated email from the ASF dual-hosted git repository.
sor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-archiver.git
The following commit(s) were added to refs/heads/master by this push:
new 347d7d3 [MSHARED-773] - Fail on invalid 'Automatic-Module-Name' in MANIFEST
347d7d3 is described below
commit 347d7d3334417598c77777bc8584729cda0c7e1c
Author: Christian Stein <so...@gmail.com>
AuthorDate: Sat Nov 17 09:30:45 2018 +0100
[MSHARED-773] - Fail on invalid 'Automatic-Module-Name' in MANIFEST
Maven Archiver now fails with a `ManifestException` when an invalid
`Automatic-Module-Name` is detected within the `META-INF/MANIFEST.MF`
entries.
For details see https://sormuras.github.io/blog/2018-11-16-invalid-automatic-module-names
https://issues.apache.org/jira/projects/MSHARED/issues/MSHARED-773
---
.../org/apache/maven/archiver/MavenArchiver.java | 15 ++++++
.../apache/maven/archiver/MavenArchiverTest.java | 53 ++++++++++++++++++++++
2 files changed, 68 insertions(+)
diff --git a/src/main/java/org/apache/maven/archiver/MavenArchiver.java b/src/main/java/org/apache/maven/archiver/MavenArchiver.java
index 66d9353..f4f2636 100644
--- a/src/main/java/org/apache/maven/archiver/MavenArchiver.java
+++ b/src/main/java/org/apache/maven/archiver/MavenArchiver.java
@@ -38,6 +38,7 @@ import org.codehaus.plexus.interpolation.StringSearchInterpolator;
import org.codehaus.plexus.interpolation.ValueSource;
import org.apache.maven.shared.utils.StringUtils;
+import javax.lang.model.SourceVersion;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@@ -91,6 +92,11 @@ public class MavenArchiver
ARTIFACT_EXPRESSION_PREFIXES = artifactExpressionPrefixes;
}
+ static boolean isValidModuleName( String name )
+ {
+ return SourceVersion.isName( name );
+ }
+
private JarArchiver archiver;
private File archiveFile;
@@ -645,6 +651,15 @@ public class MavenArchiver
// "Forced build is disabled, but disabling the forced mode isn't supported by the archiver." );
}
+ String automaticModuleName = manifest.getMainSection().getAttributeValue( "Automatic-Module-Name" );
+ if ( automaticModuleName != null )
+ {
+ if ( !isValidModuleName( automaticModuleName ) )
+ {
+ throw new ManifestException( "Invalid automatic module name: '" + automaticModuleName + "'" );
+ }
+ }
+
// create archive
archiver.createArchive();
}
diff --git a/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java b/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java
index 4c0d799..6803f24 100644
--- a/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java
+++ b/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java
@@ -83,6 +83,30 @@ public class MavenArchiverTest
}
@Test
+ public void testInvalidModuleNames()
+ {
+ assertFalse( MavenArchiver.isValidModuleName( "" ) );
+ assertFalse( MavenArchiver.isValidModuleName( "." ) );
+ assertFalse( MavenArchiver.isValidModuleName( "dash-is-invalid" ) );
+ assertFalse( MavenArchiver.isValidModuleName( "plus+is+invalid" ) );
+ assertFalse( MavenArchiver.isValidModuleName( "colon:is:invalid" ) );
+ assertFalse( MavenArchiver.isValidModuleName( "new.class" ) );
+ assertFalse( MavenArchiver.isValidModuleName( "123.at.start.is.invalid" ) );
+ assertFalse( MavenArchiver.isValidModuleName( "digit.at.123start.is.invalid" ) );
+ }
+
+ @Test
+ public void testValidModuleNames()
+ {
+ assertTrue( MavenArchiver.isValidModuleName( "a" ) );
+ assertTrue( MavenArchiver.isValidModuleName( "a.b" ) );
+ assertTrue( MavenArchiver.isValidModuleName( "a_b" ) );
+ assertTrue( MavenArchiver.isValidModuleName( "trailing0.digits123.are456.ok789" ) );
+ assertTrue( MavenArchiver.isValidModuleName( "UTF8.chars.are.okay.äëïöüẍ" ) );
+ assertTrue( MavenArchiver.isValidModuleName( "ℤ€ℕ" ) );
+ }
+
+ @Test
public void testGetManifestExtensionList()
throws Exception
{
@@ -500,6 +524,7 @@ public class MavenArchiverTest
Map<String, String> manifestEntries = new HashMap<String, String>();
manifestEntries.put( "foo", "bar" );
manifestEntries.put( "first-name", "olivier" );
+ manifestEntries.put( "Automatic-Module-Name", "org.apache.maven.archiver" );
manifestEntries.put( "keyWithEmptyValue", null );
config.setManifestEntries( manifestEntries );
@@ -532,6 +557,7 @@ public class MavenArchiverTest
assertEquals( "bar", manifest.get( new Attributes.Name( "foo" ) ) );
assertEquals( "olivier", manifest.get( new Attributes.Name( "first-name" ) ) );
+ assertEquals( "org.apache.maven.archiver", manifest.getValue( "Automatic-Module-Name" ) );
assertEquals( System.getProperty( "java.version" ), manifest.get( new Attributes.Name( "Build-Jdk" ) ) );
assertEquals( System.getProperty( "user.name" ), manifest.get( new Attributes.Name( "Built-By" ) ) );
@@ -545,6 +571,33 @@ public class MavenArchiverTest
}
@Test
+ public void testManifestWithInvalidAutomaticModuleNameThrowsOnCreateArchive()
+ throws Exception
+ {
+ File jarFile = new File( "target/test/dummy.jar" );
+ JarArchiver jarArchiver = getCleanJarArchiver( jarFile );
+
+ MavenArchiver archiver = getMavenArchiver( jarArchiver );
+
+ MavenSession session = getDummySession();
+ MavenProject project = getDummyProject();
+ MavenArchiveConfiguration config = new MavenArchiveConfiguration();
+
+ Map<String, String> manifestEntries = new HashMap<String, String>();
+ manifestEntries.put( "Automatic-Module-Name", "123.in-valid.new.name" );
+ config.setManifestEntries( manifestEntries );
+
+ try
+ {
+ archiver.createArchive( session, project, config );
+ }
+ catch ( ManifestException e )
+ {
+ assertEquals( "Invalid automatic module name: '123.in-valid.new.name'", e.getMessage() );
+ }
+ }
+
+ @Test
public void testCreatedByManifestEntryWithoutMavenVersion()
throws Exception
{