[Libreoffice-commits] core.git: Branch 'libreoffice-6-0' - vcl/source xmlsecurity/qa

Miklos Vajna vmiklos at collabora.co.uk
Tue Jan 23 19:30:44 UTC 2018


 vcl/source/filter/ipdf/pdfdocument.cxx            |    9 +++++++++
 xmlsecurity/qa/unit/pdfsigning/data/tdf114460.pdf |binary
 xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx     |    2 ++
 3 files changed, 11 insertions(+)

New commits:
commit e45ca13634ba51a6133a231f74db76be06bb4d95
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon Jan 22 22:12:04 2018 +0100

    tdf#114460 vcl: handle nested parentheses in PDF roundtrip
    
    The roundtrip of the pdf image failed due to this.
    
    (cherry picked from commit f58a16d5987c8e8c16580c514ce0c7b0895b4105)
    
    Change-Id: I88a9657e242dd2659f9bf06233e5fcbfeb43ceb5
    Reviewed-on: https://gerrit.libreoffice.org/48378
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

diff --git a/vcl/source/filter/ipdf/pdfdocument.cxx b/vcl/source/filter/ipdf/pdfdocument.cxx
index 56e90cf7adf3..11c4519e44cf 100644
--- a/vcl/source/filter/ipdf/pdfdocument.cxx
+++ b/vcl/source/filter/ipdf/pdfdocument.cxx
@@ -2021,11 +2021,20 @@ bool PDFLiteralStringElement::Read(SvStream& rStream)
     nPrevCh = ch;
     rStream.ReadChar(ch);
 
+    // Start with 1 nesting level as we read a '(' above already.
+    int nDepth = 1;
     OStringBuffer aBuf;
     while (!rStream.eof())
     {
+        if (ch == '(' && nPrevCh != '\\')
+            ++nDepth;
+
         if (ch == ')' && nPrevCh != '\\')
+            --nDepth;
+
+        if (nDepth == 0)
         {
+            // ')' of the outermost '(' is reached.
             m_aValue = aBuf.makeStringAndClear();
             SAL_INFO("vcl.filter", "PDFLiteralStringElement::Read: m_aValue is '" << m_aValue << "'");
             return true;
diff --git a/xmlsecurity/qa/unit/pdfsigning/data/tdf114460.pdf b/xmlsecurity/qa/unit/pdfsigning/data/tdf114460.pdf
new file mode 100644
index 000000000000..a736e5bb90cd
Binary files /dev/null and b/xmlsecurity/qa/unit/pdfsigning/data/tdf114460.pdf differ
diff --git a/xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx b/xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx
index 642a034ae5e1..c989af96f1b3 100644
--- a/xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx
+++ b/xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx
@@ -448,6 +448,8 @@ void PDFSigningTest::testTokenize()
         // File that's intentionally smaller than 1024 bytes.
         "small.pdf",
         "tdf107149.pdf",
+        // Nested parentheses were not handled.
+        "tdf114460.pdf",
     };
 
     for (const auto& rName : aNames)


More information about the Libreoffice-commits mailing list