diff options
Diffstat (limited to 'glib/poppler-document.cc')
-rw-r--r-- | glib/poppler-document.cc | 52 |
1 files changed, 14 insertions, 38 deletions
diff --git a/glib/poppler-document.cc b/glib/poppler-document.cc index 00991937..7da76987 100644 --- a/glib/poppler-document.cc +++ b/glib/poppler-document.cc @@ -159,16 +159,15 @@ static PopplerDocument *_poppler_document_new_from_pdfdoc(std::unique_ptr<Global return document; } -static GooString *poppler_password_to_latin1(const gchar *password) +static std::optional<GooString> poppler_password_to_latin1(const gchar *password) { gchar *password_latin; - GooString *password_g; if (!password) - return nullptr; + return {}; password_latin = g_convert(password, -1, "ISO-8859-1", "UTF-8", nullptr, nullptr, nullptr); - password_g = new GooString(password_latin); + std::optional<GooString> password_g = GooString(password_latin); g_free(password_latin); return password_g; @@ -189,7 +188,6 @@ static GooString *poppler_password_to_latin1(const gchar *password) PopplerDocument *poppler_document_new_from_file(const char *uri, const char *password, GError **error) { PDFDoc *newDoc; - GooString *password_g; char *filename; auto initer = std::make_unique<GlobalParamsIniter>(_poppler_error_cb); @@ -198,7 +196,7 @@ PopplerDocument *poppler_document_new_from_file(const char *uri, const char *pas if (!filename) return nullptr; - password_g = poppler_password_to_latin1(password); + const std::optional<GooString> password_g = poppler_password_to_latin1(password); #ifdef G_OS_WIN32 wchar_t *filenameW; @@ -216,9 +214,7 @@ PopplerDocument *poppler_document_new_from_file(const char *uri, const char *pas if (!newDoc->isOk() && newDoc->getErrorCode() == errEncrypted && password) { /* Try again with original password (which comes from GTK in UTF8) Issue #824 */ delete newDoc; - delete password_g; - password_g = new GooString(password); - newDoc = new PDFDoc(filenameW, length, password_g, password_g); + newDoc = new PDFDoc(filenameW, length, GooString(password), GooString(password)); } delete[] filenameW; #else @@ -226,15 +222,11 @@ PopplerDocument *poppler_document_new_from_file(const char *uri, const char *pas if (!newDoc->isOk() && newDoc->getErrorCode() == errEncrypted && password) { /* Try again with original password (which comes from GTK in UTF8) Issue #824 */ delete newDoc; - delete password_g; - password_g = new GooString(password); - newDoc = new PDFDoc(std::make_unique<GooString>(filename), password_g, password_g); + newDoc = new PDFDoc(std::make_unique<GooString>(filename), GooString(password), GooString(password)); } #endif g_free(filename); - delete password_g; - return _poppler_document_new_from_pdfdoc(std::move(initer), newDoc, error); } @@ -262,24 +254,20 @@ PopplerDocument *poppler_document_new_from_data(char *data, int length, const ch { PDFDoc *newDoc; MemStream *str; - GooString *password_g; auto initer = std::make_unique<GlobalParamsIniter>(_poppler_error_cb); // create stream str = new MemStream(data, 0, length, Object(objNull)); - password_g = poppler_password_to_latin1(password); + const std::optional<GooString> password_g = poppler_password_to_latin1(password); newDoc = new PDFDoc(str, password_g, password_g); if (!newDoc->isOk() && newDoc->getErrorCode() == errEncrypted && password) { /* Try again with original password (which comes from GTK in UTF8) Issue #824 */ str = dynamic_cast<MemStream *>(str->copy()); delete newDoc; - delete password_g; - password_g = new GooString(password); - newDoc = new PDFDoc(str, password_g, password_g); + newDoc = new PDFDoc(str, GooString(password), GooString(password)); } - delete password_g; return _poppler_document_new_from_pdfdoc(std::move(initer), newDoc, error); } @@ -315,7 +303,6 @@ PopplerDocument *poppler_document_new_from_bytes(GBytes *bytes, const char *pass { PDFDoc *newDoc; BytesStream *str; - GooString *password_g; g_return_val_if_fail(bytes != nullptr, nullptr); g_return_val_if_fail(error == nullptr || *error == nullptr, nullptr); @@ -325,17 +312,14 @@ PopplerDocument *poppler_document_new_from_bytes(GBytes *bytes, const char *pass // create stream str = new BytesStream(bytes, Object(objNull)); - password_g = poppler_password_to_latin1(password); + const std::optional<GooString> password_g = poppler_password_to_latin1(password); newDoc = new PDFDoc(str, password_g, password_g); if (!newDoc->isOk() && newDoc->getErrorCode() == errEncrypted && password) { /* Try again with original password (which comes from GTK in UTF8) Issue #824 */ str = dynamic_cast<BytesStream *>(str->copy()); delete newDoc; - delete password_g; - password_g = new GooString(password); - newDoc = new PDFDoc(str, password_g, password_g); + newDoc = new PDFDoc(str, GooString(password), GooString(password)); } - delete password_g; return _poppler_document_new_from_pdfdoc(std::move(initer), newDoc, error); } @@ -367,7 +351,6 @@ PopplerDocument *poppler_document_new_from_stream(GInputStream *stream, goffset { PDFDoc *newDoc; BaseStream *str; - GooString *password_g; g_return_val_if_fail(G_IS_INPUT_STREAM(stream), NULL); g_return_val_if_fail(length == (goffset)-1 || length > 0, NULL); @@ -393,17 +376,14 @@ PopplerDocument *poppler_document_new_from_stream(GInputStream *stream, goffset str = new CachedFileStream(cachedFile, 0, false, cachedFile->getLength(), Object(objNull)); } - password_g = poppler_password_to_latin1(password); + const std::optional<GooString> password_g = poppler_password_to_latin1(password); newDoc = new PDFDoc(str, password_g, password_g); if (!newDoc->isOk() && newDoc->getErrorCode() == errEncrypted && password) { /* Try again with original password (which comes from GTK in UTF8) Issue #824 */ str = str->copy(); delete newDoc; - delete password_g; - password_g = new GooString(password); - newDoc = new PDFDoc(str, password_g, password_g); + newDoc = new PDFDoc(str, GooString(password), GooString(password)); } - delete password_g; return _poppler_document_new_from_pdfdoc(std::move(initer), newDoc, error); } @@ -476,7 +456,6 @@ PopplerDocument *poppler_document_new_from_fd(int fd, const char *password, GErr int flags; BaseStream *stream; PDFDoc *newDoc; - GooString *password_g; g_return_val_if_fail(fd != -1, nullptr); @@ -521,17 +500,14 @@ PopplerDocument *poppler_document_new_from_fd(int fd, const char *password, GErr stream = new FileStream(file, 0, false, file->size(), Object(objNull)); } - password_g = poppler_password_to_latin1(password); + const std::optional<GooString> password_g = poppler_password_to_latin1(password); newDoc = new PDFDoc(stream, password_g, password_g); if (!newDoc->isOk() && newDoc->getErrorCode() == errEncrypted && password) { /* Try again with original password (which comes from GTK in UTF8) Issue #824 */ stream = stream->copy(); delete newDoc; - delete password_g; - password_g = new GooString(password); - newDoc = new PDFDoc(stream, password_g, password_g); + newDoc = new PDFDoc(stream, GooString(password), GooString(password)); } - delete password_g; return _poppler_document_new_from_pdfdoc(std::move(initer), newDoc, error); } |