[Libreoffice-commits] core.git: xmlsecurity/qa xmlsecurity/source
Miklos Vajna
vmiklos at collabora.co.uk
Thu Dec 1 19:35:54 UTC 2016
xmlsecurity/qa/unit/pdfsigning/data/small.pdf |binary
xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx | 2 ++
xmlsecurity/source/pdfio/pdfdocument.cxx | 6 +++++-
3 files changed, 7 insertions(+), 1 deletion(-)
New commits:
commit c4cb8b5d1460bbf080366817d26c08685490d541
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Thu Dec 1 17:31:41 2016 +0100
xmlsecurity PDF verify: avoid seeking before the start of the stream
Happened when the doc was smaller than 1024 bytes.
Change-Id: Ie5eea5905a09722e7958495d26e6c78ee234d3ba
Reviewed-on: https://gerrit.libreoffice.org/31500
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
diff --git a/xmlsecurity/qa/unit/pdfsigning/data/small.pdf b/xmlsecurity/qa/unit/pdfsigning/data/small.pdf
new file mode 100644
index 0000000..6067545
Binary files /dev/null and b/xmlsecurity/qa/unit/pdfsigning/data/small.pdf differ
diff --git a/xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx b/xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx
index 6e5e476..fae2a71 100644
--- a/xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx
+++ b/xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx
@@ -394,6 +394,8 @@ void PDFSigningTest::testTokenize()
OUStringLiteral("name-bracket.pdf"),
// %%EOF at the end wasn't followed by a newline.
OUStringLiteral("noeol.pdf"),
+ // File that's intentionally smaller than 1024 bytes.
+ OUStringLiteral("small.pdf"),
};
for (const auto& rName : aNames)
diff --git a/xmlsecurity/source/pdfio/pdfdocument.cxx b/xmlsecurity/source/pdfio/pdfdocument.cxx
index 3adf025..fd36477 100644
--- a/xmlsecurity/source/pdfio/pdfdocument.cxx
+++ b/xmlsecurity/source/pdfio/pdfdocument.cxx
@@ -1392,7 +1392,11 @@ size_t PDFDocument::FindStartXRef(SvStream& rStream)
// Find the "startxref" token, somewhere near the end of the document.
std::vector<char> aBuf(1024);
rStream.Seek(STREAM_SEEK_TO_END);
- rStream.SeekRel(static_cast<sal_Int64>(-1) * aBuf.size());
+ if (rStream.Tell() > aBuf.size())
+ rStream.SeekRel(static_cast<sal_Int64>(-1) * aBuf.size());
+ else
+ // The document is really short, then just read it from the start.
+ rStream.Seek(0);
size_t nBeforePeek = rStream.Tell();
size_t nSize = rStream.ReadBytes(aBuf.data(), aBuf.size());
rStream.Seek(nBeforePeek);
More information about the Libreoffice-commits
mailing list