bugGNU Octave - Bugs: bug #56711, Three input form of diag can...


bug #56711: Three input form of diag can segfault if a cell array is passed

Submitted by:  Travis Arnold <teerav42>
Submitted on:  Fri 02 Aug 2019 09:58:04 PM UTC  
Category:  Octave Function Severity:  3 - Normal
Priority:  7 - High Item Group:  Segfault, Bus Error, etc.
Status:  Fixed Assigned to:  None
Originator Name:  Open/Closed:  Closed
Release:  5.1.0 Operating System:  GNU/Linux

Add a New Comment (Rich Markup)

You are not logged in

Please log in, so followups can be emailed to you.


Tue 06 Aug 2019 12:57:52 AM UTC, comment #4: 

I fixed the issue in this cset https://hg.savannah.gnu.org/hgweb/octave/rev/1582a6140275.  This was done on the stable branch and will be part of the next bug fix release of Octave.

Rik <rik5>
Project Administrator
Mon 05 Aug 2019 11:26:34 PM UTC, comment #3: 

Here is a backtrace of the segfault.

0x00007f07b9270637 in octave::refcount<long>::operator-- (
    this=0x7f07b9071250 <vtable for octave::tree_identifier+24>)
    at ./liboctave/util/oct-refcount.h:96
96            return OCTAVE_ATOMIC_DECREMENT (&m_count);
(gdb) bt
#0  0x00007f07b9270637 in octave::refcount<long>::operator-- (
    this=0x7f07b9071250 <vtable for octave::tree_identifier+24>)
    at ./liboctave/util/oct-refcount.h:96
#1  0x00007f07b92700d8 in octave_value::operator= (this=0x7f07802f4130, a=...)
    at ./libinterp/octave-value/ov.h:360
#2  0x00007f07b831cbc2 in Array<octave_value>::diag (this=0x7f07803b04b0, m=2, n=1)
    at ./liboctave/array/Array.cc:2621
#3  0x00007f07b860d753 in Cell::diag (this=0x7f07803b04b0, m=2, n=1)
    at libinterp/corefcn/Cell.cc:354
#4  0x00007f07b83fd82c in octave_base_matrix<Cell>::diag (this=0x7f07803b04a0, m=2, n=1)
    at libinterp/octave-value/ov-base-mat.h:136
#5  0x00007f07b86e3eaf in octave_value::diag (this=0x7f078ea00310, m=2, n=1)
    at ./libinterp/octave-value/ov.h:1311
#6  0x00007f07b86bd959 in Fdiag (args=...) at libinterp/corefcn/data.cc:1237

Of course, it's not at all where I expected it to be.

Rik <rik5>
Project Administrator
Sat 03 Aug 2019 04:48:51 PM UTC, comment #2: 

Rik, your point stands regardless, but to be clear: based on the behavior when using numerical arrays, I believe that the example I gave that segfaulted did have valid input, and therefore it should neither segfault (obviously) nor give an error.

Travis Arnold <teerav42>
Sat 03 Aug 2019 03:31:08 AM UTC, comment #1: 

Confirmed.  The segfault is still present on the current stable release, 5.1.0.  Even if the input is invalid, the interpreter should merely flag an error--never segfault.  I have raised the priority to high.

Rik <rik5>
Project Administrator
Fri 02 Aug 2019 09:58:04 PM UTC, original submission:  

I am running Octave 4.4.1 on Xubuntu 19.04. Example:

diag([1, 1], 2, 1)


ans =

Diagonal Matrix


which is fine (although now that I look at it perhaps that is also a small bug, as that matrix is not diagonal if one subscribes to the convention that only square matrices may be labeled diagonal; I digress however).

In contrast,

diag({1, 1}, 2, 1)

results in a segfault:

fatal: caught signal Segmentation fault -- stopping myself...
Segmentation fault (core dumped)

This seems to occur when the first argument is a cell array and either M or N (the second and third arguments, respectively) is less than the number of elements in the cell.

Matlab compatibility is not a concern here, as Matlab's version of diag does not support cell arrays or the three input version (in fact, the way I found this bug was by reimplementing a version of diag for Matlab so that it does support these features).

Travis Arnold <teerav42>


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

Attach Files:

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 rik5 (Posted a comment)
  • -email is unavailable- added by teerav42 (Submitted the item)
  • -email is unavailable- added by teerav42

    Do you think this task is very important?
    If so, you can add your encouragement to it.
    This task has 0 encouragements so far.

    Only project members can vote.




    Follow 6 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2019-08-06 rik5 StatusConfirmed => Fixed
        Open/ClosedOpen => Closed
    2019-08-03 rik5 Priority5 - Normal => 7 - High
        StatusNone => Confirmed
        Release4.4.1 => 5.1.0
    2019-08-02 teerav42 Carbon-Copy- => Added -email is unavailable-

    Back to the top

    Powered by Savane 3.7