[ https://issues.apache.org/jira/browse/PDFBOX-4242?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16532999#comment-16532999 ]
ASF subversion and git services commented on PDFBOX-4242: --------------------------------------------------------- Commit 1835077 from til...@apache.org in branch 'pdfbox/branches/2.0' [ https://svn.apache.org/r1835077 ] PDFBOX-4242: register fonts and close them when closing the document to avoid memory leaks > Fontbox does not close file descriptor when loading fonts. > ---------------------------------------------------------- > > Key: PDFBOX-4242 > URL: https://issues.apache.org/jira/browse/PDFBOX-4242 > Project: PDFBox > Issue Type: Bug > Components: FontBox > Affects Versions: 2.0.9 > Reporter: Glen Peterson > Priority: Minor > Labels: file_leak > > My app has been getting "java.io.FileNotFoundException (No file descriptors > available)" and I've confirmed that it's because fontbox isn't closing it's > file descriptors. > In org.apache.fontbox.ttf.TTFParser there's this method: > {{public TrueTypeFont parse(File ttfFile) throws IOException {}} > {{ RAFDataStream raf = new RAFDataStream(ttfFile, "r");}} > {{ try {}} > {{ return this.parse((TTFDataStream)raf);}} > {{ } catch (IOException var4) {}} > {{ // close only on error (file is still being accessed later)}} > {{ raf.close();}} > {{ throw var4;}} > {{}}} > {{}}} > I would have expected to see the close() in a finally block so that the file > is always closed, not just on exceptions. Presumably, you can keep it in > memory without leaving the file descriptor open? > {{public TrueTypeFont parse(File ttfFile) throws IOException {}} > {{ RAFDataStream raf = new RAFDataStream(ttfFile, "r");}} > {{ try {}} > {{ return this.parse((TTFDataStream)raf);}} > {{ } catch (IOException var4) {}}{{ raf.close();}} > {{ throw var4;}} > {{ } finally {}} > {{ raf.close();}} > {{}}} > {{}}} > I tried performing this in a lazy initialization, but it blew up: > java.lang.RuntimeException: java.io.IOException: The TrueType font null does > not contain a 'cmap' tableCaused by: java.io.IOException: The TrueType font > null does not contain a 'cmap' table > at > org.apache.fontbox.ttf.TrueTypeFont.getUnicodeCmapImpl(TrueTypeFont.java:548) > at > org.apache.fontbox.ttf.TrueTypeFont.getUnicodeCmapLookup(TrueTypeFont.java:528) > at > org.apache.fontbox.ttf.TrueTypeFont.getUnicodeCmapLookup(TrueTypeFont.java:514) > at org.apache.fontbox.ttf.TTFSubsetter.<init>(TTFSubsetter.java:91) > at > org.apache.pdfbox.pdmodel.font.TrueTypeEmbedder.subset(TrueTypeEmbedder.java:321) > at org.apache.pdfbox.pdmodel.font.PDType0Font.subset(PDType0Font.java:239) > at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1271) > Thoughts? > Thanks for PDFBox - it's been really helpful! -- This message was sent by Atlassian JIRA (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org For additional commands, e-mail: dev-h...@pdfbox.apache.org