summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Astals Cid <aacid@kde.org>2022-01-17 16:11:14 +0100
committerAlbert Astals Cid <aacid@kde.org>2022-01-17 16:17:22 +0100
commitb3ca5e58c3839b34c45319848db6b19af344a7f3 (patch)
tree020803159b5da427e87d80a6ebf1d7b6f4dbdf72
parentee974518464914b0e52549044a244863fd4342f7 (diff)
Use GDir in getDefaultFirefoxCertDB_Linux
-rw-r--r--goo/gdir.h4
-rw-r--r--poppler/SignatureHandler.cc44
2 files changed, 19 insertions, 29 deletions
diff --git a/goo/gdir.h b/goo/gdir.h
index 1d752090..74a1d00e 100644
--- a/goo/gdir.h
+++ b/goo/gdir.h
@@ -41,6 +41,10 @@
class GooString;
+#ifndef _WIN32
+# include <dirent.h>
+#endif
+
//------------------------------------------------------------------------
// GDir and GDirEntry
//------------------------------------------------------------------------
diff --git a/poppler/SignatureHandler.cc b/poppler/SignatureHandler.cc
index 7cbbeb48..36b970a1 100644
--- a/poppler/SignatureHandler.cc
+++ b/poppler/SignatureHandler.cc
@@ -22,9 +22,11 @@
#include <config.h>
#include "SignatureHandler.h"
+#include "goo/gdir.h"
#include "goo/gmem.h"
-#include <dirent.h>
+#include <optional>
+
#include <Error.h>
/* NSS headers */
@@ -665,33 +667,18 @@ std::unique_ptr<X509CertificateInfo> SignatureHandler::getCertificateInfo() cons
}
}
-static GooString *getDefaultFirefoxCertDB_Linux()
+static std::optional<std::string> getDefaultFirefoxCertDB_Linux()
{
- GooString *finalPath = nullptr;
- DIR *toSearchIn;
- struct dirent *subFolder;
-
- GooString *homePath = new GooString(getenv("HOME"));
- homePath = homePath->append("/.mozilla/firefox/");
+ const std::string firefoxPath = std::string(getenv("HOME")) + "/.mozilla/firefox/";
- if ((toSearchIn = opendir(homePath->c_str())) == nullptr) {
- error(errInternal, 0, "couldn't find default Firefox Folder");
- delete homePath;
- return nullptr;
- }
- do {
- if ((subFolder = readdir(toSearchIn)) != nullptr) {
- if (strstr(subFolder->d_name, "default") != nullptr) {
- finalPath = homePath->append(subFolder->d_name);
- closedir(toSearchIn);
- return finalPath;
- }
+ GDir firefoxDir(firefoxPath.c_str());
+ std::unique_ptr<GDirEntry> entry;
+ while (entry = firefoxDir.getNextEntry(), entry != nullptr) {
+ if (entry->isDir() && entry->getName()->toStr().find("default") != std::string::npos) {
+ return entry->getFullPath()->toStr();
}
- } while (subFolder != nullptr);
-
- closedir(toSearchIn);
- delete homePath;
- return nullptr;
+ }
+ return {};
}
std::string SignatureHandler::sNssDir;
@@ -720,13 +707,13 @@ void SignatureHandler::setNSSDir(const GooString &nssDir)
initSuccess = (NSS_Init(nssDir.c_str()) == SECSuccess);
sNssDir = nssDir.toStr();
} else {
- GooString *certDBPath = getDefaultFirefoxCertDB_Linux();
- if (certDBPath == nullptr) {
+ const std::optional<std::string> certDBPath = getDefaultFirefoxCertDB_Linux();
+ if (!certDBPath) {
initSuccess = (NSS_Init("sql:/etc/pki/nssdb") == SECSuccess);
sNssDir = "sql:/etc/pki/nssdb";
} else {
initSuccess = (NSS_Init(certDBPath->c_str()) == SECSuccess);
- sNssDir = certDBPath->toStr();
+ sNssDir = *certDBPath;
}
if (!initSuccess) {
GooString homeNssDb(getenv("HOME"));
@@ -737,7 +724,6 @@ void SignatureHandler::setNSSDir(const GooString &nssDir)
NSS_NoDB_Init(nullptr);
}
}
- delete certDBPath;
}
if (initSuccess) {