You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ti...@apache.org on 2019/08/18 21:49:48 UTC

[maven-archetype] branch release-3.1.2 updated: [ARCHETYPE-579] Missing try-with-resources and createNewFile() before new FileOutputStream(f)

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

tibordigana pushed a commit to branch release-3.1.2
in repository https://gitbox.apache.org/repos/asf/maven-archetype.git


The following commit(s) were added to refs/heads/release-3.1.2 by this push:
     new 18c6eef  [ARCHETYPE-579] Missing try-with-resources and createNewFile() before new FileOutputStream(f)
18c6eef is described below

commit 18c6eef1122f3f23466eab7b45f62e1c96cfb8b7
Author: tibordigana <ti...@apache.org>
AuthorDate: Sat Jul 27 15:46:14 2019 +0200

    [ARCHETYPE-579] Missing try-with-resources and createNewFile() before new FileOutputStream(f)
---
 .../maven/archetype/DefaultArchetypeManager.java   |  6 ++++
 .../maven/archetype/common/DefaultPomManager.java  |  6 ++++
 .../archetype/creator/FilesetArchetypeCreator.java | 36 ++++++++++++++++++----
 .../DefaultFilesetArchetypeGenerator.java          | 16 ++++++++--
 .../maven/archetype/old/DefaultOldArchetype.java   | 25 ++++++++++-----
 .../apache/maven/archetype/old/ArchetypeTest.java  |  4 +--
 .../DefaultArchetypeCreationConfigurator.java      |  8 +++++
 7 files changed, 81 insertions(+), 20 deletions(-)

diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java b/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java
index f58c233..4948afc 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java
@@ -96,6 +96,12 @@ public class DefaultArchetypeManager
             archive.getParentFile().mkdirs();
         }
 
+
+        if ( !archive.exists() && !archive.createNewFile() )
+        {
+            getLogger().warn( "Could not create new file \"" + archive.getPath() + "\" or the file already exists." );
+        }
+
         try ( ZipOutputStream zos = new ZipOutputStream( new FileOutputStream( archive ) ) )
         {
             zos.setLevel( 9 );
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java
index ca30cd7..9d572c2 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java
@@ -234,6 +234,12 @@ public class DefaultPomManager
             ioe.initCause( exc );
             throw ioe;
         }
