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

Reply via email to