[ 
https://jira.codehaus.org/browse/MPMD-146?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andreas Dangel updated MPMD-146:
--------------------------------

    Attachment: 0001-Close-the-fileoutputstream-in-the-finally-block-too..patch

Simple fix - closes the file output stream in the finally block, too.
                
> An incomplete fix for the resource leak bugs in CpdReport.java
> --------------------------------------------------------------
>
>                 Key: MPMD-146
>                 URL: https://jira.codehaus.org/browse/MPMD-146
>             Project: Maven 2.x PMD Plugin
>          Issue Type: Bug
>          Components: PMD
>    Affects Versions: 2.8
>            Reporter: Guangtai Liang
>            Priority: Critical
>         Attachments: 
> 0001-Close-the-fileoutputstream-in-the-finally-block-too..patch
>
>
> The fix revision 730089 was aimed to remove an resource leak bug on the 
> OutputStreamWriter object "writer" (created in line 188) in the method 
> "writeNonHtml()" of the file 
> "/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdReport.java"
>  , 
> but it is incomplete. 
> There are some problems: 
> 1. when "writer" is not created successfully at line 189 but the 
> FileOutputStream object "tStream" is created successfully at line 
> 188,"tStream" will be leaked. 
> The best way to close such resource objects is putting such close operations 
> for all resource objects in the finaly block of a try-catch-finally structure.
> Although a later fix (rev935316) tried to fix it, the problem still exists in 
> the head revision. The buggy code is copied as bellows (the object "tStream" 
> needs to be closed at line 220): 
>   void writeNonHtml( CPD cpd )
>         throws MavenReportException
>     {
>         Renderer r = createRenderer();
>         if ( r == null )
>         {
>             return;
>         }
>         String buffer = r.render( cpd.getMatches() );
>         Writer writer = null;
>         try
>         {
>             targetDirectory.mkdirs();
>             File targetFile = new File( targetDirectory, "cpd." + format );
> 220            FileOutputStream tStream = new FileOutputStream( targetFile );
> 221            writer = new OutputStreamWriter( tStream, getOutputEncoding() 
> );
>             writer.write( buffer );
>             writer.close();
>             File siteDir = getReportOutputDirectory();
>             siteDir.mkdirs();
>             FileUtils.copyFile( targetFile, new File( siteDir, "cpd." + 
> format ) );
>         }
>         catch ( IOException ioe )
>         {
>             throw new MavenReportException( ioe.getMessage(), ioe );
>         }
>         finally
>         {
> 235            IOUtil.close( writer );
>         }
>     }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://jira.codehaus.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to