fofi/FoFiType1C.cc | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
New commits: commit ce5e620f07e984927610866467705bb526f9ad8d Author: Carlos Garcia Campos <[email protected]> Date: Sat Sep 3 11:05:42 2011 +0200 xpdf303: Handle the case where sid < 0 diff --git a/fofi/FoFiType1C.cc b/fofi/FoFiType1C.cc index 6df4af5..d0ea888 100644 --- a/fofi/FoFiType1C.cc +++ b/fofi/FoFiType1C.cc @@ -2715,7 +2715,9 @@ char *FoFiType1C::getString(int sid, char *buf, GBool *ok) { Type1CIndexVal val; int n; - if (sid < 391) { + if (sid < 0) { + buf[0] = '\0'; + } else if (sid < 391) { strcpy(buf, fofiType1CStdStrings[sid]); } else { sid -= 391; commit 9d77f999de973f3c547245bca0568f8984faa5d7 Author: Carlos Garcia Campos <[email protected]> Date: Sat Sep 3 11:02:55 2011 +0200 xpdf303: Initialize nFDs in FoFiType1C::parse() diff --git a/fofi/FoFiType1C.cc b/fofi/FoFiType1C.cc index 19b8a97..6df4af5 100644 --- a/fofi/FoFiType1C.cc +++ b/fofi/FoFiType1C.cc @@ -2024,6 +2024,7 @@ GBool FoFiType1C::parse() { // for 8-bit fonts: read the private dict } else { + nFDs = 1; privateDicts = (Type1CPrivateDict *)gmalloc(sizeof(Type1CPrivateDict)); readPrivateDict(topDict.privateOffset, topDict.privateSize, &privateDicts[0]); commit d9594c95713ac79b46e313ecf2875196ea076ef4 Author: Carlos Garcia Campos <[email protected]> Date: Sat Sep 3 11:01:28 2011 +0200 xpdf303: Check whether fdSelect is NULL before using it diff --git a/fofi/FoFiType1C.cc b/fofi/FoFiType1C.cc index 1aa7a4a..19b8a97 100644 --- a/fofi/FoFiType1C.cc +++ b/fofi/FoFiType1C.cc @@ -541,12 +541,13 @@ void FoFiType1C::convertToCIDType0(char *psName, int *codeMap, int nCodes, ok = gTrue; getIndexVal(&charStringsIdx, gid, &val, &ok); if (ok) { - getIndex(privateDicts[fdSelect[gid]].subrsOffset, &subrIdx, &ok); + getIndex(privateDicts[fdSelect ? fdSelect[gid] : 0].subrsOffset, + &subrIdx, &ok); if (!ok) { subrIdx.pos = -1; } cvtGlyph(val.pos, val.len, charStrings, - &subrIdx, &privateDicts[fdSelect[gid]], gTrue); + &subrIdx, &privateDicts[fdSelect ? fdSelect[gid] : 0], gTrue); } } } @@ -791,7 +792,7 @@ void FoFiType1C::convertToCIDType0(char *psName, int *codeMap, int nCodes, // write the charstring offset (CIDMap) table for (i = 0; i <= nCIDs; i += 6) { for (j = 0; j < 6 && i+j <= nCIDs; ++j) { - if (i+j < nCIDs && cidMap[i+j] >= 0) { + if (i+j < nCIDs && cidMap[i+j] >= 0 && fdSelect) { buf2[0] = (char)fdSelect[cidMap[i+j]]; } else { buf2[0] = (char)0; @@ -881,7 +882,8 @@ void FoFiType1C::convertToType0(char *psName, int *codeMap, int nCodes, //~ to handle multiple FDs correctly, need to somehow divide the //~ font up by FD; as a kludge we ignore CID 0, which is .notdef fd = 0; - if (fdSelect != NULL) { + // if fdSelect is NULL, we have an 8-bit font, so just leave fd=0 + if (fdSelect) { for (j = i==0 ? 1 : 0; j < 256 && i+j < nCIDs; ++j) { if (cidMap[i+j] >= 0) { fd = fdSelect[cidMap[i+j]]; _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
