Package: python-poppler
Version: 0.12.1-8+b1
Severity: important
Tags: upstream patch

Dear Maintainer,

The following code:

$ cat bug.py
import poppler
import tempfile
import urllib2

# Download a PDF.
dummy, filename = tempfile.mkstemp(".pdf")
pdf = urllib2.urlopen("http://www.aquilenet.fr/docs/adhesion.pdf";)
local_pdf = open(filename, 'w')
local_pdf.write(pdf.read())
local_pdf.close()
pdf.close()

# Get the thumbnail.
page = poppler.document_new_from_file('file://' + filename, None).get_page(0)
page.get_thumbnail()

leads to a segmentation fault when the PDF file does not have a thumbnail for
the page:

$ python bug.py 
Segmentation fault

Basically, the _wrap_poppler_page_get_thumbnail() function calls the
poppler_page_get_thumbnail() function, but does not check that the return value
is not NULL before passing it to PycairoSurface_FromSurface(), which
dereferences it.

The attached patch fixes this issue. The get_thumbnail() method now returns None
when no thumbnail is available. I'm not familiar with the python-poppler, so
this may not be the best solution (maybe an exception should be thrown instead).

This error can be found in other methods, such as get_image(), so this is
probably worth notifying upstream.

WBR,
Cyril Roelandt.


-- System Information:
Debian Release: wheezy/sid
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'unstable'), (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 3.2.0-3-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages python-poppler depends on:
ii  libatk1.0-0         2.4.0-2
ii  libc6               2.13-35
ii  libcairo2           1.12.2-2
ii  libfontconfig1      2.9.0-7
ii  libfreetype6        2.4.9-1
ii  libgdk-pixbuf2.0-0  2.26.1-1
ii  libglib2.0-0        2.32.3-1
ii  libgtk2.0-0         2.24.10-2
ii  libpango1.0-0       1.30.0-1
ii  libpoppler-glib8    0.18.4-3
ii  python              2.7.3-2
ii  python-cairo        1.8.8-1+b2
ii  python-gobject      3.2.2-1
ii  python-gtk2         2.24.0-3
ii  python2.6           2.6.8-0.2
ii  python2.7           2.7.3-5

python-poppler recommends no packages.

python-poppler suggests no packages.

-- no debconf information
--- python-poppler-0.12.1.orig/poppler.override	2009-09-26 20:31:23.000000000 +0200
+++ python-poppler-0.12.1/poppler.override	2012-09-22 00:09:57.000000000 +0200
@@ -569,6 +569,9 @@
 
     surface = poppler_page_get_thumbnail(POPPLER_PAGE(self->obj));
 
+    if (!surface)
+        return Py_BuildValue("");
+
 #if PYCAIRO_VERSION_HEX >= 0x1010600
     return PycairoSurface_FromSurface(surface, NULL);
 #else

Reply via email to