poppler/PDFDoc.cc | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-)
New commits: commit e491e935ea355d48519cf0a14e4b060655850675 Author: Evangelos Foutras <evange...@foutrelis.com> Date: Mon Apr 2 16:09:34 2018 +0300 Fix PDFDoc::checkHeader() for PDFs smaller than 1 KiB The fix for bug 104502 made it so PDFDoc::checkHeader() would print a warning and return immediatelly if it encounters an EOF while reading the first 1024 bytes. Some PDF files can be smaller than 1024 bytes, for example those used by pdf2djvu's test suite. The latter would fail due to the unexpected warnings. Change the behavior of PDFDoc::checkHeader() when encountering an EOF so it processes the data it has read so far instead of aborting early. https://bugs.freedesktop.org/show_bug.cgi?id=105674 diff --git a/poppler/PDFDoc.cc b/poppler/PDFDoc.cc index 6789c39f..1b3c48e6 100644 --- a/poppler/PDFDoc.cc +++ b/poppler/PDFDoc.cc @@ -38,6 +38,7 @@ // Copyright (C) 2017 Jean Ghali <jgh...@libertysurf.fr> // Copyright (C) 2017 Fredrik Fornwall <fred...@fornwall.net> // Copyright (C) 2018 Ben Timby <bti...@gmail.com> +// Copyright (C) 2018 Evangelos Foutras <evange...@foutrelis.com> // // To see a description of the changes please see the Changelog file that // came with your tarball or type make ChangeLog if you are building from git @@ -409,24 +410,30 @@ void PDFDoc::checkHeader() { char *p; char *tokptr; int i; - int c; + int bytesRead; pdfMajorVersion = 0; pdfMinorVersion = 0; + + // read up to headerSearchSize bytes from the beginning of the document for (i = 0; i < headerSearchSize; ++i) { - if ((c = str->getChar()) == EOF) { - error(errSyntaxWarning, -1, "EOF while reading header (continuing anyway)"); - return; - } + const int c = str->getChar(); + if (c == EOF) + break; hdrBuf[i] = c; } - hdrBuf[headerSearchSize] = '\0'; - for (i = 0; i < headerSearchSize - 5; ++i) { + bytesRead = i; + hdrBuf[bytesRead] = '\0'; + + // find the start of the PDF header if it exists and parse the version + bool headerFound = false; + for (i = 0; i < bytesRead - 5; ++i) { if (!strncmp(&hdrBuf[i], "%PDF-", 5)) { + headerFound = true; break; } } - if (i >= headerSearchSize - 5) { + if (!headerFound) { error(errSyntaxWarning, -1, "May not be a PDF file (continuing anyway)"); return; } _______________________________________________ poppler mailing list poppler@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/poppler