bugGNU Octave - Bugs: bug #36866, Calling imagesc on complex matrix...

 
 

bug #36866: Calling imagesc on complex matrix causes octave to crash

Submitter:  None
Submitted:  Wed 18 Jul 2012 04:52:27 PM UTC
   
 
Category:  Plotting with gnuplot Severity:  3 - Normal
Priority:  5 - Normal Item Group:  Segfault, Bus Error, etc.
Status:  Fixed Assigned to:  None
Originator Name:  Dustin Originator Email:  -email is unavailable-
Open/Closed:  * Closed Release:  * 3.6.1
Operating System:  * Microsoft Windows Fixed Release:  None
Planned Release:  None
* Mandatory Fields

Add a New Comment Rich Markup
   

Jump to the original submission

Tue 31 Jul 2012 10:34:28 PM UTC, comment #7: 

Jordi, that's fine.  I have never had access to Matlab and I didn't know how they were choosing to handle this case.

Rik <rik5>
Group administrator
Tue 31 Jul 2012 10:09:40 PM UTC, comment #6: 

Never mind, I found the UB, and why it wasn't showing up in my development build. There was an out of bounds indexing problem concerning empty matrices, and in my dev build I build with bound-checking.

Rik, I have instead opted to warn and show the real part like imshow does. In addition, I've added a few more checks on the C++ side to hopefully make it impossible to crash Octave with a bad _go_image_ call:

http://hg.savannah.gnu.org/hgweb/octave/rev/7a3957ca99c3

Jordi Gutiérrez Hermoso <jordigh>
Group Member
Tue 31 Jul 2012 08:15:18 PM UTC, comment #5: 

Unfortunately all I got out of it at the time was the generic Windows "Octave has encountered an error and needs to close" message. It was very reproducible on the machine I was working on (which I am now 800 miles away from), but I have not been able to reproduce it on a Linux machine. I will try it on my Windows box at home if you are interested, though.

Dustin

Anonymous
Tue 31 Jul 2012 08:06:40 PM UTC, comment #4: 

Out of curiousity, do you remember exactly what was the crash? I don't see it on my system. Segfault? Stack corruption? Can you reproduce it?

Jordi Gutiérrez Hermoso <jordigh>
Group Member
Tue 31 Jul 2012 07:54:07 PM UTC, comment #3: 

Octave will continue "running" (albeit in a useless state since it is totally preoccupied with trying to execute the plot) until you try to close the plot window. Closing the plot window causes Octave to crash. The console output I posted originally was grabbed before closing the plot window.

Dustin

Anonymous
Tue 31 Jul 2012 06:19:20 PM UTC, comment #2: 

Is this all you see? This isn't a crash. Is Octave still running after you see this?

Jordi Gutiérrez Hermoso <jordigh>
Group Member
Tue 31 Jul 2012 06:12:12 PM UTC, comment #1: 

Image data really can't be complex.  I have put a test in the image routines which checks for complex data and avoids creating the plot if any is present.  This will stop the crash you are seeing since the pipe to gnuplot will not be opened.

The changeset is here (http://hg.savannah.gnu.org/hgweb/octave/rev/489736962e80).  In order to access the fix you will need to build from Mercurial sources or wait until the next major release 3.8.0.

Rik <rik5>
Group administrator
Wed 18 Jul 2012 04:52:27 PM UTC, original submission:  

I'm running octave3.6.1_gcc4.6.2 on Windows 7 with gnuplot. If I try to call imagesc on a complex matrix, Octave gives an error but also creates an empty gnuplot window. Any interaction with this plot window (eg clicking, resizing) will cause a large number of errors to appear on the Octave terminal. Closing the plot window causes Octave to crash.

Example output (prior to crash):

octave:4> A = ones(5) + 1i*ones(5);
octave:5> imagesc(A)
error: octave_base_value::array_value(): wrong type argument `complex matrix'
error: called from:
error:   C:\Octave\Octave3.6.1_gcc4.6.2\share\octave\3.6.1\m\image\image.m at line 130, column 7
error:   C:\Octave\Octave3.6.1_gcc4.6.2\share\octave\3.6.1\m\image\image.m at line 78, column 7
error:   C:\Octave\Octave3.6.1_gcc4.6.2\share\octave\3.6.1\m\image\imagesc.m at line 111, column 7
error:   C:\Octave\Octave3.6.1_gcc4.6.2\share\octave\3.6.1\m\image\imagesc.m at line 60, column 9
error: octave_base_value::array_value(): wrong type argument `complex matrix'
octave:5> error: octave_base_value::array_value(): wrong type argument `complex matrix'
error: octave_base_value::double_value (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::array_value(): wrong type argument `complex matrix'
error: octave_base_value::double_value (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::array_value(): wrong type argument `complex matrix'
error: octave_base_value::double_value (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::array_value(): wrong type argument `complex matrix'
error: octave_base_value::double_value (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::array_value(): wrong type argument `complex matrix'
error: octave_base_value::double_value (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::array_value(): wrong type argument `complex matrix'
error: octave_base_value::double_value (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::array_value(): wrong type argument `complex matrix'
error: octave_base_value::double_value (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::array_value(): wrong type argument `complex matrix'
error: octave_base_value::double_value (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::array_value(): wrong type argument `complex matrix'
error: octave_base_value::double_value (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::array_value(): wrong type argument `complex matrix'
error: octave_base_value::double_value (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::convert_to_str_internal (): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::matrix_value(): wrong type argument `<unknown type>'
error: octave_base_value::array_value(): wrong type argument `complex matrix'

Anonymous

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach Files:
   
   
Comment:
   

No files currently attached

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -email is unavailable- added by jordigh (Posted a comment)
  • -email is unavailable- added by rik5 (Posted a comment)
  • -email is unavailable- added by None (Submitted the item)
  •  

    There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.

    Only group members can vote.

     

    Follow 2 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2012-07-31 rik5 StatusNone Fixed
        Open/ClosedOpen Closed

    Back to the top

    Powered by Savane 3.13-4448.
    Corresponding source code