[qpdf] work around gcc 4.8.0 issue on ppc64 (#915321)
Jiří Popelka
jpopelka at fedoraproject.org
Tue Mar 5 10:45:58 UTC 2013
commit 81301bbb2d2269d13ebc922d53fccc13857a150f
Author: Jiri Popelka <jpopelka at redhat.com>
Date: Tue Mar 5 11:37:57 2013 +0100
work around gcc 4.8.0 issue on ppc64 (#915321)
qpdf-compressed-object.patch | 61 ++++++++++++++++++++++++++++++++++++++++++
qpdf-size_t.patch | 12 ++++++++
qpdf.spec | 14 +++++++++-
3 files changed, 86 insertions(+), 1 deletions(-)
---
diff --git a/qpdf-compressed-object.patch b/qpdf-compressed-object.patch
new file mode 100644
index 0000000..b1fbabe
--- /dev/null
+++ b/qpdf-compressed-object.patch
@@ -0,0 +1,61 @@
+diff -urN ../qpdf-4.0.1.orig/ChangeLog ./ChangeLog
+--- ../qpdf-4.0.1.orig/ChangeLog 2013-01-17 14:51:04.000000000 +0000
++++ ./ChangeLog 2013-03-04 21:15:53.952108469 +0000
+@@ -1,3 +1,13 @@
++2013-02-23 Jay Berkenbilt <ejb at ql.org>
++
++ * Bug fix: properly handle overridden compressed objects. When
++ caching objects from an object stream, only cache objects that,
++ based on the xref table, would actually be resolved into this
++ stream. Prior to this fix, if an object stream A contained an
++ object B that was overridden by an appended section of the file,
++ qpdf would cache the old value of B if any non-overridden member
++ of A was accessed before B. This commit fixes that bug.
++
+ 2013-01-17 Jay Berkenbilt <ejb at ql.org>
+
+ * 4.0.1: release
+diff -urN ../qpdf-4.0.1.orig/libqpdf/QPDF.cc ./libqpdf/QPDF.cc
+--- ../qpdf-4.0.1.orig/libqpdf/QPDF.cc 2013-01-17 14:51:04.000000000 +0000
++++ ./libqpdf/QPDF.cc 2013-03-04 21:15:53.952108469 +0000
+@@ -1538,20 +1538,31 @@
+ offsets[num] = offset + first;
+ }
+
++ // To avoid having to read the object stream multiple times, store
++ // all objects that would be found here in the cache. Remember
++ // that some objects stored here might have been overridden by new
++ // objects appended to the file, so it is necessary to recheck the
++ // xref table and only cache what would actually be resolved here.
+ for (std::map<int, int>::iterator iter = offsets.begin();
+ iter != offsets.end(); ++iter)
+ {
+ int obj = (*iter).first;
+- int offset = (*iter).second;
+- input->seek(offset, SEEK_SET);
+- QPDFObjectHandle oh = readObject(input, "", obj, 0, true);
+-
+- // Store in cache
+ ObjGen og(obj, 0);
+-
+- this->obj_cache[og] =
+- ObjCache(QPDFObjectHandle::ObjAccessor::getObject(oh),
+- end_before_space, end_after_space);
++ QPDFXRefEntry const& entry = this->xref_table[og];
++ if ((entry.getType() == 2) &&
++ (entry.getObjStreamNumber() == obj_stream_number))
++ {
++ int offset = (*iter).second;
++ input->seek(offset, SEEK_SET);
++ QPDFObjectHandle oh = readObject(input, "", obj, 0, true);
++ this->obj_cache[og] =
++ ObjCache(QPDFObjectHandle::ObjAccessor::getObject(oh),
++ end_before_space, end_after_space);
++ }
++ else
++ {
++ //QTC::TC("qpdf", "QPDF not caching overridden objstm object");
++ }
+ }
+ }
+
diff --git a/qpdf-size_t.patch b/qpdf-size_t.patch
new file mode 100644
index 0000000..6329b7f
--- /dev/null
+++ b/qpdf-size_t.patch
@@ -0,0 +1,12 @@
+diff -urN ../qpdf-4.0.1.orig/qpdf/qpdf.cc ./qpdf/qpdf.cc
+--- ../qpdf-4.0.1.orig/qpdf/qpdf.cc 2013-01-17 14:51:04.000000000 +0000
++++ ./qpdf/qpdf.cc 2013-03-04 21:07:56.361335897 +0000
+@@ -1574,7 +1574,7 @@
+ // This prevents those objects from being preserved by
+ // being referred to from other places, such as the
+ // outlines dictionary.
+- for (int pageno = 0; pageno < (int)orig_pages.size(); ++pageno)
++ for (size_t pageno = 0; pageno < orig_pages.size(); ++pageno)
+ {
+ if (selected_from_orig.count(pageno) == 0)
+ {
diff --git a/qpdf.spec b/qpdf.spec
index c134c64..fa4ede4 100644
--- a/qpdf.spec
+++ b/qpdf.spec
@@ -1,12 +1,15 @@
Summary: Command-line tools and library for transforming PDF files
Name: qpdf
Version: 4.0.1
-Release: 2%{?dist}
+Release: 3%{?dist}
License: Artistic 2.0
Group: System Environment/Base
URL: http://qpdf.sourceforge.net/
Source0: http://downloads.sourceforge.net/sourceforge/qpdf/qpdf-%{version}.tar.gz
+Patch0: qpdf-size_t.patch
+Patch1: qpdf-compressed-object.patch
+
BuildRequires: zlib-devel
BuildRequires: pcre-devel
@@ -58,6 +61,11 @@ QPDF Manual
%prep
%setup -q
+# work around gcc 4.8.0 issue on ppc64 (#915321)
+%patch0 -p1 -b .size_t
+# properly handle overridden compressed objects
+%patch1 -p1 -b .compressed-object
+
%build
# work-around check-rpaths errors
autoreconf --verbose --force --install
@@ -102,6 +110,10 @@ make check
%doc __doc/*
%changelog
+* Tue Mar 05 2013 Jiri Popelka <jpopelka at redhat.com> - 4.0.1-3
+- work around gcc 4.8.0 issue on ppc64 (#915321)
+- properly handle overridden compressed objects
+
* Thu Feb 14 2013 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 4.0.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
More information about the scm-commits
mailing list