Hello community, here is the log from the commit of package qpdf for openSUSE:Factory checked in at 2012-08-12 15:27:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qpdf (Old) and /work/SRC/openSUSE:Factory/.qpdf.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qpdf", Maintainer is "" Changes: -------- --- /work/SRC/openSUSE:Factory/qpdf/qpdf.changes 2012-08-04 09:31:36.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.qpdf.new/qpdf.changes 2012-08-12 15:28:01.000000000 +0200 @@ -1,0 +2,8 @@ +Sat Aug 11 19:25:13 UTC 2012 - idon...@suse.com + +- Update to version 3.0.1 + * qpdf may falsely report premature EOF when reading files that + have object streams that end with scalars not followed by + whitespace. + +------------------------------------------------------------------- Old: ---- qpdf-3.0.0.tar.gz New: ---- qpdf-3.0.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qpdf.spec ++++++ --- /var/tmp/diff_new_pack.jAoiWl/_old 2012-08-12 15:28:04.000000000 +0200 +++ /var/tmp/diff_new_pack.jAoiWl/_new 2012-08-12 15:28:04.000000000 +0200 @@ -17,7 +17,7 @@ Name: qpdf -Version: 3.0.0 +Version: 3.0.1 Release: 0 Summary: Command-line tools and library for transforming PDF files License: Artistic-2.0 ++++++ qpdf-3.0.0.tar.gz -> qpdf-3.0.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpdf-3.0.0/ChangeLog new/qpdf-3.0.1/ChangeLog --- old/qpdf-3.0.0/ChangeLog 2012-08-02 12:52:33.000000000 +0200 +++ new/qpdf-3.0.1/ChangeLog 2012-08-11 19:41:18.000000000 +0200 @@ -1,3 +1,10 @@ +2012-08-11 Jay Berkenbilt <e...@ql.org> + + * 3.0.1: release + + * Bug fix: let EOF terminate a literal token as well as + whitespace or comments. + 2012-07-31 Jay Berkenbilt <e...@ql.org> * 3.0.0: release diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpdf-3.0.0/TODO new/qpdf-3.0.1/TODO --- old/qpdf-3.0.0/TODO 2012-08-02 12:52:33.000000000 +0200 +++ new/qpdf-3.0.1/TODO 2012-08-11 19:41:18.000000000 +0200 @@ -173,3 +173,6 @@ * From a suggestion in bug 3152169, consider having an option to re-encode inline images with an ASCII encoding. + + * From github issue 2, provide more in-depth output for examining + hint stream contents. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpdf-3.0.0/configure new/qpdf-3.0.1/configure --- old/qpdf-3.0.0/configure 2012-08-02 12:54:14.000000000 +0200 +++ new/qpdf-3.0.1/configure 2012-08-11 19:41:38.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for qpdf 3.0.0. +# Generated by GNU Autoconf 2.69 for qpdf 3.0.1. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -587,8 +587,8 @@ # Identity of this package. PACKAGE_NAME='qpdf' PACKAGE_TARNAME='qpdf' -PACKAGE_VERSION='3.0.0' -PACKAGE_STRING='qpdf 3.0.0' +PACKAGE_VERSION='3.0.1' +PACKAGE_STRING='qpdf 3.0.1' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1307,7 +1307,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures qpdf 3.0.0 to adapt to many kinds of systems. +\`configure' configures qpdf 3.0.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1372,7 +1372,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of qpdf 3.0.0:";; + short | recursive ) echo "Configuration of qpdf 3.0.1:";; esac cat <<\_ACEOF @@ -1506,7 +1506,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -qpdf configure 3.0.0 +qpdf configure 3.0.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2046,7 +2046,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by qpdf $as_me 3.0.0, which was +It was created by qpdf $as_me 3.0.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -16390,7 +16390,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by qpdf $as_me 3.0.0, which was +This file was extended by qpdf $as_me 3.0.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -16456,7 +16456,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -qpdf config.status 3.0.0 +qpdf config.status 3.0.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpdf-3.0.0/configure.ac new/qpdf-3.0.1/configure.ac --- old/qpdf-3.0.0/configure.ac 2012-08-02 12:52:33.000000000 +0200 +++ new/qpdf-3.0.1/configure.ac 2012-08-11 19:41:18.000000000 +0200 @@ -2,7 +2,7 @@ dnl This config.in requires autoconf 2.5 or greater. AC_PREREQ([2.68]) -AC_INIT([qpdf],[3.0.0]) +AC_INIT([qpdf],[3.0.1]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_FILES([autoconf.mk]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpdf-3.0.0/doc/qpdf-manual.html new/qpdf-3.0.1/doc/qpdf-manual.html --- old/qpdf-3.0.0/doc/qpdf-manual.html 2012-08-02 12:54:18.000000000 +0200 +++ new/qpdf-3.0.1/doc/qpdf-manual.html 2012-08-11 19:41:43.000000000 +0200 @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>QPDF Manual</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /></head><body><div class="book" title="QPDF Manual"><div class="titlepage"><div><div><h1 class="title"><a id="idm5792016"></a>QPDF Manual</h1></div><div><h2 class="subtitle">For QPDF Version 3.0.0, August 2, 2012</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jay</span> <span class="surname">Berkenbilt</span></h3></div></div><div><p class="copyright">Copyright © 2005–2012 Jay Berkenbilt</p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="preface"><a href="#acknowledgments">General Information</a></span></dt><dt><span class="chapter"><a href="#ref.overview">1. What is QPDF?</a></span></dt><dt><span class="chapter"><a href="#ref.installing">2. Building and Installing QPDF</a></span></dt><dd><dl><dt><span class="sect1"><a href="#ref.prerequisites">2.1. System Requirements</a></span></dt><dt><span class="sect1"><a href="#ref.building">2.2. Build Instructions</a></span></dt></dl></dd><dt><span class="chapter"><a href="#ref.using">3. Running QPDF</a></span></dt><dd><dl><dt><span class="sect1"><a href="#ref.invocation">3.1. Basic Invocation</a></span></dt><dt><span class="sect1"><a href="#ref.basic-options">3.2. Basic Options</a></span></dt><dt><span class="sect1"><a href="#ref.encryption-options">3.3. Encryption Options</a></span></dt><dt><span class="sect1"><a href="#ref.page-selection">3.4. Page Selection Options</a></span></dt><dt><span class="sect1"><a href="#ref.advanced-transformation">3.5. Advanced Transformation Options</a></span></dt><dt><span class="sect1"><a href="#ref.testing-options">3.6. Testing, Inspection, and Debugging Options</a></span></dt></dl></dd><dt><span class="chapter"><a href="#ref.qdf">4. QDF Mode</a></span></dt><dt><span class="chapter"><a href="#ref.using-library">5. Using the QPDF Library</a></span></dt><dt><span class="chapter"><a href="#ref.design">6. Design and Library Notes</a></span></dt><dd><dl><dt><span class="sect1"><a href="#ref.design.intro">6.1. Introduction</a></span></dt><dt><span class="sect1"><a href="#ref.design-goals">6.2. Design Goals</a></span></dt><dt><span class="sect1"><a href="#ref.encryption">6.3. Encryption</a></span></dt><dt><span class="sect1"><a href="#ref.adding-and-remove-pages">6.4. Adding and Removing Pages</a></span></dt><dt><span class="sect1"><a href="#ref.reserved-objects">6.5. Reserving Object Numbers</a></span></dt><dt><span class="sect1"><a href="#ref.foreign-objects">6.6. Copying Objects From Other PDF Files</a></span></dt><dt><span class="sect1"><a href="#ref.rewriting">6.7. Writing PDF Files</a></span></dt><dt><span class="sect1"><a href="#ref.filtered-streams">6.8. Filtered Streams</a></span></dt></dl></dd><dt><span class="chapter"><a href="#ref.linearization">7. Linearization</a></span></dt><dd><dl><dt><span class="sect1"><a href="#ref.linearization-strategy">7.1. Basic Strategy for Linearization</a></span></dt><dt><span class="sect1"><a href="#ref.linearized.preparation">7.2. Preparing For Linearization</a></span></dt><dt><span class="sect1"><a href="#ref.optimization">7.3. Optimization</a></span></dt><dt><span class="sect1"><a href="#ref.linearization.writing">7.4. Writing Linearized Files</a></span></dt><dt><span class="sect1"><a href="#ref.linearization-data">7.5. Calculating Linearization Data</a></span></dt><dt><span class="sect1"><a href="#ref.linearization-issues">7.6. Known Issues with Linearization</a></span></dt><dt><span class="sect1"><a href="#ref.linearization-debugging">7.7. Debugging Note</a></span></dt></dl></dd><dt><span class="chapter"><a href="#ref.object-and-xref-streams">8. Object and Cross-Reference Streams</a></span></dt><dd><dl><dt><span class="sect1"><a href="#ref.object-streams">8.1. Object Streams</a></span></dt><dt><span class="sect1"><a href="#ref.xref-streams">8.2. Cross-Reference Streams</a></span></dt><dd><dl><dt><span class="sect2"><a href="#ref.xref-stream-data">8.2.1. Cross-Reference Stream Data</a></span></dt></dl></dd><dt><span class="sect1"><a href="#ref.object-streams-linearization">8.3. Implications for Linearized Files</a></span></dt><dt><span class="sect1"><a href="#ref.object-stream-implementation">8.4. Implementation Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="#ref.release-notes">A. Release Notes</a></span></dt><dt><span class="appendix"><a href="#ref.upgrading-to-2.1">B. Upgrading from 2.0 to 2.1</a></span></dt><dt><span class="appendix"><a href="#ref.upgrading-to-3.0">C. Upgrading to 3.0</a></span></dt></dl></div><div class="preface" title="General Information"><div class="titlepage"><div><div><h2 class="title"><a id="acknowledgments"></a>General Information</h2></div></div></div><p> +<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>QPDF Manual</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /></head><body><div class="book" title="QPDF Manual"><div class="titlepage"><div><div><h1 class="title"><a id="idm5528432"></a>QPDF Manual</h1></div><div><h2 class="subtitle">For QPDF Version 3.0.1, August 11, 2012</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jay</span> <span class="surname">Berkenbilt</span></h3></div></div><div><p class="copyright">Copyright © 2005–2012 Jay Berkenbilt</p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="preface"><a href="#acknowledgments">General Information</a></span></dt><dt><span class="chapter"><a href="#ref.overview">1. What is QPDF?</a></span></dt><dt><span class="chapter"><a href="#ref.installing">2. Building and Installing QPDF</a></span></dt><dd><dl><dt><span class="sect1"><a href="#ref.prerequisites">2.1. System Requirements</a></span></dt><dt><span class="sect1"><a href="#ref.building">2.2. Build Instructions</a></span></dt></dl></dd><dt><span class="chapter"><a href="#ref.using">3. Running QPDF</a></span></dt><dd><dl><dt><span class="sect1"><a href="#ref.invocation">3.1. Basic Invocation</a></span></dt><dt><span class="sect1"><a href="#ref.basic-options">3.2. Basic Options</a></span></dt><dt><span class="sect1"><a href="#ref.encryption-options">3.3. Encryption Options</a></span></dt><dt><span class="sect1"><a href="#ref.page-selection">3.4. Page Selection Options</a></span></dt><dt><span class="sect1"><a href="#ref.advanced-transformation">3.5. Advanced Transformation Options</a></span></dt><dt><span class="sect1"><a href="#ref.testing-options">3.6. Testing, Inspection, and Debugging Options</a></span></dt></dl></dd><dt><span class="chapter"><a href="#ref.qdf">4. QDF Mode</a></span></dt><dt><span class="chapter"><a href="#ref.using-library">5. Using the QPDF Library</a></span></dt><dt><span class="chapter"><a href="#ref.design">6. Design and Library Notes</a></span></dt><dd><dl><dt><span class="sect1"><a href="#ref.design.intro">6.1. Introduction</a></span></dt><dt><span class="sect1"><a href="#ref.design-goals">6.2. Design Goals</a></span></dt><dt><span class="sect1"><a href="#ref.encryption">6.3. Encryption</a></span></dt><dt><span class="sect1"><a href="#ref.adding-and-remove-pages">6.4. Adding and Removing Pages</a></span></dt><dt><span class="sect1"><a href="#ref.reserved-objects">6.5. Reserving Object Numbers</a></span></dt><dt><span class="sect1"><a href="#ref.foreign-objects">6.6. Copying Objects From Other PDF Files</a></span></dt><dt><span class="sect1"><a href="#ref.rewriting">6.7. Writing PDF Files</a></span></dt><dt><span class="sect1"><a href="#ref.filtered-streams">6.8. Filtered Streams</a></span></dt></dl></dd><dt><span class="chapter"><a href="#ref.linearization">7. Linearization</a></span></dt><dd><dl><dt><span class="sect1"><a href="#ref.linearization-strategy">7.1. Basic Strategy for Linearization</a></span></dt><dt><span class="sect1"><a href="#ref.linearized.preparation">7.2. Preparing For Linearization</a></span></dt><dt><span class="sect1"><a href="#ref.optimization">7.3. Optimization</a></span></dt><dt><span class="sect1"><a href="#ref.linearization.writing">7.4. Writing Linearized Files</a></span></dt><dt><span class="sect1"><a href="#ref.linearization-data">7.5. Calculating Linearization Data</a></span></dt><dt><span class="sect1"><a href="#ref.linearization-issues">7.6. Known Issues with Linearization</a></span></dt><dt><span class="sect1"><a href="#ref.linearization-debugging">7.7. Debugging Note</a></span></dt></dl></dd><dt><span class="chapter"><a href="#ref.object-and-xref-streams">8. Object and Cross-Reference Streams</a></span></dt><dd><dl><dt><span class="sect1"><a href="#ref.object-streams">8.1. Object Streams</a></span></dt><dt><span class="sect1"><a href="#ref.xref-streams">8.2. Cross-Reference Streams</a></span></dt><dd><dl><dt><span class="sect2"><a href="#ref.xref-stream-data">8.2.1. Cross-Reference Stream Data</a></span></dt></dl></dd><dt><span class="sect1"><a href="#ref.object-streams-linearization">8.3. Implications for Linearized Files</a></span></dt><dt><span class="sect1"><a href="#ref.object-stream-implementation">8.4. Implementation Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="#ref.release-notes">A. Release Notes</a></span></dt><dt><span class="appendix"><a href="#ref.upgrading-to-2.1">B. Upgrading from 2.0 to 2.1</a></span></dt><dt><span class="appendix"><a href="#ref.upgrading-to-3.0">C. Upgrading to 3.0</a></span></dt></dl></div><div class="preface" title="General Information"><div class="titlepage"><div><div><h2 class="title"><a id="acknowledgments"></a>General Information</h2></div></div></div><p> QPDF is a program that does structural, content-preserving transformations on PDF files. QPDF's website is located at <a class="ulink" href="http://qpdf.sourceforge.net/" target="_top">http://qpdf.sourceforge.net/</a>. QPDF's source code is hosted on github at <a class="ulink" href="https://github.com/qpdf/qpdf" target="_top">https://github.com/qpdf/qpdf</a>. @@ -927,7 +927,7 @@ password-protected files. QPDF does not enforce encryption parameters and will treat user and owner passwords equivalently. Either password may be used to access an encrypted file. - <sup>[<a id="idp382528" href="#ftn.idp382528" class="footnote">1</a>]</sup> + <sup>[<a id="idp506000" href="#ftn.idp506000" class="footnote">1</a>]</sup> <code class="classname">QPDF</code> will allow recovery of a user password given an owner password. The input PDF file must be seekable. (Output files written by <code class="classname">QPDFWriter</code> need @@ -1222,7 +1222,7 @@ filter should write to whatever type of output is required. The <code class="classname">QPDF</code> class has an interface to write raw or filtered stream contents to a given pipeline. - </p></div><div class="footnotes"><br /><hr width="100" align="left" /><div class="footnote"><p><sup>[<a id="ftn.idp382528" href="#idp382528" class="para">1</a>] </sup> + </p></div><div class="footnotes"><br /><hr width="100" align="left" /><div class="footnote"><p><sup>[<a id="ftn.idp506000" href="#idp506000" class="para">1</a>] </sup> As pointed out earlier, the intention is not for qpdf to be used to bypass security on files. but as any open source PDF consumer may be easily modified to bypass basic PDF document security, @@ -1585,7 +1585,17 @@ </p></div></div><div class="appendix" title="Appendix A. Release Notes"><div class="titlepage"><div><div><h2 class="title"><a id="ref.release-notes"></a>Appendix A. Release Notes</h2></div></div></div><p> For a detailed list of changes, please see the file <code class="filename">ChangeLog</code> in the source distribution. - </p><div class="variablelist"><dl><dt><span class="term">3.0.0: August 2, 2012</span></dt><dd><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p> + </p><div class="variablelist"><dl><dt><span class="term">3.0.1: August 11, 2012</span></dt><dd><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p> + Version 3.0.0 included addition of files for + <span class="command"><strong>pkg-config</strong></span>, but this was not mentioned in + the release notes. The release notes for 3.0.0 were updated + to mention this. + </p></li><li class="listitem"><p> + Bug fix: if an object stream ended with a scalar object not + followed by space, qpdf would incorrectly report that it + encountered a premature EOF. This bug has been in qpdf since + version 2.0. + </p></li></ul></div></dd></dl></div><div class="variablelist"><dl><dt><span class="term">3.0.0: August 2, 2012</span></dt><dd><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p> Acknowledgment: I would like to express gratitude for the contributions of Tobias Hoffmann toward the release of qpdf version 3.0. He is responsible for most of the implementation @@ -1658,6 +1668,9 @@ <code class="option">--disable-ld-version-script</code> to <span class="command"><strong>./configure</strong></span>. </p></li><li class="listitem"><p> + The file <code class="filename">libqpdf.pc</code> is now installed to + support <span class="command"><strong>pkg-config</strong></span>. + </p></li><li class="listitem"><p> Image comparison tests are off by default now since they are not needed to verify a correct build or port of qpdf. They are needed only when changing the actual PDF output generated Files old/qpdf-3.0.0/doc/qpdf-manual.pdf and new/qpdf-3.0.1/doc/qpdf-manual.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpdf-3.0.0/include/qpdf/QPDFTokenizer.hh new/qpdf-3.0.1/include/qpdf/QPDFTokenizer.hh --- old/qpdf-3.0.0/include/qpdf/QPDFTokenizer.hh 2012-08-02 12:52:33.000000000 +0200 +++ new/qpdf-3.0.1/include/qpdf/QPDFTokenizer.hh 2012-08-11 19:41:18.000000000 +0200 @@ -133,6 +133,7 @@ private: void reset(); + void resolveLiteral(); // Lexer state enum { st_top, st_in_comment, st_in_string, st_lt, st_gt, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpdf-3.0.0/libqpdf/QPDF.cc new/qpdf-3.0.1/libqpdf/QPDF.cc --- old/qpdf-3.0.0/libqpdf/QPDF.cc 2012-08-02 12:52:33.000000000 +0200 +++ new/qpdf-3.0.1/libqpdf/QPDF.cc 2012-08-11 19:41:18.000000000 +0200 @@ -18,7 +18,7 @@ #include <qpdf/QPDF_Null.hh> #include <qpdf/QPDF_Dictionary.hh> -std::string QPDF::qpdf_version = "3.0.0"; +std::string QPDF::qpdf_version = "3.0.1"; static char const* EMPTY_PDF = "%PDF-1.3\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpdf-3.0.0/libqpdf/QPDFTokenizer.cc new/qpdf-3.0.1/libqpdf/QPDFTokenizer.cc --- old/qpdf-3.0.0/libqpdf/QPDFTokenizer.cc 2012-08-02 12:52:33.000000000 +0200 +++ new/qpdf-3.0.1/libqpdf/QPDFTokenizer.cc 2012-08-11 19:41:18.000000000 +0200 @@ -50,10 +50,90 @@ } void -QPDFTokenizer::presentCharacter(char ch) +QPDFTokenizer::resolveLiteral() { PCRE num_re("^[\\+\\-]?(?:\\.\\d+|\\d+(?:\\.\\d+)?)$"); + if ((val.length() > 0) && (val[0] == '/')) + { + type = tt_name; + // Deal with # in name token. Note: '/' by itself is a + // valid name, so don't strip leading /. That way we + // don't have to deal with the empty string as a name. + std::string nval = "/"; + char const* valstr = val.c_str() + 1; + for (char const* p = valstr; *p; ++p) + { + if ((*p == '#') && this->pound_special_in_name) + { + if (p[1] && p[2] && + is_hex_digit(p[1]) && is_hex_digit(p[2])) + { + char num[3]; + num[0] = p[1]; + num[1] = p[2]; + num[2] = '\0'; + char ch = (char)(strtol(num, 0, 16)); + if (ch == '\0') + { + type = tt_bad; + QTC::TC("qpdf", "QPDF_Tokenizer null in name"); + error_message = + "null character not allowed in name token"; + nval += "#00"; + } + else + { + nval += ch; + } + p += 2; + } + else + { + QTC::TC("qpdf", "QPDF_Tokenizer bad name"); + type = tt_bad; + error_message = "invalid name token"; + nval += *p; + } + } + else + { + nval += *p; + } + } + val = nval; + } + else if (num_re.match(val.c_str())) + { + if (val.find('.') != std::string::npos) + { + type = tt_real; + } + else + { + type = tt_integer; + } + } + else if ((val == "true") || (val == "false")) + { + type = tt_bool; + } + else if (val == "null") + { + type = tt_null; + } + else + { + // I don't really know what it is, so leave it as tt_word. + // Lots of cases ($, #, etc.) other than actual words fall + // into this category, but that's okay at least for now. + type = tt_word; + } +} + +void +QPDFTokenizer::presentCharacter(char ch) +{ if (state == st_token_ready) { throw std::logic_error( @@ -342,81 +422,7 @@ if ((state == st_token_ready) && (type == tt_word)) { - if ((val.length() > 0) && (val[0] == '/')) - { - type = tt_name; - // Deal with # in name token. Note: '/' by itself is a - // valid name, so don't strip leading /. That way we - // don't have to deal with the empty string as a name. - std::string nval = "/"; - char const* valstr = val.c_str() + 1; - for (char const* p = valstr; *p; ++p) - { - if ((*p == '#') && this->pound_special_in_name) - { - if (p[1] && p[2] && - is_hex_digit(p[1]) && is_hex_digit(p[2])) - { - char num[3]; - num[0] = p[1]; - num[1] = p[2]; - num[2] = '\0'; - char ch = (char)(strtol(num, 0, 16)); - if (ch == '\0') - { - type = tt_bad; - QTC::TC("qpdf", "QPDF_Tokenizer null in name"); - error_message = - "null character not allowed in name token"; - nval += "#00"; - } - else - { - nval += ch; - } - p += 2; - } - else - { - QTC::TC("qpdf", "QPDF_Tokenizer bad name"); - type = tt_bad; - error_message = "invalid name token"; - nval += *p; - } - } - else - { - nval += *p; - } - } - val = nval; - } - else if (num_re.match(val.c_str())) - { - if (val.find('.') != std::string::npos) - { - type = tt_real; - } - else - { - type = tt_integer; - } - } - else if ((val == "true") || (val == "false")) - { - type = tt_bool; - } - else if (val == "null") - { - type = tt_null; - } - else - { - // I don't really know what it is, so leave it as tt_word. - // Lots of cases ($, #, etc.) other than actual words fall - // into this category, but that's okay at least for now. - type = tt_word; - } + resolveLiteral(); } if (! (betweenTokens() || ((state == st_token_ready) && unread_char))) @@ -428,22 +434,19 @@ void QPDFTokenizer::presentEOF() { - switch (state) + if (state == st_literal) { - case st_token_ready: - case st_top: - // okay - break; - - case st_in_comment: - state = st_top; - break; - - default: + QTC::TC("qpdf", "QPDF_Tokenizer EOF reading appendable token"); + resolveLiteral(); + } + else if (state != st_token_ready) + { + QTC::TC("qpdf", "QPDF_Tokenizer EOF reading token"); type = tt_bad; error_message = "EOF while reading token"; - state = st_token_ready; } + + state = st_token_ready; } bool @@ -474,14 +477,22 @@ Token token; bool unread_char; char char_to_unread; + bool presented_eof = false; while (! getToken(token, unread_char, char_to_unread)) { char ch; if (input->read(&ch, 1) == 0) { - throw QPDFExc(qpdf_e_damaged_pdf, input->getName(), - context, offset, - "EOF while reading token"); + if (! presented_eof) + { + presentEOF(); + presented_eof = true; + } + else + { + throw std::logic_error( + "getToken returned false after presenting EOF"); + } } else { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpdf-3.0.0/libqpdf/build.mk new/qpdf-3.0.1/libqpdf/build.mk --- old/qpdf-3.0.0/libqpdf/build.mk 2012-08-02 12:52:33.000000000 +0200 +++ new/qpdf-3.0.1/libqpdf/build.mk 2012-08-11 19:41:18.000000000 +0200 @@ -80,4 +80,4 @@ # * Otherwise, increment REVISION $(TARGETS_libqpdf): $(OBJS_libqpdf) - $(call makelib,$(OBJS_libqpdf),$@,$(LDFLAGS),$(LIBS),8,1,0) + $(call makelib,$(OBJS_libqpdf),$@,$(LDFLAGS),$(LIBS),8,2,0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpdf-3.0.0/manual/qpdf-manual.xml new/qpdf-3.0.1/manual/qpdf-manual.xml --- old/qpdf-3.0.0/manual/qpdf-manual.xml 2012-08-02 12:52:33.000000000 +0200 +++ new/qpdf-3.0.1/manual/qpdf-manual.xml 2012-08-11 19:41:18.000000000 +0200 @@ -5,8 +5,8 @@ <!ENTITY mdash "—"> <!ENTITY ndash "–"> <!ENTITY nbsp " "> -<!ENTITY swversion "3.0.0"> -<!ENTITY lastreleased "August 2, 2012"> +<!ENTITY swversion "3.0.1"> +<!ENTITY lastreleased "August 11, 2012"> ]> <book> <bookinfo> @@ -2383,6 +2383,31 @@ </para> <variablelist> <varlistentry> + <term>3.0.1: August 11, 2012</term> + <listitem> + <itemizedlist> + <listitem> + <para> + Version 3.0.0 included addition of files for + <command>pkg-config</command>, but this was not mentioned in + the release notes. The release notes for 3.0.0 were updated + to mention this. + </para> + </listitem> + <listitem> + <para> + Bug fix: if an object stream ended with a scalar object not + followed by space, qpdf would incorrectly report that it + encountered a premature EOF. This bug has been in qpdf since + version 2.0. + </para> + </listitem> + </itemizedlist> + </listitem> + </varlistentry> + </variablelist> + <variablelist> + <varlistentry> <term>3.0.0: August 2, 2012</term> <listitem> <itemizedlist> @@ -2500,6 +2525,12 @@ </para> </listitem> <listitem> + <para> + The file <filename>libqpdf.pc</filename> is now installed to + support <command>pkg-config</command>. + </para> + </listitem> + <listitem> <para> Image comparison tests are off by default now since they are not needed to verify a correct build or port of qpdf. They diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpdf-3.0.0/qpdf/qpdf.testcov new/qpdf-3.0.1/qpdf/qpdf.testcov --- old/qpdf-3.0.0/qpdf/qpdf.testcov 2012-08-02 12:52:33.000000000 +0200 +++ new/qpdf-3.0.1/qpdf/qpdf.testcov 2012-08-11 19:41:18.000000000 +0200 @@ -238,3 +238,5 @@ QPDFObjectHandle indirect without context 0 QPDFObjectHandle trailing data in parse 0 qpdf pages encryption password 0 +QPDF_Tokenizer EOF reading token 0 +QPDF_Tokenizer EOF reading appendable token 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpdf-3.0.0/qpdf/qtest/qpdf/eof-reading-token.out new/qpdf-3.0.1/qpdf/qtest/qpdf/eof-reading-token.out --- old/qpdf-3.0.0/qpdf/qtest/qpdf/eof-reading-token.out 1970-01-01 01:00:00.000000000 +0100 +++ new/qpdf-3.0.1/qpdf/qtest/qpdf/eof-reading-token.out 2012-08-11 19:41:18.000000000 +0200 @@ -0,0 +1,5 @@ +checking eof-reading-token.pdf +PDF Version: 1.3 +File is not encrypted +File is not linearized +object stream 12 (file position 5): EOF while reading token Files old/qpdf-3.0.0/qpdf/qtest/qpdf/eof-reading-token.pdf and new/qpdf-3.0.1/qpdf/qtest/qpdf/eof-reading-token.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpdf-3.0.0/qpdf/qtest/qpdf/eof-terminates-literal.out new/qpdf-3.0.1/qpdf/qtest/qpdf/eof-terminates-literal.out --- old/qpdf-3.0.0/qpdf/qtest/qpdf/eof-terminates-literal.out 1970-01-01 01:00:00.000000000 +0100 +++ new/qpdf-3.0.1/qpdf/qtest/qpdf/eof-terminates-literal.out 2012-08-11 19:41:18.000000000 +0200 @@ -0,0 +1,6 @@ +checking eof-terminates-literal.pdf +PDF Version: 1.3 +File is not encrypted +File is not linearized +No syntax or stream encoding errors found; the file may still contain +errors that qpdf cannot detect Files old/qpdf-3.0.0/qpdf/qtest/qpdf/eof-terminates-literal.pdf and new/qpdf-3.0.1/qpdf/qtest/qpdf/eof-terminates-literal.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpdf-3.0.0/qpdf/qtest/qpdf.test new/qpdf-3.0.1/qpdf/qtest/qpdf.test --- old/qpdf-3.0.0/qpdf/qtest/qpdf.test 2012-08-02 12:52:33.000000000 +0200 +++ new/qpdf-3.0.1/qpdf/qtest/qpdf.test 2012-08-11 19:41:18.000000000 +0200 @@ -149,7 +149,7 @@ $td->NORMALIZE_NEWLINES); # ---------- $td->notify("--- Miscellaneous Tests ---"); -$n_tests += 45; +$n_tests += 47; $td->runtest("qpdf version", {$td->COMMAND => "qpdf --version"}, @@ -374,6 +374,14 @@ {$td->COMMAND => "test_driver 31 minimal.pdf"}, # file not used {$td->FILE => "parse-object.out", $td->EXIT_STATUS => 0}, $td->NORMALIZE_NEWLINES); +$td->runtest("EOF terminating literal tokens", + {$td->COMMAND => "qpdf --check eof-terminates-literal.pdf"}, + {$td->FILE => "eof-terminates-literal.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("EOF reading token", + {$td->COMMAND => "qpdf --check eof-reading-token.pdf"}, + {$td->FILE => "eof-reading-token.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); show_ntests(); # ---------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpdf-3.0.0/qpdf.spec new/qpdf-3.0.1/qpdf.spec --- old/qpdf-3.0.0/qpdf.spec 2012-08-02 12:52:33.000000000 +0200 +++ new/qpdf-3.0.1/qpdf.spec 2012-08-11 19:41:18.000000000 +0200 @@ -1,6 +1,6 @@ Summary: Command-line tools and library for transforming PDF files Name: qpdf -Version: 3.0.0 +Version: 3.0.1 Release: 1%{?dist} License: Artistic Group: System Environment/Libraries @@ -80,6 +80,7 @@ %doc install-examples/examples %{_includedir}/* %{_libdir}/libqpdf*.so +%{_libdir}/pkgconfig %files static %defattr(-,root,root) -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org