In r8454, I have a applied a fix that allows this C++ exception to correctly percolate to the Python side -- the user will still get an exception, but it will be a Python exception and the interpreter itself does not crash. (It used to work, but recent changes to CXX caused it to break.) I have attached this patch to the e-mail.

As Eric suggests, fixing the underlying limitation (I even hesitate to call it a bug because it is definitely a corner case) requires understanding some pretty dark depths of the Agg renderer.

Mike

On 06/21/2010 10:57 PM, Eric Firing wrote:
On 06/21/2010 12:24 PM, Sandro Tosi wrote:
forwarded 585442 matplotlib-devel@lists.sourceforge.net
thanks

Hello Matplotlib developers,
here below is a report a user of maplotlib sent to the Debian bug
tracker. I've verified and it happend also with 0.99.3:

$ python -c "import matplotlib as p ; print p.__version__"
0.99.3
$ python mpl_crash.py
terminate called after throwing an instance of 'char const*'
Aborted

Thanks for looking into it,
Sandro
Sandro,

Thanks for reporting it.

With the default interpolation, rendering gets extremely slow as the
view limits decline to and below a single image pixel.  I suspect the
crash is related to this.  Neither the slowdown nor the crash occurs
with interpolation='nearest', although there is still an anomaly in
which the image is blank when the viewlim region is too small.

Like Ryan, I am not familiar with the _image.cpp and the underlying agg
routines, but I suspect this is going to be a difficult problem to
solve.  It may be necessary to put in some workaround, trying to trap
and prevent the extreme slowdown and crash.  The slowdown topic came up
on the list years ago.

http://www.mail-archive.com/matplotlib-devel@lists.sourceforge.net/msg00513.html

Eric

On Thu, Jun 10, 2010 at 16:52, Teemu Ikonen<tpiko...@gmail.com>   wrote:
Package: python-matplotlib
Version: 0.99.1.2-3
Severity: important

Running a program which displays an image with plt.imshow() and changes the
axes with plt.axis() before calling plt.show() crashes the python interpreter:

$ python mpl_crash.py
terminate called after throwing an instance of 'char const*'
Aborted

This happens at least with Qt4Agg, GTKAgg and TKAgg backends.

The example program is attached.

Best,

Teemu