+
+
+        if ( !pomFile.exists() && !pomFile.createNewFile() )
+        {
+            getLogger().warn( "Could not create new file \"" + pomFile.getPath() + "\" or the file already exists." );
+        }
         
         try ( Writer outputStreamWriter = new OutputStreamWriter( new FileOutputStream( pomFile ), fileEncoding ) ) 
         {
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java b/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java
index f499d03..1148f34 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java
@@ -80,6 +80,8 @@ import org.codehaus.plexus.util.WriterFactory;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
+import static org.apache.commons.io.IOUtils.write;
+
 /**
  * Create a 2.x Archetype project from a project. Since 2.0-alpha-5, an integration-test named "basic" is created along
  * the archetype itself to provide immediate test when building the archetype.
@@ -327,8 +329,15 @@ public class FilesetArchetypeCreator
         File basicItDirectory = new File( generatedSourcesDirectory, basic );
         basicItDirectory.mkdirs();
 
+        File archetypePropertiesFile = new File( basicItDirectory, "archetype.properties" );
+        if ( !archetypePropertiesFile.exists() && !archetypePropertiesFile.createNewFile() )
+        {
+            getLogger().warn( "Could not create new file \"" + archetypePropertiesFile.getPath()
+                    + "\" or the file already exists." );
+        }
+
         try ( InputStream in = FilesetArchetypeCreator.class.getResourceAsStream( "archetype.properties" );
-              OutputStream out = new FileOutputStream( new File( basicItDirectory, "archetype.properties" ) ) )
+              OutputStream out = new FileOutputStream( archetypePropertiesFile ) )
         {
             Properties archetypeProperties = new Properties();
             archetypeProperties.load( in );
@@ -461,6 +470,12 @@ public class FilesetArchetypeCreator
     private void copyResource( String name, File destination )
         throws IOException
     {
+        if ( !destination.exists() && !destination.createNewFile() )
+        {
+            getLogger().warn( "Could not create new file \"" + destination.getPath()
+                    + "\" or the file already exists." );
+        }
+
         try ( InputStream in = FilesetArchetypeCreator.class.getResourceAsStream( name );
               OutputStream out = new FileOutputStream( destination ) )
         {
@@ -850,6 +865,8 @@ public class FilesetArchetypeCreator
 
             FileUtils.copyFile( initialPomFile, inputFile );
 
+            outputFile.getParentFile().mkdirs();
+
             try ( Reader in = ReaderFactory.newXmlReader( inputFile );
                   Writer out = WriterFactory.newXmlWriter( outputFile ) )
             {
@@ -857,8 +874,6 @@ public class FilesetArchetypeCreator
 
                 String content = getReversedContent( initialcontent, pomReversedProperties );
 
-                outputFile.getParentFile().mkdirs();
-
                 IOUtil.copy( content, out );
             }
 
@@ -1063,6 +1078,8 @@ public class FilesetArchetypeCreator
 
             FileUtils.copyFile( initialPomFile, inputFile );
 
+            outputFile.getParentFile().mkdirs();
+
             try ( Reader in = ReaderFactory.newXmlReader( inputFile );
                   Writer out = WriterFactory.newXmlWriter( outputFile ) )
             {
@@ -1070,8 +1087,6 @@ public class FilesetArchetypeCreator
 
                 String content = getReversedContent( initialcontent, pomReversedProperties );
 
-                outputFile.getParentFile().mkdirs();
-
                 IOUtil.copy( content, out );
             }
 
@@ -1288,7 +1303,16 @@ public class FilesetArchetypeCreator
             File outputFile = new File( archetypeFilesDirectory, outputFilename );
             outputFile.getParentFile().mkdirs();
 
-            org.apache.commons.io.IOUtils.write( content, new FileOutputStream( outputFile ), fileEncoding );
+            if ( !outputFile.exists() && !outputFile.createNewFile() )
+            {
+                getLogger().warn( "Could not create new file \"" + outputFile.getPath()
+                        + "\" or the file already exists." );
+            }
+
+            try ( OutputStream os = new FileOutputStream( outputFile ) )
+            {
+                write( content, os, fileEncoding );
+            }
         }
     }
 
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java b/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java
index b4d22c0..a80767f 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java
@@ -284,6 +284,11 @@ public class DefaultFilesetArchetypeGenerator
         else
         {
             outFile.getParentFile().mkdirs();
+            if ( !outFile.exists() && !outFile.createNewFile() )
+            {
+                getLogger().warn( "Could not create new file \"" + outFile.getPath()
+                        + "\" or the file already exists." );
+            }
 
             try ( InputStream inputStream = archetypeZipFile.getInputStream( input );
                   OutputStream out = new FileOutputStream( outFile ) )
@@ -496,7 +501,7 @@ public class DefaultFilesetArchetypeGenerator
     private int processFileSet( String directory, List<String> fileSetResources, boolean packaged, String packageName,
                                 Context context, File outputDirectoryFile, String moduleOffset,
                                 String archetypeEncoding, boolean failIfExists )
-        throws OutputFileExists, ArchetypeGenerationFailure
+        throws IOException, OutputFileExists, ArchetypeGenerationFailure
     {
         int count = 0;
 
@@ -602,7 +607,7 @@ public class DefaultFilesetArchetypeGenerator
     }
 
     private void processPom( Context context, File pom, String moduleOffset )
-        throws OutputFileExists, ArchetypeGenerationFailure
+        throws IOException, OutputFileExists, ArchetypeGenerationFailure
     {
         getLogger().debug( "Processing pom " + pom );
 
@@ -657,7 +662,7 @@ public class DefaultFilesetArchetypeGenerator
     @SuppressWarnings( "deprecation" )
     private boolean processTemplate( File outFile, Context context, String templateFileName, String encoding,
                                      boolean failIfExists )
-        throws OutputFileExists, ArchetypeGenerationFailure
+        throws IOException, OutputFileExists, ArchetypeGenerationFailure
     {
         templateFileName = templateFileName.replace( File.separatorChar, '/' );
 
@@ -696,6 +701,11 @@ public class DefaultFilesetArchetypeGenerator
             outFile.getParentFile().mkdirs();
         }
 
+        if ( !outFile.exists() && !outFile.createNewFile() )
+        {
+            getLogger().warn( "Could not create new file \"" + outFile.getPath() + "\" or the file already exists." );
+        }
+
         getLogger().debug( "Merging into " + outFile );
 
         try ( Writer writer = new OutputStreamWriter( new FileOutputStream( outFile ), encoding ) )
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/old/DefaultOldArchetype.java b/archetype-common/src/main/java/org/apache/maven/archetype/old/DefaultOldArchetype.java
index 07f75b8..530104f 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/old/DefaultOldArchetype.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/old/DefaultOldArchetype.java
@@ -305,6 +305,10 @@ public class DefaultOldArchetype
         {
             processTemplates( pomFile, outputDirectory, context, descriptor, packageName, parentModel );
         }
+        catch ( IOException e )
+        {
+            throw new ArchetypeTemplateProcessingException( "Unable to process template", e );
+        }
         finally
         {
             Thread.currentThread().setContextClassLoader( old );
@@ -395,7 +399,7 @@ public class DefaultOldArchetype
 
     private void processTemplates( File pomFile, String outputDirectory, Context context,
                                    ArchetypeDescriptor descriptor, String packageName, Model parentModel )
-        throws ArchetypeTemplateProcessingException
+            throws ArchetypeTemplateProcessingException, IOException
     {
         if ( !pomFile.exists() )
         {
@@ -616,7 +620,7 @@ public class DefaultOldArchetype
 
     private void processTemplate( String outputDirectory, Context context, String template,
                                   TemplateDescriptor descriptor, boolean packageInFileName, String packageName )
-        throws ArchetypeTemplateProcessingException
+            throws ArchetypeTemplateProcessingException, IOException
     {
         processTemplate( outputDirectory, context, template, descriptor, packageInFileName, packageName, null );
     }
@@ -633,7 +637,7 @@ public class DefaultOldArchetype
 
     protected void processSources( String outputDirectory, Context context, ArchetypeDescriptor descriptor,
                                    String packageName, String sourceDirectory )
-        throws ArchetypeTemplateProcessingException
+            throws ArchetypeTemplateProcessingException, IOException
     {
         for ( String template : descriptor.getSources() )
         {
@@ -644,7 +648,7 @@ public class DefaultOldArchetype
 
     protected void processTestSources( String outputDirectory, Context context, ArchetypeDescriptor descriptor,
                                        String packageName, String testSourceDirectory )
-        throws ArchetypeTemplateProcessingException
+            throws ArchetypeTemplateProcessingException, IOException
     {
         for ( String template : descriptor.getTestSources() )
         {
@@ -655,7 +659,7 @@ public class DefaultOldArchetype
 
     protected void processResources( String outputDirectory, Context context, ArchetypeDescriptor descriptor,
                                      String packageName )
-        throws ArchetypeTemplateProcessingException
+        throws IOException, ArchetypeTemplateProcessingException
     {
         for ( String template : descriptor.getResources() )
         {
@@ -666,7 +670,7 @@ public class DefaultOldArchetype
 
     protected void processTestResources( String outputDirectory, Context context, ArchetypeDescriptor descriptor,
                                          String packageName )
-        throws ArchetypeTemplateProcessingException
+        throws IOException, ArchetypeTemplateProcessingException
     {
         for ( String template : descriptor.getTestResources() )
         {
@@ -677,7 +681,7 @@ public class DefaultOldArchetype
 
     protected void processSiteResources( String outputDirectory, Context context, ArchetypeDescriptor descriptor,
                                          String packageName )
-        throws ArchetypeTemplateProcessingException
+        throws IOException, ArchetypeTemplateProcessingException
     {
         for ( String template : descriptor.getSiteResources() )
         {
@@ -689,7 +693,7 @@ public class DefaultOldArchetype
     protected void processTemplate( String outputDirectory, Context context, String template,
                                     TemplateDescriptor descriptor, boolean packageInFileName, String packageName,
                                     String sourceDirectory )
-        throws ArchetypeTemplateProcessingException
+        throws IOException, ArchetypeTemplateProcessingException
     {
         File f;
 
@@ -739,6 +743,11 @@ public class DefaultOldArchetype
             f.getParentFile().mkdirs();
         }
 
+        if ( !f.exists() && !f.createNewFile() )
+        {
+            getLogger().warn( "Could not create new file \"" + f.getPath() + "\" or the file already exists." );
+        }
+
         if ( descriptor.isFiltered() )
         {
             try ( Writer writer = new OutputStreamWriter( new FileOutputStream( f ), descriptor.getEncoding() ) )
diff --git a/archetype-common/src/test/java/org/apache/maven/archetype/old/ArchetypeTest.java b/archetype-common/src/test/java/org/apache/maven/archetype/old/ArchetypeTest.java
index e4490d1..55875cb 100644
--- a/archetype-common/src/test/java/org/apache/maven/archetype/old/ArchetypeTest.java
+++ b/archetype-common/src/test/java/org/apache/maven/archetype/old/ArchetypeTest.java
@@ -172,10 +172,8 @@ public class ArchetypeTest
         File artifactDir = getTestFile( "target", (String) parameters.get( "artifactId" ) );
         File pomFile = getTestFile( artifactDir.getAbsolutePath(), OldArchetype.ARCHETYPE_POM );
 
-        try
+        try ( FileReader pomReader = new FileReader( pomFile ) )
         {
-            FileReader pomReader = new FileReader( pomFile );
-
             MavenXpp3Reader reader = new MavenXpp3Reader();
 
             generatedModel = reader.read( pomReader );
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/DefaultArchetypeCreationConfigurator.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/DefaultArchetypeCreationConfigurator.java
index 3c5f9e9..d98d196 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/DefaultArchetypeCreationConfigurator.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/creation/DefaultArchetypeCreationConfigurator.java
@@ -309,6 +309,14 @@ public class DefaultArchetypeCreationConfigurator
             storedProperties.setProperty( propertyKey, properties.getProperty( propertyKey ) );
         }
 
+        propertyFile.getParentFile().mkdirs();
+
+        if ( !propertyFile.exists() && !propertyFile.createNewFile() )
+        {
+            getLogger().warn( "Could not create new file \"" + propertyFile.getPath()
+                    + "\" or the file already exists." );
+        }
+
         try ( OutputStream os = new FileOutputStream( propertyFile ) )
         {
             storedProperties.store( os, "" );