[ 
https://issues.apache.org/jira/browse/PDFBOX-808?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12906119#action_12906119
 ] 

Jukka Zitting commented on PDFBOX-808:
--------------------------------------

You're right, that was some sloppy thinking by me. I was just looking at 
protecting against the "numberOfBytes-totalAmountRead" argument being zero, but 
of course even in such cases the second half of the AND condition would have 
broken the loop after one unnecessary read() call.

It turns out that the problem was in the MemoryTTFDataStream class that would 
return 0 instead of -1 when the end of the stream is reached. That shouldn't 
normally be a problem given the way TTF files are parsed, but will cause the 
infinite loop when dealing with a truncated or otherwise malformed file. I 
fixed this problem in revision 992483, and made TTFDataStream.read(int) throw 
an IOException in case such an unexpected end of the TTF stream is encountered.

You can get the latest snapshot jars from 
https://repository.apache.org/content/groups/snapshots-group/org/apache/pdfbox/.
 Our CI build will push a new version up there within an hour or so.

> PDTrueTypeFont.loadTTF() freezes (at TTFDataStream.java:195)
> ------------------------------------------------------------
>
>                 Key: PDFBOX-808
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-808
>             Project: PDFBox
>          Issue Type: Bug
>          Components: FontBox
>    Affects Versions: 1.2.1
>         Environment: PDFBox 1.2.1, JDK 1.6.0_21, Windows XP 32 Bit.
>            Reporter: Martin Hilpert
>            Assignee: Jukka Zitting
>            Priority: Critical
>             Fix For: 1.3.0
>
>
> Sometimes (not always), my app "freezes". When I look into jVisualVM thread 
> dump, I see this stack trace:
>    java.lang.Thread.State: RUNNABLE
>       at org.apache.fontbox.ttf.TTFDataStream.read(TTFDataStream.java:195)
>       at 
> org.apache.fontbox.ttf.TTFDataStream.readString(TTFDataStream.java:69)
>       at 
> org.apache.fontbox.ttf.TTFDataStream.readString(TTFDataStream.java:57)
>       at 
> org.apache.fontbox.ttf.PostScriptTable.initData(PostScriptTable.java:104)
>       at org.apache.fontbox.ttf.TTFParser.parseTTF(TTFParser.java:140)
>       at org.apache.fontbox.ttf.TTFParser.parseTTF(TTFParser.java:87)
>       at 
> org.apache.pdfbox.pdmodel.font.PDTrueTypeFont.loadDescriptorDictionary(PDTrueTypeFont.java:206)
>       at 
> org.apache.pdfbox.pdmodel.font.PDTrueTypeFont.loadTTF(PDTrueTypeFont.java:167)
>       at 
> org.apache.pdfbox.pdmodel.font.PDTrueTypeFont.loadTTF(PDTrueTypeFont.java:143)
>       at 
> org.apache.pdfbox.pdmodel.font.PDTrueTypeFont.loadTTF(PDTrueTypeFont.java:130)
> It never returns and blocks the application from continuing. This hapend 
> several times now every few hours.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to