summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Astals Cid <aacid@kde.org>2023-05-04 14:05:45 +0200
committerAlbert Astals Cid <aacid@kde.org>2023-05-04 14:42:25 +0200
commit6a566e417b7c261252c8d3d83dd9b1c366f83194 (patch)
tree995d572cbc25a44ca9556e9441dd72d90a01e01c
parentadf710eecf475dd7c64d7b904f7414ec3098491f (diff)
Fix memory leak when looking for fonts in Windows
-rw-r--r--poppler/GlobalParams.cc6
-rw-r--r--poppler/GlobalParams.h4
-rw-r--r--poppler/GlobalParamsWin.cc21
3 files changed, 14 insertions, 17 deletions
diff --git a/poppler/GlobalParams.cc b/poppler/GlobalParams.cc
index 82ac1fd8..2b899c92 100644
--- a/poppler/GlobalParams.cc
+++ b/poppler/GlobalParams.cc
@@ -1256,7 +1256,7 @@ void GlobalParams::setupBaseFonts(const char *dir)
error(errConfig, -1, "No display font for '{0:s}'", displayFontTab[i].name);
continue;
}
- addFontFile(fontName.get(), fileName.get());
+ addFontFile(fontName->toStr(), fileName->toStr());
}
}
@@ -1372,10 +1372,10 @@ std::vector<std::string> GlobalParams::getEncodingNames()
// functions to set parameters
//------------------------------------------------------------------------
-void GlobalParams::addFontFile(const GooString *fontName, const GooString *path)
+void GlobalParams::addFontFile(const std::string &fontName, const std::string &path)
{
globalParamsLocker();
- fontFiles[fontName->toStr()] = path->toStr();
+ fontFiles[fontName] = path;
}
void GlobalParams::setTextEncoding(const char *encodingName)
diff --git a/poppler/GlobalParams.h b/poppler/GlobalParams.h
index 67399f62..30b86ee1 100644
--- a/poppler/GlobalParams.h
+++ b/poppler/GlobalParams.h
@@ -13,7 +13,7 @@
// All changes made under the Poppler project to this file are licensed
// under GPL version 2 or later
//
-// Copyright (C) 2005, 2007-2010, 2012, 2015, 2017-2022 Albert Astals Cid <aacid@kde.org>
+// Copyright (C) 2005, 2007-2010, 2012, 2015, 2017-2023 Albert Astals Cid <aacid@kde.org>
// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com>
// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de>
// Copyright (C) 2006 Kristian Høgsberg <krh@redhat.com>
@@ -154,7 +154,7 @@ public:
std::vector<std::string> getEncodingNames();
//----- functions to set parameters
- void addFontFile(const GooString *fontName, const GooString *path);
+ void addFontFile(const std::string &fontName, const std::string &path);
void setTextEncoding(const char *encodingName);
void setPrintCommands(bool printCommandsA);
void setProfileCommands(bool profileCommandsA);
diff --git a/poppler/GlobalParamsWin.cc b/poppler/GlobalParamsWin.cc
index 93b47d03..d862775e 100644
--- a/poppler/GlobalParamsWin.cc
+++ b/poppler/GlobalParamsWin.cc
@@ -9,7 +9,7 @@
// Copyright (C) 2013, 2018, 2019 Adam Reichold <adamreichold@myopera.com>
// Copyright (C) 2013 Dmytro Morgun <lztoad@gmail.com>
// Copyright (C) 2017 Christoph Cullmann <cullmann@kde.org>
- // Copyright (C) 2017, 2018, 2020-2022 Albert Astals Cid <aacid@kde.org>
+ // Copyright (C) 2017, 2018, 2020-2023 Albert Astals Cid <aacid@kde.org>
// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info@kdab.com>. Work sponsored by the LiMux project of the city of Munich
// Copyright (C) 2019 Christian Persch <chpe@src.gnome.org>
// Copyright (C) 2019 Oliver Sander <oliver.sander@tu-dresden.de>
@@ -349,29 +349,26 @@ void GlobalParams::setupBaseFonts(const char *dir)
if (fontFiles.count(displayFontTab[i].name) > 0)
continue;
- GooString *fontName = new GooString(displayFontTab[i].name);
+ const GooString fontName = GooString(displayFontTab[i].name);
if (dir && displayFontTab[i].t1FileName) {
- GooString *fontPath = appendToPath(new GooString(dir), displayFontTab[i].t1FileName);
- if (FileExists(fontPath->c_str()) || FileExists(replaceSuffix(fontPath, ".pfb", ".pfa")->c_str())) {
- addFontFile(fontName, fontPath);
+ const std::unique_ptr<GooString> fontPath(appendToPath(new GooString(dir), displayFontTab[i].t1FileName));
+ if (FileExists(fontPath->c_str()) || FileExists(replaceSuffix(fontPath.get(), ".pfb", ".pfa")->c_str())) {
+ addFontFile(fontName.toStr(), fontPath->toStr());
continue;
}
- delete fontPath;
}
if (!winFontDir.empty() && displayFontTab[i].ttFileName) {
- GooString *fontPath = appendToPath(new GooString(winFontDir), displayFontTab[i].ttFileName);
- if (FileExists(fontPath->c_str()) || FileExists(replaceSuffix(fontPath, ".ttc", ".ttf")->c_str())) {
- addFontFile(fontName, fontPath);
+ const std::unique_ptr<GooString> fontPath(appendToPath(new GooString(winFontDir), displayFontTab[i].ttFileName));
+ if (FileExists(fontPath->c_str()) || FileExists(replaceSuffix(fontPath.get(), ".ttc", ".ttf")->c_str())) {
+ addFontFile(fontName.toStr(), fontPath->toStr());
continue;
}
- delete fontPath;
}
if (displayFontTab[i].warnIfMissing) {
error(errSyntaxError, -1, "No display font for '{0:s}'", displayFontTab[i].name);
- delete fontName;
}
}
if (!winFontDir.empty()) {
@@ -395,7 +392,7 @@ void GlobalParams::setupBaseFonts(const char *dir)
if (obj2.isDict()) {
Object obj3 = obj2.getDict()->lookup("Path");
if (obj3.isString())
- addFontFile(new GooString(obj1.getName()), obj3.getString()->copy());
+ addFontFile(GooString(obj1.getName()).toStr(), obj3.getString()->toStr());
// Aliases
} else if (obj2.isName()) {
substFiles.emplace(obj1.getName(), obj2.getName());