Hi, Ah yes you are right, I'm sorry. Do you want I try to revert this revision?
BR, Eric 2013/6/2 Andreas Lehmkuehler <[email protected]> > Hi, > > I guess you targeted the wrong repository. It should have been the trunk > and not the branch. > > BR > Andreas Lehmkühler > > Am 02.06.2013 16:49, schrieb [email protected]: > > Author: leleueri >> Date: Sun Jun 2 14:49:47 2013 >> New Revision: 1488722 >> >> URL: http://svn.apache.org/r1488722 >> Log: >> [PDFBox-1617] Fix NullPointer during Type1C font validation >> >> Modified: >> pdfbox/branches/1.8/preflight/**src/main/java/org/apache/** >> pdfbox/preflight/font/**container/FontContainer.java >> pdfbox/branches/1.8/preflight/**src/main/java/org/apache/** >> pdfbox/preflight/font/**container/Type0Container.java >> pdfbox/branches/1.8/preflight/**src/main/java/org/apache/** >> pdfbox/preflight/font/**container/Type1Container.java >> >> Modified: pdfbox/branches/1.8/preflight/**src/main/java/org/apache/** >> pdfbox/preflight/font/**container/FontContainer.java >> URL: http://svn.apache.org/viewvc/**pdfbox/branches/1.8/preflight/** >> src/main/java/org/apache/**pdfbox/preflight/font/** >> container/FontContainer.java?**rev=1488722&r1=1488721&r2=** >> 1488722&view=diff<http://svn.apache.org/viewvc/pdfbox/branches/1.8/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/FontContainer.java?rev=1488722&r1=1488721&r2=1488722&view=diff> >> ==============================**==============================** >> ================== >> --- pdfbox/branches/1.8/preflight/**src/main/java/org/apache/** >> pdfbox/preflight/font/**container/FontContainer.java (original) >> +++ pdfbox/branches/1.8/preflight/**src/main/java/org/apache/** >> pdfbox/preflight/font/**container/FontContainer.java Sun Jun 2 14:49:47 >> 2013 >> @@ -142,8 +142,9 @@ public abstract class FontContainer >> * >> * @param cid >> * @return The Glyph width in 'em' unit. >> + * @throws GlyphException >> */ >> - protected abstract float getFontProgramWidth(int cid); >> + protected abstract float getFontProgramWidth(int cid) throws >> GlyphException; >> >> /** >> * Test if both width are consistent. At the end of this method, >> the CID is marked as valid or invalid. >> >> Modified: pdfbox/branches/1.8/preflight/**src/main/java/org/apache/** >> pdfbox/preflight/font/**container/Type0Container.java >> URL: http://svn.apache.org/viewvc/**pdfbox/branches/1.8/preflight/** >> src/main/java/org/apache/**pdfbox/preflight/font/** >> container/Type0Container.java?**rev=1488722&r1=1488721&r2=** >> 1488722&view=diff<http://svn.apache.org/viewvc/pdfbox/branches/1.8/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/Type0Container.java?rev=1488722&r1=1488721&r2=1488722&view=diff> >> ==============================**==============================** >> ================== >> --- pdfbox/branches/1.8/preflight/**src/main/java/org/apache/** >> pdfbox/preflight/font/**container/Type0Container.java (original) >> +++ pdfbox/branches/1.8/preflight/**src/main/java/org/apache/** >> pdfbox/preflight/font/**container/Type0Container.java Sun Jun 2 >> 14:49:47 2013 >> @@ -25,6 +25,7 @@ import java.util.List; >> >> import org.apache.pdfbox.pdmodel.**font.PDFont; >> import org.apache.pdfbox.preflight.**ValidationResult.** >> ValidationError; >> +import org.apache.pdfbox.preflight.**font.util.GlyphException; >> >> public class Type0Container extends FontContainer >> { >> @@ -37,7 +38,7 @@ public class Type0Container extends Font >> } >> >> @Override >> - protected float getFontProgramWidth(int cid) >> + protected float getFontProgramWidth(int cid) throws GlyphException >> { >> float width = 0; >> if (this.delegateFontContainer != null) >> >> Modified: pdfbox/branches/1.8/preflight/**src/main/java/org/apache/** >> pdfbox/preflight/font/**container/Type1Container.java >> URL: http://svn.apache.org/viewvc/**pdfbox/branches/1.8/preflight/** >> src/main/java/org/apache/**pdfbox/preflight/font/** >> container/Type1Container.java?**rev=1488722&r1=1488721&r2=** >> 1488722&view=diff<http://svn.apache.org/viewvc/pdfbox/branches/1.8/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/Type1Container.java?rev=1488722&r1=1488721&r2=1488722&view=diff> >> ==============================**==============================** >> ================== >> --- pdfbox/branches/1.8/preflight/**src/main/java/org/apache/** >> pdfbox/preflight/font/**container/Type1Container.java (original) >> +++ pdfbox/branches/1.8/preflight/**src/main/java/org/apache/** >> pdfbox/preflight/font/**container/Type1Container.java Sun Jun 2 >> 14:49:47 2013 >> @@ -27,6 +27,7 @@ import java.util.List; >> import org.apache.fontbox.cff.**CFFFont; >> import org.apache.fontbox.cff.**CFFFont.Mapping; >> import org.apache.pdfbox.pdmodel.**font.PDFont; >> +import org.apache.pdfbox.preflight.**PreflightConstants; >> import org.apache.pdfbox.preflight.**font.util.GlyphException; >> import org.apache.pdfbox.preflight.**font.util.Type1; >> >> @@ -52,7 +53,7 @@ public class Type1Container extends Font >> } >> >> @Override >> - protected float getFontProgramWidth(int cid) >> + protected float getFontProgramWidth(int cid) throws GlyphException >> { >> float widthResult = -1; >> try >> @@ -67,41 +68,72 @@ public class Type1Container extends Font >> else >> { >> /* >> - * Retrieves the SID with the Character Name in the >> encoding map Need more PDF with a Type1C subfont to >> - * valid this implementation >> + * Retrieves the SID with the Character Name in the >> encoding map Need >> + * more PDF with a Type1C subfont to valid this >> implementation >> + */ >> + String name = null; >> + if (this.font.getFontEncoding() != null) { >> + name = this.font.getFontEncoding().**getName(cid); >> + } >> + >> + int SID = -1; >> + >> + /* For each CFF, try to found the SID that correspond to >> the CID. >> + * Look up by name if the encoding entry is present in >> the PDFont object >> + * otherwise use the internal encoding map of the font. >> */ >> - String name = this.font.getFontEncoding().** >> getName(cid); >> for (CFFFont cff : lCFonts) >> { >> - int SID = cff.getEncoding().getSID(cid); >> - for (Mapping m : cff.getMappings()) >> - { >> - if (m.getName().equals(name)) >> + if (name == null) { >> + SID = cff.getEncoding().getSID(cid); >> + } else { >> + SID = getSIDByCharacterName(name, cff); >> + } >> + >> + if (SID > 0) { >> + widthResult = cff.getWidth(SID); >> + if (widthResult != defaultGlyphWidth) >> { >> - SID = m.getSID(); >> break; >> } >> } >> - widthResult = cff.getWidth(SID); >> - if (widthResult != defaultGlyphWidth) >> - { >> - break; >> - } >> + } >> + >> + if (SID < 0) >> + { >> + throw new GlyphException(**PreflightConstants.ERROR_ >> **FONTS_GLYPH_MISSING, cid, "Unknown character CID(" + cid+")"); >> } >> } >> } >> - catch (GlyphException e) >> - { >> - widthResult = -1; >> - } >> catch (IOException e) >> { >> - widthResult = -1; // TODO validation exception >> + throw new >> GlyphException(**PreflightConstants.ERROR_**FONTS_GLYPH, >> cid, "Unexpected error during the width validtion for the character CID(" + >> cid+") : " + e.getMessage()); >> } >> >> return widthResult; >> } >> >> + /** >> + * Return the SID of the given character name. >> + * >> + * @param name the character name looked up >> + * @param cff Compact Font Format that represents a sub set of the >> Type1C Font. >> + * @return -1 if the name is missing from the Font encoding map, the >> SID of the character if it is present in the CFF. >> + */ >> + private int getSIDByCharacterName(String name, CFFFont cff) >> + { >> + int SID = -1; >> + for (Mapping m : cff.getMappings()) >> + { >> + if (m.getName().equals(name)) >> + { >> + SID = m.getSID(); >> + break; >> + } >> + } >> + return SID; >> + } >> + >> public void setType1Font(Type1 type1Font) >> { >> this.type1Font = type1Font; >> >> >> >
