[
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