-- System Information:
Debian Release: squeeze/sid
   APT prefers testing
   APT policy: (500, 'testing')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.32-trunk-amd64 (SMP w/4 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-matplotlib depends on:
ii  libatk1.0-0             1.30.0-1         The ATK accessibility toolkit
ii  libc6                   2.10.2-9         Embedded GNU C Library: Shared lib
ii  libcairo2               1.8.10-4         The Cairo 2D vector graphics libra
ii  libfontconfig1          2.8.0-2.1        generic font configuration library
ii  libfreetype6            2.3.11-1         FreeType 2 font engine, shared lib
ii  libgcc1                 1:4.4.4-1        GCC support library
ii  libglib2.0-0            2.24.1-1         The GLib library of C routines
ii  libgtk2.0-0             2.20.1-1         The GTK+ graphical user interface
ii  libpango1.0-0           1.28.0-1         Layout and rendering of internatio
ii  libpng12-0              1.2.43-1         PNG library - runtime
ii  libstdc++6              4.4.4-1          The GNU Standard C++ Library v3
ii  python                  2.5.4-9          An interactive high-level object-o
ii  python-cairo            1.8.8-1+b1       Python bindings for the Cairo vect
ii  python-dateutil         1.4.1-3          powerful extensions to the standar
ii  python-gobject          2.21.1-1         Python bindings for the GObject li
ii  python-matplotlib-data  0.99.1.2-3       Python based plotting system (data
ii  python-numpy            1:1.3.0-3+b1     Numerical Python adds a fast array
ii  python-pyparsing        1.5.2-2          Python parsing module
ii  python-support          1.0.8            automated rebuilding support for P
ii  python-tz               2010b-1          Python version of the Olson timezo
ii  tcl8.5                  8.5.8-2          Tcl (the Tool Command Language) v8
ii  tk8.5                   8.5.8-1          Tk toolkit for Tcl and X11, v8.5 -
ii  zlib1g                  1:1.2.3.4.dfsg-3 compression library - runtime

Versions of packages python-matplotlib recommends:
ii  python-glade2                 2.17.0-2   GTK+ bindings: Glade support
ii  python-tk                     2.6.5-1    Tkinter - Writing Tk applications

Versions of packages python-matplotlib suggests:
ii  dvipng                        1.13-1     convert DVI files to PNG graphics
ii  ipython                       0.10-2     enhanced interactive Python shell
ii  librsvg2-common               2.26.3-1   SAX-based renderer library for SVG
ii  python-configobj              4.7.2+ds-1 simple but powerful config file re
pn  python-excelerator<none>        (no description available)
ii  python-gtk2                   2.17.0-2   Python bindings for the GTK+ widge
pn  python-matplotlib-doc<none>        (no description available)
pn  python-qt3<none>        (no description available)
ii  python-qt4                    4.7.3-1    Python bindings for Qt4
ii  python-scipy                  0.7.2-1    scientific tools for Python
ii  python-traits                 3.3.0-1    Manifest typing and reactive progr
ii  python-wxgtk2.8               2.8.10.1-3 wxWidgets Cross-platform C++ GUI t
ii  texlive-extra-utils           2009-7     TeX Live: TeX auxiliary programs
ii  texlive-latex-extra           2009-7     TeX Live: LaTeX supplementary pack

-- no debconf information

_______________________________________________
Python-modules-team mailing list
python-modules-t...@lists.alioth.debian.org
http://lists.alioth.debian.org/mailman/listinfo/python-modules-team





------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the
lucky parental unit.  See the prize list and enter to win:
http://p.sf.net/sfu/thinkgeek-promo



_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the
lucky parental unit.  See the prize list and enter to win:
http://p.sf.net/sfu/thinkgeek-promo
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


--
Michael Droettboom
Science Software Branch
Space Telescope Science Institute
Baltimore, Maryland, USA

--- Begin Message ---
Revision: 8454
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8454&view=rev
Author:   mdboom
Date:     2010-06-22 16:00:55 +0000 (Tue, 22 Jun 2010)

Log Message:
-----------
Debian Bug#585442: python-matplotlib: crashes when calling axis() after imshow()
This allows the C++ exception raised when Agg rendering complexity is exceeded 
to percolate up correctly to a Python exception, rather than crashing the 
interpreter.

Modified Paths:
--------------
    trunk/matplotlib/agg24/include/agg_rasterizer_cells_aa.h

Modified: trunk/matplotlib/agg24/include/agg_rasterizer_cells_aa.h
===================================================================
--- trunk/matplotlib/agg24/include/agg_rasterizer_cells_aa.h    2010-06-21 
21:41:19 UTC (rev 8453)
+++ trunk/matplotlib/agg24/include/agg_rasterizer_cells_aa.h    2010-06-22 
16:00:55 UTC (rev 8454)
@@ -29,16 +29,15 @@
 #ifndef AGG_RASTERIZER_CELLS_AA_INCLUDED
 #define AGG_RASTERIZER_CELLS_AA_INCLUDED
 
+#include "CXX/Exception.hxx"
 #include <exception>
 #include <string.h>
 #include <math.h>
 #include "agg_math.h"
 #include "agg_array.h"
 
-
 namespace agg
 {
-
     //-----------------------------------------------------rasterizer_cells_aa
     // An internal class that implements the main rasterization algorithm.
     // Used in the rasterizer. Should not be used direcly.
@@ -180,6 +179,11 @@
     template<class Cell>
     AGG_INLINE void rasterizer_cells_aa<Cell>::add_curr_cell()
     {
+        static Py::Exception e(
+            Py::OverflowError(
+                "Agg rendering complexity exceeded. Consider downsampling or 
decimating your data."));
+
+
         if(m_curr_cell.area | m_curr_cell.cover)
         {
             if((m_num_cells & cell_block_mask) == 0)
@@ -187,8 +191,7 @@
                 if(m_num_blocks >= cell_block_limit) {
                     /* If this exception is thrown too often, one can
                        increase cell_block_limit */
-                    throw "Agg rendering complexity exceeded. "
-                        "Consider downsampling or decimating your data.";
+                    throw e;
                 }
                 allocate_block();
             }


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo
_______________________________________________
Matplotlib-checkins mailing list
matplotlib-check...@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

--- End Message ---
------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to