[poppler] 2 commits - poppler/GfxFont.h poppler/SplashOutputDev.cc
Albert Astals Cid
aacid at kemper.freedesktop.org
Sun Sep 27 06:45:52 PDT 2015
poppler/GfxFont.h | 11 +++++++++++
poppler/SplashOutputDev.cc | 15 ++++++++++++++-
2 files changed, 25 insertions(+), 1 deletion(-)
New commits:
commit a82e338b4f9639aced3201bf7639bbdf1a7974e2
Author: Albert Astals Cid <aacid at kde.org>
Date: Sun Sep 27 15:41:27 2015 +0200
Fix memory leak on font reload
diff --git a/poppler/SplashOutputDev.cc b/poppler/SplashOutputDev.cc
index 5275143..6d41616 100644
--- a/poppler/SplashOutputDev.cc
+++ b/poppler/SplashOutputDev.cc
@@ -1907,7 +1907,7 @@ void SplashOutputDev::doUpdateFont(GfxState *state) {
GfxFont *gfxFont;
GfxFontLoc *fontLoc;
GfxFontType fontType;
- SplashOutFontFileID *id;
+ SplashOutFontFileID *id = NULL;
SplashFontFile *fontFile;
SplashFontSrc *fontsrc = NULL;
FoFiTrueType *ff;
@@ -1947,6 +1947,11 @@ void SplashOutputDev::doUpdateFont(GfxState *state) {
// check the font file cache
reload:
+ delete id;
+ delete fontLoc;
+ if (fontsrc && !fontsrc->isFile)
+ fontsrc->unref();
+
id = new SplashOutFontFileID(gfxFont->getID());
if ((fontFile = fontEngine->getFontFile(id))) {
delete id;
commit 8639b20da3d9be62f47462ad1cdaa5c65d117dfb
Author: Thomas Freitag <Thomas.Freitag at alfa.de>
Date: Sun Sep 27 15:37:51 2015 +0200
Try to use an external font if the internal one is invalid
diff --git a/poppler/GfxFont.h b/poppler/GfxFont.h
index febb902..85bdea1 100644
--- a/poppler/GfxFont.h
+++ b/poppler/GfxFont.h
@@ -22,6 +22,7 @@
// Copyright (C) 2011 Axel StrĂ¼bing <axel.struebing at freenet.de>
// Copyright (C) 2011, 2012, 2014 Adrian Johnson <ajohnson at redneon.com>
// Copyright (C) 2015 Jason Crain <jason at aquaticape.us>
+// Copyright (C) 2015 Thomas Freitag <Thomas.Freitag at alfa.de>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
@@ -211,6 +212,16 @@ public:
GBool getEmbeddedFontID(Ref *embID)
{ *embID = embFontID; return embFontID.num >= 0; }
+ // Invalidate an embedded font
+ // Returns false if there is no embedded font.
+ GBool invalidateEmbeddedFont() {
+ if (embFontID.num >= 0) {
+ embFontID.num = -1;
+ return gTrue;
+ }
+ return gFalse;
+ }
+
// Get the PostScript font name for the embedded font. Returns
// NULL if there is no embedded font.
GooString *getEmbeddedFontName() { return embFontName; }
diff --git a/poppler/SplashOutputDev.cc b/poppler/SplashOutputDev.cc
index 097260b..5275143 100644
--- a/poppler/SplashOutputDev.cc
+++ b/poppler/SplashOutputDev.cc
@@ -1946,6 +1946,7 @@ void SplashOutputDev::doUpdateFont(GfxState *state) {
}
// check the font file cache
+reload:
id = new SplashOutFontFileID(gfxFont->getID());
if ((fontFile = fontEngine->getFontFile(id))) {
delete id;
@@ -1989,6 +1990,7 @@ void SplashOutputDev::doUpdateFont(GfxState *state) {
error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
gfxFont->getName() ? gfxFont->getName()->getCString()
: "(unnamed)");
+ if (gfxFont->invalidateEmbeddedFont()) goto reload;
goto err2;
}
break;
@@ -2000,6 +2002,7 @@ void SplashOutputDev::doUpdateFont(GfxState *state) {
error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
gfxFont->getName() ? gfxFont->getName()->getCString()
: "(unnamed)");
+ if (gfxFont->invalidateEmbeddedFont()) goto reload;
goto err2;
}
break;
@@ -2011,6 +2014,7 @@ void SplashOutputDev::doUpdateFont(GfxState *state) {
error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
gfxFont->getName() ? gfxFont->getName()->getCString()
: "(unnamed)");
+ if (gfxFont->invalidateEmbeddedFont()) goto reload;
goto err2;
}
break;
@@ -2046,6 +2050,7 @@ void SplashOutputDev::doUpdateFont(GfxState *state) {
error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
gfxFont->getName() ? gfxFont->getName()->getCString()
: "(unnamed)");
+ if (gfxFont->invalidateEmbeddedFont()) goto reload;
goto err2;
}
break;
@@ -2057,6 +2062,7 @@ void SplashOutputDev::doUpdateFont(GfxState *state) {
error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
gfxFont->getName() ? gfxFont->getName()->getCString()
: "(unnamed)");
+ if (gfxFont->invalidateEmbeddedFont()) goto reload;
goto err2;
}
break;
@@ -2077,6 +2083,7 @@ void SplashOutputDev::doUpdateFont(GfxState *state) {
error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
gfxFont->getName() ? gfxFont->getName()->getCString()
: "(unnamed)");
+ if (gfxFont->invalidateEmbeddedFont()) goto reload;
goto err2;
}
break;
@@ -2113,6 +2120,7 @@ void SplashOutputDev::doUpdateFont(GfxState *state) {
error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
gfxFont->getName() ? gfxFont->getName()->getCString()
: "(unnamed)");
+ if (gfxFont->invalidateEmbeddedFont()) goto reload;
goto err2;
}
break;
More information about the poppler
mailing list