Hi,
Am 02.06.2013 23:20, schrieb Leleu Eric:
Hi,
Ah yes you are right, I'm sorry.
No need to worry, those things happen ...
Do you want I try to revert this revision?
Yes, please. If you don't know how to do that, try something like this:
change to the directory of your working copy
svn merge -c -1488722 https://svn.apache.org/repos/asf/pdfbox/branches/1.8
svn commit -m "reverting rev. 1488722"
BR,
Eric
Thanks in advance
Andreas Lehmkühler
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;