glib/poppler-cached-file-loader.cc | 7 +++---- glib/poppler-cached-file-loader.h | 4 ++-- glib/poppler-document.cc | 4 ++-- poppler/CachedFile.cc | 10 ++++------ poppler/CachedFile.h | 9 ++++----- poppler/CurlCachedFile.cc | 12 +++++------- poppler/CurlCachedFile.h | 8 ++++---- poppler/CurlPDFDocBuilder.cc | 2 +- poppler/FDPDFDocBuilder.cc | 2 +- poppler/FILECacheLoader.cc | 4 ++-- poppler/FILECacheLoader.h | 4 ++-- 11 files changed, 30 insertions(+), 36 deletions(-)
New commits: commit 1ee63109e19975be931c607e04faff72e0f43888 Author: Albert Astals Cid <[email protected]> Date: Wed Mar 30 16:27:24 2022 +0200 Remove the url from the CachedFileLoader::init function It was unused everywhere except in CurlCachedFileLoader, but there we can just pass it in the constructor. The use in one of the two glib cases was a memory leak diff --git a/glib/poppler-cached-file-loader.cc b/glib/poppler-cached-file-loader.cc index 570bd20b..9e747a04 100644 --- a/glib/poppler-cached-file-loader.cc +++ b/glib/poppler-cached-file-loader.cc @@ -1,6 +1,7 @@ /* poppler-cached-file-loader.h: glib interface to poppler * * Copyright (C) 2012 Carlos Garcia Campos <[email protected]> + * Copyright (C) 2022 Albert Astals Cid <[email protected]> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,7 +26,6 @@ PopplerCachedFileLoader::PopplerCachedFileLoader(GInputStream *inputStreamA, GCa inputStream = (GInputStream *)g_object_ref(inputStreamA); cancellable = cancellableA ? (GCancellable *)g_object_ref(cancellableA) : nullptr; length = lengthA; - url = nullptr; cachedFile = nullptr; } @@ -37,13 +37,12 @@ PopplerCachedFileLoader::~PopplerCachedFileLoader() } } -size_t PopplerCachedFileLoader::init(GooString *urlA, CachedFile *cachedFileA) +size_t PopplerCachedFileLoader::init(CachedFile *cachedFileA) { size_t size; gssize bytesRead; char buf[CachedFileChunkSize]; - url = urlA; cachedFile = cachedFileA; if (length != (goffset)-1) { @@ -55,7 +54,7 @@ size_t PopplerCachedFileLoader::init(GooString *urlA, CachedFile *cachedFileA) info = g_file_input_stream_query_info(G_FILE_INPUT_STREAM(inputStream), G_FILE_ATTRIBUTE_STANDARD_SIZE, cancellable, nullptr); if (!info) { - error(errInternal, -1, "Failed to get size of '{0:t}'.", urlA); + error(errInternal, -1, "Failed to get size."); return (size_t)-1; } diff --git a/glib/poppler-cached-file-loader.h b/glib/poppler-cached-file-loader.h index 935ea483..464fb5e4 100644 --- a/glib/poppler-cached-file-loader.h +++ b/glib/poppler-cached-file-loader.h @@ -1,6 +1,7 @@ /* poppler-cached-file-loader.h: glib interface to poppler * * Copyright (C) 2012 Carlos Garcia Campos <[email protected]> + * Copyright (C) 2022 Albert Astals Cid <[email protected]> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,14 +30,13 @@ class PopplerCachedFileLoader : public CachedFileLoader public: PopplerCachedFileLoader(GInputStream *inputStreamA, GCancellable *cancellableA, goffset lengthA = -1); ~PopplerCachedFileLoader() override; - size_t init(GooString *url, CachedFile *cachedFile) override; + size_t init(CachedFile *cachedFile) override; int load(const std::vector<ByteRange> &ranges, CachedFileWriter *writer) override; private: GInputStream *inputStream; GCancellable *cancellable; goffset length; - GooString *url; CachedFile *cachedFile; }; diff --git a/glib/poppler-document.cc b/glib/poppler-document.cc index 5de08108..7796f5a3 100644 --- a/glib/poppler-document.cc +++ b/glib/poppler-document.cc @@ -387,7 +387,7 @@ PopplerDocument *poppler_document_new_from_stream(GInputStream *stream, goffset } str = new PopplerInputStream(stream, cancellable, 0, false, length, Object(objNull)); } else { - CachedFile *cachedFile = new CachedFile(new PopplerCachedFileLoader(stream, cancellable, length), new GooString()); + CachedFile *cachedFile = new CachedFile(new PopplerCachedFileLoader(stream, cancellable, length)); str = new CachedFileStream(cachedFile, 0, false, cachedFile->getLength(), Object(objNull)); } @@ -509,7 +509,7 @@ PopplerDocument *poppler_document_new_from_fd(int fd, const char *password, GErr } } - CachedFile *cachedFile = new CachedFile(new FILECacheLoader(file), nullptr); + CachedFile *cachedFile = new CachedFile(new FILECacheLoader(file)); stream = new CachedFileStream(cachedFile, 0, false, cachedFile->getLength(), Object(objNull)); } else { stream = new OwningFileStream(GooFile::open(fd), Object(objNull)); diff --git a/poppler/CachedFile.cc b/poppler/CachedFile.cc index c4a5acb5..149a6126 100644 --- a/poppler/CachedFile.cc +++ b/poppler/CachedFile.cc @@ -6,7 +6,7 @@ // // Copyright 2009 Stefan Thomas <[email protected]> // Copyright 2010, 2011 Hib Eris <[email protected]> -// Copyright 2010, 2018-2020 Albert Astals Cid <[email protected]> +// Copyright 2010, 2018-2020, 2022 Albert Astals Cid <[email protected]> // Copyright (C) 2013 Julien Nabet <[email protected]> // //======================================================================== @@ -18,29 +18,27 @@ // CachedFile //------------------------------------------------------------------------ -CachedFile::CachedFile(CachedFileLoader *cacheLoader, GooString *uriA) +CachedFile::CachedFile(CachedFileLoader *cacheLoader) { - uri = uriA; loader = cacheLoader; streamPos = 0; chunks = new std::vector<Chunk>(); length = 0; - length = loader->init(uri, this); + length = loader->init(this); refCnt = 1; if (length != ((size_t)-1)) { chunks->resize(length / CachedFileChunkSize + 1); } else { - error(errInternal, -1, "Failed to initialize file cache for '{0:t}'.", uri); + error(errInternal, -1, "Failed to initialize file cache."); chunks->resize(0); } } CachedFile::~CachedFile() { - delete uri; delete loader; delete chunks; } diff --git a/poppler/CachedFile.h b/poppler/CachedFile.h index 588c0e4e..854692ea 100644 --- a/poppler/CachedFile.h +++ b/poppler/CachedFile.h @@ -8,7 +8,7 @@ // // Copyright 2009 Stefan Thomas <[email protected]> // Copyright 2010 Hib Eris <[email protected]> -// Copyright 2010, 2018-2020 Albert Astals Cid <[email protected]> +// Copyright 2010, 2018-2020, 2022 Albert Astals Cid <[email protected]> // //======================================================================== @@ -45,7 +45,7 @@ class POPPLER_PRIVATE_EXPORT CachedFile friend class CachedFileWriter; public: - CachedFile(CachedFileLoader *cacheLoader, GooString *uri); + explicit CachedFile(CachedFileLoader *cacheLoader); CachedFile(const CachedFile &) = delete; CachedFile &operator=(const CachedFile &) = delete; @@ -79,7 +79,6 @@ private: int cache(size_t offset, size_t length); CachedFileLoader *loader; - GooString *uri; size_t length; size_t streamPos; @@ -136,8 +135,8 @@ public: // Initializes the file load. // Returns the length of the file. - // The caller is responsible for deleting uri and cachedFile. - virtual size_t init(GooString *uri, CachedFile *cachedFile) = 0; + // The caller is responsible for deleting cachedFile. + virtual size_t init(CachedFile *cachedFile) = 0; // Loads specified byte ranges and passes it to the writer to store them. // Returns 0 on success, Anything but 0 on failure. diff --git a/poppler/CurlCachedFile.cc b/poppler/CurlCachedFile.cc index 1ff17220..453c66a3 100644 --- a/poppler/CurlCachedFile.cc +++ b/poppler/CurlCachedFile.cc @@ -18,9 +18,8 @@ //------------------------------------------------------------------------ -CurlCachedFileLoader::CurlCachedFileLoader() +CurlCachedFileLoader::CurlCachedFileLoader(const std::string &urlA) : url(urlA) { - url = nullptr; cachedFile = nullptr; curl = nullptr; } @@ -35,17 +34,16 @@ static size_t noop_cb(char *ptr, size_t size, size_t nmemb, void *ptr2) return size * nmemb; } -size_t CurlCachedFileLoader::init(GooString *urlA, CachedFile *cachedFileA) +size_t CurlCachedFileLoader::init(CachedFile *cachedFileA) { double contentLength = -1; long code = 0; size_t size; - url = urlA; cachedFile = cachedFileA; curl = curl_easy_init(); - curl_easy_setopt(curl, CURLOPT_URL, url->c_str()); + curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_HEADER, 1); curl_easy_setopt(curl, CURLOPT_NOBODY, 1); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &noop_cb); @@ -55,7 +53,7 @@ size_t CurlCachedFileLoader::init(GooString *urlA, CachedFile *cachedFileA) curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &contentLength); size = contentLength; } else { - error(errInternal, -1, "Failed to get size of '{0:t}'.", url); + error(errInternal, -1, "Failed to get size of '{0:s}'.", url.c_str()); size = -1; } curl_easy_reset(curl); @@ -79,7 +77,7 @@ int CurlCachedFileLoader::load(const std::vector<ByteRange> &ranges, CachedFileW toByte = fromByte + bRange.length - 1; const std::unique_ptr<GooString> range = GooString::format("{0:ulld}-{1:ulld}", fromByte, toByte); - curl_easy_setopt(curl, CURLOPT_URL, url->c_str()); + curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, load_cb); curl_easy_setopt(curl, CURLOPT_WRITEDATA, writer); curl_easy_setopt(curl, CURLOPT_RANGE, range->c_str()); diff --git a/poppler/CurlCachedFile.h b/poppler/CurlCachedFile.h index b3bf77b2..752b7005 100644 --- a/poppler/CurlCachedFile.h +++ b/poppler/CurlCachedFile.h @@ -5,7 +5,7 @@ // This file is licensed under the GPLv2 or later // // Copyright 2010 Hib Eris <[email protected]> -// Copyright 2010 Albert Astals Cid <[email protected]> +// Copyright 2010, 2022 Albert Astals Cid <[email protected]> // //======================================================================== @@ -23,13 +23,13 @@ class CurlCachedFileLoader : public CachedFileLoader { public: - CurlCachedFileLoader(); + explicit CurlCachedFileLoader(const std::string &urlA); ~CurlCachedFileLoader() override; - size_t init(GooString *url, CachedFile *cachedFile) override; + size_t init(CachedFile *cachedFile) override; int load(const std::vector<ByteRange> &ranges, CachedFileWriter *writer) override; private: - GooString *url; + const std::string url; CachedFile *cachedFile; CURL *curl; }; diff --git a/poppler/CurlPDFDocBuilder.cc b/poppler/CurlPDFDocBuilder.cc index 491711ca..57ae7a50 100644 --- a/poppler/CurlPDFDocBuilder.cc +++ b/poppler/CurlPDFDocBuilder.cc @@ -24,7 +24,7 @@ std::unique_ptr<PDFDoc> CurlPDFDocBuilder::buildPDFDoc(const GooString &uri, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword, void *guiDataA) { - CachedFile *cachedFile = new CachedFile(new CurlCachedFileLoader(), uri.copy()); + CachedFile *cachedFile = new CachedFile(new CurlCachedFileLoader(uri.toStr())); if (cachedFile->getLength() == ((unsigned int)-1)) { cachedFile->decRefCnt(); diff --git a/poppler/FDPDFDocBuilder.cc b/poppler/FDPDFDocBuilder.cc index 9a464059..dcfbbacc 100644 --- a/poppler/FDPDFDocBuilder.cc +++ b/poppler/FDPDFDocBuilder.cc @@ -51,7 +51,7 @@ std::unique_ptr<PDFDoc> FileDescriptorPDFDocBuilder::buildPDFDoc(const GooString return {}; } - CachedFile *cachedFile = new CachedFile(new FILECacheLoader(file), nullptr); + CachedFile *cachedFile = new CachedFile(new FILECacheLoader(file)); return std::make_unique<PDFDoc>(new CachedFileStream(cachedFile, 0, false, cachedFile->getLength(), Object(objNull)), ownerPassword, userPassword); } diff --git a/poppler/FILECacheLoader.cc b/poppler/FILECacheLoader.cc index 74169ed7..4deb2ff6 100644 --- a/poppler/FILECacheLoader.cc +++ b/poppler/FILECacheLoader.cc @@ -5,7 +5,7 @@ // This file is licensed under the GPLv2 or later // // Copyright 2010 Hib Eris <[email protected]> -// Copyright 2010 Albert Astals Cid <[email protected]> +// Copyright 2010, 2022 Albert Astals Cid <[email protected]> // Copyright 2010 Jonathan Liu <[email protected]> // Copyright 2021 Peter Williams <[email protected]> // Copyright 2021 Christian Persch <[email protected]> @@ -28,7 +28,7 @@ FILECacheLoader::~FILECacheLoader() } } -size_t FILECacheLoader::init(GooString *dummy, CachedFile *cachedFile) +size_t FILECacheLoader::init(CachedFile *cachedFile) { size_t read, size = 0; char buf[CachedFileChunkSize]; diff --git a/poppler/FILECacheLoader.h b/poppler/FILECacheLoader.h index 09167eba..6662ebcf 100644 --- a/poppler/FILECacheLoader.h +++ b/poppler/FILECacheLoader.h @@ -5,7 +5,7 @@ // This file is licensed under the GPLv2 or later // // Copyright 2010 Hib Eris <[email protected]> -// Copyright 2010 Albert Astals Cid <[email protected]> +// Copyright 2010, 2022 Albert Astals Cid <[email protected]> // Copyright 2021 Christian Persch <[email protected]> // //======================================================================== @@ -27,7 +27,7 @@ public: explicit FILECacheLoader(FILE *fileA) : file(fileA) { } - size_t init(GooString *dummy, CachedFile *cachedFile) override; + size_t init(CachedFile *cachedFile) override; int load(const std::vector<ByteRange> &ranges, CachedFileWriter *writer) override; };
