include/vcl/filter/PDFiumLibrary.hxx | 5 ++ vcl/source/pdf/PDFiumLibrary.cxx | 41 +++++++++++++++++++++++ xmlsecurity/source/helper/pdfsignaturehelper.cxx | 28 +-------------- 3 files changed, 47 insertions(+), 27 deletions(-)
New commits: commit 7ca0f29249eb11623c98efdc4fb6d0d7725ff10a Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Wed Nov 25 21:08:32 2020 +0100 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Thu Nov 26 09:06:04 2020 +0100 pdfium: replace PDFiumSignature::getPointer() with typed getters Once reason and time has getters, no need to expose the underlying PDFium type. Change-Id: I8f6b152fddf38e76ad7c3b1897fcb2026129820f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106631 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmik...@collabora.com> diff --git a/include/vcl/filter/PDFiumLibrary.hxx b/include/vcl/filter/PDFiumLibrary.hxx index e14c855780b7..1fe0dd8d988a 100644 --- a/include/vcl/filter/PDFiumLibrary.hxx +++ b/include/vcl/filter/PDFiumLibrary.hxx @@ -12,6 +12,8 @@ #include <config_features.h> +#include <com/sun/star/util/DateTime.hpp> + #if HAVE_FEATURE_PDFIUM #include <vcl/dllapi.h> @@ -241,11 +243,12 @@ private: public: PDFiumSignature(FPDF_SIGNATURE pSignature); - FPDF_SIGNATURE getPointer() { return mpSignature; } std::vector<int> getByteRange(); int getDocMDPPermission(); std::vector<unsigned char> getContents(); OString getSubFilter(); + OUString getReason(); + css::util::DateTime getTime(); }; class VCL_DLLPUBLIC PDFiumDocument final diff --git a/vcl/source/pdf/PDFiumLibrary.cxx b/vcl/source/pdf/PDFiumLibrary.cxx index a1d618e33105..5c308d3e772b 100644 --- a/vcl/source/pdf/PDFiumLibrary.cxx +++ b/vcl/source/pdf/PDFiumLibrary.cxx @@ -27,6 +27,8 @@ #include <bitmapwriteaccess.hxx> +using namespace com::sun::star; + static_assert(static_cast<int>(vcl::pdf::PDFPageObjectType::Unknown) == FPDF_PAGEOBJ_UNKNOWN, "PDFPageObjectType::Unknown value mismatch"); static_assert(static_cast<int>(vcl::pdf::PDFPageObjectType::Text) == FPDF_PAGEOBJ_TEXT, @@ -237,6 +239,45 @@ OString PDFiumSignature::getSubFilter() return aSubFilter; } +OUString PDFiumSignature::getReason() +{ + int nReasonLen = FPDFSignatureObj_GetReason(mpSignature, nullptr, 0); + OUString aRet; + if (nReasonLen > 0) + { + std::vector<char16_t> aReasonBuf(nReasonLen); + FPDFSignatureObj_GetReason(mpSignature, aReasonBuf.data(), aReasonBuf.size()); + aRet = OUString(aReasonBuf.data(), aReasonBuf.size() - 1); + } + + return aRet; +} + +util::DateTime PDFiumSignature::getTime() +{ + util::DateTime aRet; + int nTimeLen = FPDFSignatureObj_GetTime(mpSignature, nullptr, 0); + if (nTimeLen <= 0) + { + return aRet; + } + + // Example: "D:20161027100104". + std::vector<char> aTimeBuf(nTimeLen); + FPDFSignatureObj_GetTime(mpSignature, aTimeBuf.data(), aTimeBuf.size()); + OString aM(aTimeBuf.data(), aTimeBuf.size() - 1); + if (aM.startsWith("D:") && aM.getLength() >= 16) + { + aRet.Year = aM.copy(2, 4).toInt32(); + aRet.Month = aM.copy(6, 2).toInt32(); + aRet.Day = aM.copy(8, 2).toInt32(); + aRet.Hours = aM.copy(10, 2).toInt32(); + aRet.Minutes = aM.copy(12, 2).toInt32(); + aRet.Seconds = aM.copy(14, 2).toInt32(); + } + return aRet; +} + PDFiumDocument::PDFiumDocument(FPDF_DOCUMENT pPdfDocument) : mpPdfDocument(pPdfDocument) { diff --git a/xmlsecurity/source/helper/pdfsignaturehelper.cxx b/xmlsecurity/source/helper/pdfsignaturehelper.cxx index 062dba819adf..cbeba392a932 100644 --- a/xmlsecurity/source/helper/pdfsignaturehelper.cxx +++ b/xmlsecurity/source/helper/pdfsignaturehelper.cxx @@ -366,35 +366,11 @@ bool ValidateSignature(SvStream& rStream, const Signature& rSignature, } // Reason / comment / description is optional. - int nReasonLen = FPDFSignatureObj_GetReason(rSignature.m_pSignature->getPointer(), nullptr, 0); - if (nReasonLen > 0) - { - std::vector<char16_t> aReasonBuf(nReasonLen); - FPDFSignatureObj_GetReason(rSignature.m_pSignature->getPointer(), aReasonBuf.data(), - aReasonBuf.size()); - rInformation.ouDescription = OUString(aReasonBuf.data(), aReasonBuf.size() - 1); - } + rInformation.ouDescription = rSignature.m_pSignature->getReason(); // Date: used only when the time of signing is not available in the // signature. - int nTimeLen = FPDFSignatureObj_GetTime(rSignature.m_pSignature->getPointer(), nullptr, 0); - if (nTimeLen > 0) - { - // Example: "D:20161027100104". - std::vector<char> aTimeBuf(nTimeLen); - FPDFSignatureObj_GetTime(rSignature.m_pSignature->getPointer(), aTimeBuf.data(), - aTimeBuf.size()); - OString aM(aTimeBuf.data(), aTimeBuf.size() - 1); - if (aM.startsWith("D:") && aM.getLength() >= 16) - { - rInformation.stDateTime.Year = aM.copy(2, 4).toInt32(); - rInformation.stDateTime.Month = aM.copy(6, 2).toInt32(); - rInformation.stDateTime.Day = aM.copy(8, 2).toInt32(); - rInformation.stDateTime.Hours = aM.copy(10, 2).toInt32(); - rInformation.stDateTime.Minutes = aM.copy(12, 2).toInt32(); - rInformation.stDateTime.Seconds = aM.copy(14, 2).toInt32(); - } - } + rInformation.stDateTime = rSignature.m_pSignature->getTime(); // Detect if the byte ranges don't cover everything, but the signature itself. if (rSignature.m_aByteRanges.size() < 2) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits