[poppler] Branch 'xpdf303merge' - fofi/FoFiType1.cc fofi/FoFiType1.h
Carlos Garcia Campos
carlosgc at kemper.freedesktop.org
Fri Sep 2 09:10:38 PDT 2011
fofi/FoFiType1.cc | 36 ++++++++++++++++++++++++++++++++++++
fofi/FoFiType1.h | 1 +
2 files changed, 37 insertions(+)
New commits:
commit 44dbb28a07125f92a0835aea7ad3403310bc451d
Author: Carlos Garcia Campos <carlosgc at gnome.org>
Date: Fri Sep 2 18:08:39 2011 +0200
xpdf303: Handle PFB headers in Type 1 font files
diff --git a/fofi/FoFiType1.cc b/fofi/FoFiType1.cc
index d47f543..d256c9c 100644
--- a/fofi/FoFiType1.cc
+++ b/fofi/FoFiType1.cc
@@ -66,6 +66,7 @@ FoFiType1::FoFiType1(char *fileA, int lenA, GBool freeFileDataA):
fontMatrix[4] = 0;
fontMatrix[5] = 0;
parsed = gFalse;
+ undoPFB();
}
FoFiType1::~FoFiType1() {
@@ -325,3 +326,38 @@ void FoFiType1::parse() {
parsed = gTrue;
}
+
+// Undo the PFB encoding, i.e., remove the PFB headers.
+void FoFiType1::undoPFB() {
+ GBool ok;
+ Guchar *file2;
+ int pos1, pos2, type;
+ Guint segLen;
+
+ ok = gTrue;
+ if (getU8(0, &ok) != 0x80 || !ok) {
+ return;
+ }
+ file2 = (Guchar *)gmalloc(len);
+ pos1 = pos2 = 0;
+ while (getU8(pos1, &ok) == 0x80 && ok) {
+ type = getU8(pos1 + 1, &ok);
+ if (type < 1 || type > 2 || !ok) {
+ break;
+ }
+ segLen = getU32LE(pos1 + 2, &ok);
+ pos1 += 6;
+ if (!ok || !checkRegion(pos1, segLen)) {
+ break;
+ }
+ memcpy(file2 + pos2, file + pos1, segLen);
+ pos1 += segLen;
+ pos2 += segLen;
+ }
+ if (freeFileData) {
+ gfree(fileData);
+ }
+ file = fileData = file2;
+ freeFileData = gTrue;
+ len = pos2;
+}
diff --git a/fofi/FoFiType1.h b/fofi/FoFiType1.h
index ae1d73b..f4e29b4 100644
--- a/fofi/FoFiType1.h
+++ b/fofi/FoFiType1.h
@@ -51,6 +51,7 @@ private:
char *getNextLine(char *line);
void parse();
+ void undoPFB();
char *name;
char **encoding;
More information about the poppler
mailing list