[
https://jira.codehaus.org/browse/DOXIA-461?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=292440#comment-292440
]
Lukas Theussl commented on DOXIA-461:
-------------------------------------
Please attach a patch instead of pasting code, see the [Guide to Developing
Maven|http://maven.apache.org/guides/development/guide-m2-development.html#Creating_and_submitting_a_patch].
> An incomplete fix for the resource leak bugs in LatexBookRenderer.java
> ----------------------------------------------------------------------
>
> Key: DOXIA-461
> URL: https://jira.codehaus.org/browse/DOXIA-461
> Project: Maven Doxia
> Issue Type: Bug
> Components: Module - Latex
> Reporter: Guangtai Liang
> Priority: Critical
>
> The fix revision 740164 was aimed to remove resource leak bugs on the
> FileWriter object "writer"(created in line 204) and the FileReader object
> "reader" (created in line 219) in the method "writeSection()"of the file "
> /maven/doxia/doxia/trunk/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/LatexBookRenderer.java"
> , but it is incomplete.
> There are some problems:
> 1. the LatexBookSink object "sink" is not closed.
> 2. when the statements at lines 206-215 throw some exception, "writer" 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 (rev1003021) try to close "sink", the problems still
> exists in the head revision. The buggy code is copied as bellows ("sink" and
> "writer" will be leaked when the statements at lines 202-207 throw some
> exception):
> private SectionInfo writeSection( Section section, BookContext context )
> throws IOException, BookDoxiaException
> {
> File file = new File( context.getOutputDirectory(), ( section.getId()
> + ".tex" ) );
> 198 Writer writer = WriterFactory.newWriter( file,
> context.getOutputEncoding() );
> 200 LatexBookSink sink = new LatexBookSink( writer );
> BookContext.BookFile bookFile = (BookContext.BookFile)
> context.getFiles().get( section.getId() );
> if ( bookFile == null )
> {
> throw new BookDoxiaException( "No document that matches section
> with id="
> + section.getId() + "." );
> }
> Reader reader = null;
> try
> {
> reader = ReaderFactory.newReader( bookFile.getFile(),
> context.getInputEncoding() );
> doxia.parse( reader, bookFile.getParserId(), sink );
> }
> catch ( ParserNotFoundException e )
> {
> throw new BookDoxiaException( "Parser not found: "
> + bookFile.getParserId() + ".", e );
> }
> catch ( ParseException e )
> {
> throw new BookDoxiaException( "Error while parsing document: "
> + bookFile.getFile().getAbsolutePath() + ".", e );
> }
> catch ( FileNotFoundException e )
> {
> throw new BookDoxiaException( "Could not find document: "
> + bookFile.getFile().getAbsolutePath() + ".", e );
> }
> finally
> {
> 233 sink.flush();
> 234 sink.close();
> 236 IOUtil.close( reader );
> 237 IOUtil.close( writer );
> }
> SectionInfo info = new SectionInfo();
> info.id = section.getId();
> info.title = sink.getTitle();
> return info;
> }
--
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