bugGNU Octave - Bugs: bug #60042, [octave forge] (sparsersb) Crash...

 
 

bug #60042: [octave forge] (sparsersb) Crash while "pkg test sparsersb"

Submitter:  Markus Mützel <mmuetzel>
Submitted:  Thu 11 Feb 2021 11:12:08 AM UTC
   
 
Category:  Octave Package Severity:  3 - Normal
Priority:  5 - Normal Item Group:  Segfault, Bus Error, etc.
Status:  Fixed Assigned to:  None
Originator Name:  Open/Closed:  * Closed
Release:  * other Operating System:  * Microsoft Windows
Fixed Release:  None Planned Release:  None
* Mandatory Fields

Add a New Comment Rich Markup
   

Jump to the original submission

Fri 27 May 2022 12:32:13 PM UTC, comment #13: 

I updated librsb on the release branch of MXE Octave here:
https://hg.octave.org/mxe-octave/rev/97c5f8da5036

The updated version should be part of Octave 7.2 for Windows.

Closing as fixed.

PS: @dezperado: When you come around to it, please also have a look at bug #61320 that covers a bug of the sparsersb package when compiling for the current development version of Octave. And bug #61393 that is about a test suite failure when the sparsersb package is installed in a read-only location.

Markus Mützel <mmuetzel>
Group administrator
Tue 17 May 2022 06:02:42 PM UTC, comment #12: 

Hi. Recent releases of LIBRSB (1.2.0.11 and 1.3.0.0) have fixed this bug :-)
Thank you for having made it evident (you've some credits in the librsb README)!
https://sourceforge.net/projects/librsb/files/



This problem has been fixed in the stable version. The fix will
be available in the next minor software release. Thank you for
your bug report.

dezperado <dezperado>
Tue 21 Sep 2021 10:03:01 AM UTC, comment #11: 

comment #4:

> Also not sure if it is relevant to this particular bug:
>


> ASAN_OPTIONS="leak_check_at_exit=0" ./rsbench --limits-test
> BASIC LIMIT CASES TEST: BEGIN
> ...
> =================================================================
> ==1354838==ERROR: AddressSanitizer: SEGV on unknown address 0x7f21319b0c84 (pc 0x7f254db296c6 bp 0x7f25408eddb0 sp 0x7f25408edd10 T18)
> ==1354838==The signal is caused by a READ memory access.
>     #0 0x7f254db296c5 in rsb_util_sort_row_major_bucket_based_parallel._omp_fn.2 /home/dima/src/librsb-1.2.0.9/rsb_srtp.c:386
>     #1 0x7f254cfaf46d  (/lib64/libgomp.so.1+0x1b46d)
>     #2 0x7f254cd7c149 in start_thread (/lib64/libpthread.so.0+0x8149)
>     #3 0x7f254caadf22 in clone (/lib64/libc.so.6+0xfcf22)
>
> AddressSanitizer can not provide additional info.
> SUMMARY: AddressSanitizer: SEGV /home/dima/src/librsb-1.2.0.9/rsb_srtp.c:386 in rsb_util_sort_row_major_bucket_based_parallel._omp_fn.2
> Thread T18 created by T0 here:
>     #0 0x7f254eb8fea3 in __interceptor_pthread_create (/lib64/libasan.so.5+0x52ea3)
>     #1 0x7f254cfafaa2  (/lib64/libgomp.so.1+0x1baa2)
>     #2 0x7f254cfa56d0 in GOMP_parallel (/lib64/libgomp.so.1+0x116d0)
>     #3 0x60400000004f  (<unknown module>)
>
> ==1354838==ABORTING


>
> Dmitri.
> --

Hi Dmitri,
I am attaching a tarball of librsb-1.2.0.10 (librsb-1.2.0.10-test-limits-fix.tar.gz) with a two-lines patch -- this shall fix the `./rsbench --limits-test` SEGV problem you spotted using ASAN.
Will be included in the next release though.
Thanks!
Michele


(file #51951)

dezperado <dezperado>
Sun 19 Sep 2021 01:00:52 PM UTC, comment #10: 

Nevermind. The error I reported in comment #8 is already fixed upstream:
http://hg.code.sf.net/p/octave/sparsersb/rev/20ec361e0470

Markus Mützel <mmuetzel>
Group administrator
Sun 19 Sep 2021 12:42:23 PM UTC, comment #9: 

Since this fixes a hard crash with the potential of the user losing data, I pushed the update to the release branch of MXE Octave here:
https://hg.octave.org/mxe-octave/rev/2db7f803d55d

Marking as ready for test.

Markus Mützel <mmuetzel>
Group administrator
Sun 19 Sep 2021 12:29:22 PM UTC, comment #8: 

I updated MXE Octave to librsb 1.2.0.10 locally also removing the `sed` expression that you proposed to work around an error in version 1.2.0.9. (See [1] for the current build rules, line 25.)

With that change, I cross-built Octave 7.0.1 (41eecdf76372).

Running `pkg test sparsersb` no longer crashes Octave.
One test is failing (minor syntax change). See the attached log.

Relevant command:

>> length( sparsersbtg () )
error: invalid empty index expression {}, use {:} instead
error: called from
    sparsersbtg at line 96 column 8



[1]: https://hg.octave.org/mxe-octave/file/53a6c7df43f8/src/librsb.mk

(file #51943)

Markus Mützel <mmuetzel>
Group administrator
Sun 19 Sep 2021 09:58:16 AM UTC, comment #7: 

Hi Dmitri & Markus & Kai,

I'm sorry for noticing the bugs only now.
I just dealt with
  https://savannah.gnu.org/bugs/?60042#comment2
 -- is fixed with http://hg.code.sf.net/p/octave/sparsersb/rev/86f87a49b29e

Of the others, https://savannah.gnu.org/bugs/?60042#comment4 is still there but I wouldn't give it priority -- that's a nasty corner case in the part of the testing suite which is for me.

The other two misbehaviours shall be fixed with librsb-1.2.0.10 -- if you could check (especially on Windows!) would be great.

Cheers,
Michele

dezperado <dezperado>
Sun 19 Sep 2021 09:44:51 AM UTC, comment #6: 


comment #2:

> Running on linux with ASAN I got:


> octave:2> pkg test sparsersb
> Testing functions in package 'sparsersb':
>
> Integrated test scripts:
>
>   ../sparsersb-1.0.8/x86_64-pc-linux-gnu-api-v55/sparsersb.cc-tst =================================================================
> ==1335615==ERROR: AddressSanitizer: heap-use-after-free on address 0x603003dc2550 at pc 0x7fb18161d0bc bp 0x7fb147a32a00 sp 0x7fb147a321a8
> READ of size 1 at 0x603003dc2550 thread T6 (QThread)
>     #0 0x7fb18161d0bb  (/lib64/libasan.so.5+0xba0bb)
>     #1 0x7fb142f064b4 in rsb__stropts_set /home/dima/src/librsb-1.2.0.9/rsb_stropts.c:28
>     #2 0x7fb142eab1f8 in rsb__do_set_initopt_as_string /home/dima/src/librsb-1.2.0.9/rsb_internals.c:3728
>     #3 0x7fb142e7ae3f in rsb_lib_set_opt_str /home/dima/src/librsb-1.2.0.9/rsb_rsb.c:143
>     #4 0x7fb143cf2183 in Fsparsersb(octave_value_list const&, int) /tmp/oct-M5EBar/sparsersb-1.0.8/src/sparsersb.cc:2828
>     #5 0x7fb17ee168af in
> ...
>
> Dmitri.
> --

Hi Dmitri.
I'm sorry for noticing this (https://savannah.gnu.org/bugs/?60042#comment2) only now.
Thanks -- it was a bug in sparsersb indeed -- I just fixed it in http://hg.code.sf.net/p/octave/sparsersb/rev/86f87a49b29e .

Wrt the others:
 https://savannah.gnu.org/bugs/?60042#comment1 and https://savannah.gnu.org/bugs/?60042#comment3 -- shall be fixed with librsb-1.2.0.10 (released the other day)

 https://savannah.gnu.org/bugs/?60042#comment4 -- this is still there in librsb-1.2.0.10 -- it's a nasty and deliberate corner case with little practical value, so I'll deal with it at low priority for what comes after librsb-1.2.0.10

Thanks!
Michele

dezperado <dezperado>
Mon 07 Jun 2021 11:32:16 AM UTC, comment #5: 

Still crashed Octave with the version of the package included in Octave 6.2.90.

Markus Mützel <mmuetzel>
Group administrator
Thu 11 Feb 2021 11:39:49 PM UTC, comment #4: 

Also not sure if it is relevant to this particular bug:


ASAN_OPTIONS="leak_check_at_exit=0" ./rsbench --limits-test
BASIC LIMIT CASES TEST: BEGIN
BASIC LIMIT CASES TEST: BEGIN
(please do not worry if some tests fail due to insufficient memory)
(forcing allocations to be memory resident)
testing instantiation 4-sized, 4 nnz
testing instantiation 65535-sized, 4 nnz
testing instantiation 524288-sized, 4 nnz
testing instantiation 2097152-sized, 4 nnz
testing instantiation 8388608-sized, 4 nnz
testing instantiation 33554432-sized, 4 nnz
testing instantiation 2147483137-sized, 4 nnz
AddressSanitizer:DEADLYSIGNAL
=================================================================
==1354838==ERROR: AddressSanitizer: SEGV on unknown address 0x7f21319b0c84 (pc 0x7f254db296c6 bp 0x7f25408eddb0 sp 0x7f25408edd10 T18)
==1354838==The signal is caused by a READ memory access.
    #0 0x7f254db296c5 in rsb_util_sort_row_major_bucket_based_parallel._omp_fn.2 /home/dima/src/librsb-1.2.0.9/rsb_srtp.c:386
    #1 0x7f254cfaf46d  (/lib64/libgomp.so.1+0x1b46d)
    #2 0x7f254cd7c149 in start_thread (/lib64/libpthread.so.0+0x8149)
    #3 0x7f254caadf22 in clone (/lib64/libc.so.6+0xfcf22)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /home/dima/src/librsb-1.2.0.9/rsb_srtp.c:386 in rsb_util_sort_row_major_bucket_based_parallel._omp_fn.2
Thread T18 created by T0 here:
    #0 0x7f254eb8fea3 in __interceptor_pthread_create (/lib64/libasan.so.5+0x52ea3)
    #1 0x7f254cfafaa2  (/lib64/libgomp.so.1+0x1baa2)
    #2 0x7f254cfa56d0 in GOMP_parallel (/lib64/libgomp.so.1+0x116d0)
    #3 0x60400000004f  (<unknown module>)

==1354838==ABORTING


Dmitri.
--

Dmitri A. Sergatskov <dasergatskov>
Thu 11 Feb 2021 10:27:09 PM UTC, comment #3: 

Not sure if this is related:


ASAN_OPTIONS="leak_check_at_exit=0" ./rsbench -B
Beginning large binary search test.
Detected 33445613568 bytes of memory, comprehensive of 20588650496 of free memory.
On this system, maximal array of coordinates can have 2147483137 elements and occupy 8589932548 bytes.
Will perform the test using less memory (17592186042758 MB) than on the maximal coordinate indices array (18446744071971170304) allows.
Skipping test: too little memory.
Skipping large binary search test.
REGRESSION TEST: BEGIN
REGRESSION TEST: END
MATRIX SUMS TEST: BEGIN
MATRIX SUMS TEST: END
BASIC SPARSE BLAS TEST: BEGIN
INIT INTERFACE TEST: BEGIN
got RSB_IO_WANT_EXTRA_VERBOSE_INTERFACE: 0
got RSB_IO_WANT_IS_INITIALIZED_MARKER: 1
INIT INTERFACE TEST: END (SUCCESS)
PRINT TEST: BEGIN
%%MatrixMarket matrix coordinate real general
4 4 4
1        1        0
2        2        11
3        3        22
4        4        33
         vectors diff :
0 : 0 11
1 : 11 22
2 : 22 33
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: librsb 1.2.0.9
%%Title: matrix spy plot (originally 4 x 4 / 4, here 100 x 100/4)
%%CreationDate:
%%DocumentData: Clean7Bit
%%Origin: 0 0
%%BoundingBox: 0 0 100 100
%%LanguageLevel: 2
%%Pages: 1
%%Page: 1 1
save /$LIBRSB_DICT 3 dict def $LIBRSB_DICT begin /M {moveto} bind def /Z {gsave currentpoint lineto 25 setlinewidth 1 setlinecap stroke grestore} bind def /D {M Z} bind def /K {0.5 0.5 setrgbcolor} bind def
/R {rlineto} bind def
/N {newpath} bind def
/L {lineto} bind def
/C {closepath} bind def
/SLW {setlinewidth} bind def
/SRGB {setrgbcolor} bind def
/SCF {scalefont} bind def
/SF {setfont} bind def
stroke
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: librsb 1.2.0.9
%%Title: matrix plot
%%CreationDate:
%%DocumentData: Clean7Bit
%%Origin: 0 0
%%BoundingBox: 0 0 100 100
%%LanguageLevel: 2
%%Pages: 1
%%Page: 1 1

/csquare {
        newpath
        0 0 moveto
        0 -25 rlineto
        25 0 rlineto
        0 25 rlineto
        closepath
       setrgbcolor
        fill
} def

0 0 moveto

save /$LIBRSB_DICT 3 dict def $LIBRSB_DICT begin /M {moveto} bind def /Z {gsave currentpoint lineto 1 setlinewidth 1 setlinecap stroke grestore} bind def /D {M Z} bind def /K {0.5 0.5 setrgbcolor} bind def
/R {rlineto} bind def
/N {newpath} bind def
/L {lineto} bind def
/C {closepath} bind def
/SLW {setlinewidth} bind def
/SRGB {setrgbcolor} bind def
/SCF {scalefont} bind def
/SF {setfont} bind def
%% (4 x 4)[0x624000002100]{S} @ (0(0..0),0(0..0)) (4 nnz, 1 nnz/r) flags 0x2046186 (coo:1, csr:1, hw:1, ic:1), storage: 40, subm: 2, symflags:''
%% ect: 0.00e+00  est: 9.06e-06  sat: 1.91e-05  eit: 1.19e-05  cpt: 0.00e+00
%% RSB(@:3/2;100.0%diagnz;100.0%diagblk)-R/RowMajor/General/-HalfwordCsr:(0~2)-FullwordCsr:(0~2)-HalfwordCoo:(2~2)-FullwordCoo:(0~2)/float/cores:32/gcc-8.3//sizeof(nnz_idx_t):4,sizeof(coo_idx_t):4,sizeof(blk_idx_t):4/idx_storage:16-idx_storage_in_csr:36-idx_storage_in_coo:32/version:1.2.0.9/memhinfo:[L3:16/64/16M,L2:8/64/512K,L1:8/64/32K]/ryzen
%% sparse blocks dump
% matrix at 0 0, level 0
% matrix at 0 0, level 1
% terminal matrix at 0 0
newpath
0 100 M
50 0 R
0 -50 R
-50 0 R
0 0 R
C
0.0625 0.0625 0.0625 SRGB
1 SLW
stroke

% matrix at 2 2, level 1
% terminal matrix at 2 2
newpath
50 50 M
50 0 R
0 -50 R
-50 0 R
0 0 R
C
0.0625 0.0625 0.0625 SRGB
1 SLW
stroke

%% z dump
newpath
% matrix at 0 0, level 1, xs 25, ys 25, orows 4
25 75 M
% matrix at 2 2, level 1, xs 25, ys 25, orows 4
75 25 L
0 0  1 setrgbcolor
1 setlinewidth
stroke

% rendering time ~ 0.000144005 s
PRINT TEST: END (SUCCESS)
BASIC SPARSE BLAS TEST: END (SUCCESS)
STRESS SPARSE BLAS TEST: BEGIN
STRESS SPARSE BLAS TEST: END (SUCCESS)
SPARSE BLAS TESTS: END (SUCCESS)
BASIC PRIMITIVES TEST: BEGIN
BASIC PRIMITIVES TEST: END (SUCCESS)
ADVANCED SPARSE BLAS TEST: BEGIN
=================================================================
==1352633==ERROR: AddressSanitizer: heap-use-after-free on address 0x624000b4a118 at pc 0x0000004aae23 bp 0x7ffec60f8040 sp 0x7ffec60f8030
READ of size 4 at 0x624000b4a118 thread T0
    #0 0x4aae22 in rsb_blas_bigger_matrices_tester /home/dima/src/librsb-1.2.0.9/rsb_libspblas_tests.c:1527
    #1 0x40bdbe in main /home/dima/src/librsb-1.2.0.9/rsbench.c:642
    #2 0x7fa63fcd57b2 in __libc_start_main (/lib64/libc.so.6+0x237b2)
    #3 0x40712d in _start (/home/dima/src/librsb-1.2.0.9/.libs/lt-rsbench+0x40712d)

0x624000b4a118 is located 24 bytes inside of 7840-byte region [0x624000b4a100,0x624000b4bfa0)
freed by thread T0 here:
    #0 0x7fa641f2d7e0 in __interceptor_free (/lib64/libasan.so.5+0xef7e0)
    #1 0x7fa640e5474e in rsb__free /home/dima/src/librsb-1.2.0.9/rsb_sys.c:389
    #2 0x7fa640e87814 in rsb__destroy_inner /home/dima/src/librsb-1.2.0.9/rsb_internals.c:405
    #3 0x7fa640ee84c6 in rsb__do_switch_recursive_in_place_matrix_to_in_place_coo_unsorted /home/dima/src/librsb-1.2.0.9/rsb_rec2coo.c:303
    #4 0x7fa640e844de in rsb__do_switch_rsb_mtx_to_coo_unsorted /home/dima/src/librsb-1.2.0.9/rsb_do.c:1040
    #5 0x7fa640e84d45 in rsb__do_switch_rsb_mtx_to_coo /home/dima/src/librsb-1.2.0.9/rsb_do.c:1102
    #6 0x4aad57 in rsb_blas_bigger_matrices_tester /home/dima/src/librsb-1.2.0.9/rsb_libspblas_tests.c:1526
    #7 0x40bdbe in main /home/dima/src/librsb-1.2.0.9/rsbench.c:642
    #8 0x7fa63fcd57b2 in __libc_start_main (/lib64/libc.so.6+0x237b2)

previously allocated by thread T0 here:
    #0 0x7fa641f2e9c0 in __interceptor_posix_memalign (/lib64/libasan.so.5+0xf09c0)
    #1 0x7fa640e5468b in rsb__aligned_malloc /home/dima/src/librsb-1.2.0.9/rsb_sys.c:364
    #2 0x7fa640e54786 in rsb__malloc /home/dima/src/librsb-1.2.0.9/rsb_sys.c:417
    #3 0x7fa640e54a69 in rsb__calloc /home/dima/src/librsb-1.2.0.9/rsb_sys.c:711
    #4 0x7fa640edc620 in rsb__allocate_recursive_sparse_matrix_from_row_major_coo /home/dima/src/librsb-1.2.0.9/rsb_coo2rec.c:2661
    #5 0x7fa640ed2dac in rsb__mtx_alloc_inner /home/dima/src/librsb-1.2.0.9/rsb_asm.c:88
    #6 0x7fa640e9c240 in rsb__do_mtx_alloc_from_coo_inplace /home/dima/src/librsb-1.2.0.9/rsb_internals.c:3833
    #7 0x7fa640e8577b in rsb__do_mtx_alloc_from_csr_inplace /home/dima/src/librsb-1.2.0.9/rsb_do.c:1258
    #8 0x4aa98c in rsb_blas_bigger_matrices_tester /home/dima/src/librsb-1.2.0.9/rsb_libspblas_tests.c:1500
    #9 0x40bdbe in main /home/dima/src/librsb-1.2.0.9/rsbench.c:642
    #10 0x7fa63fcd57b2 in __libc_start_main (/lib64/libc.so.6+0x237b2)

SUMMARY: AddressSanitizer: heap-use-after-free /home/dima/src/librsb-1.2.0.9/rsb_libspblas_tests.c:1527 in rsb_blas_bigger_matrices_tester
Shadow bytes around the buggy address:
  0x0c48801613d0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c48801613e0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c48801613f0: fd fd fd fd fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c4880161400: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c4880161410: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c4880161420: fd fd fd[fd]fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c4880161430: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c4880161440: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c4880161450: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c4880161460: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c4880161470: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==1352633==ABORTING


Dmitri.
--

Dmitri A. Sergatskov <dasergatskov>
Thu 11 Feb 2021 09:19:37 PM UTC, comment #2: 

Running on linux with ASAN I got:

octave:2> pkg test sparsersb
Testing functions in package 'sparsersb':

Integrated test scripts:

  ../sparsersb-1.0.8/x86_64-pc-linux-gnu-api-v55/sparsersb.cc-tst =================================================================
==1335615==ERROR: AddressSanitizer: heap-use-after-free on address 0x603003dc2550 at pc 0x7fb18161d0bc bp 0x7fb147a32a00 sp 0x7fb147a321a8
READ of size 1 at 0x603003dc2550 thread T6 (QThread)
    #0 0x7fb18161d0bb  (/lib64/libasan.so.5+0xba0bb)
    #1 0x7fb142f064b4 in rsb__stropts_set /home/dima/src/librsb-1.2.0.9/rsb_stropts.c:28
    #2 0x7fb142eab1f8 in rsb__do_set_initopt_as_string /home/dima/src/librsb-1.2.0.9/rsb_internals.c:3728
    #3 0x7fb142e7ae3f in rsb_lib_set_opt_str /home/dima/src/librsb-1.2.0.9/rsb_rsb.c:143
    #4 0x7fb143cf2183 in Fsparsersb(octave_value_list const&, int) /tmp/oct-M5EBar/sparsersb-1.0.8/src/sparsersb.cc:2828
    #5 0x7fb17ee168af in octave_builtin::execute(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-builtin.cc:59
    #6 0x7fb17ef0ea1d in octave_function::call(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-fcn.cc:57
    #7 0x7fb17f2b7d4a in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-idx.cc:402
    #8 0x7fb17f2bdb1e in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) (/usr/local/lib/octave/6.1.91/liboctinterp.so.8+0x18cab1e)
    #9 0x7fb17f26e43c in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3032
    #10 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #11 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #12 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #13 0x7fb17f26c0d4 in octave::tree_evaluator::execute_user_function(octave_user_function&, int, octave_value_list const&) ../libinterp/parse-tree/pt-eval.cc:2771
    #14 0x7fb17f0191f5 in octave_user_function::execute(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:496
    #15 0x7fb17f019053 in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:489
    #16 0x7fb17f2b7d4a in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-idx.cc:402
    #17 0x7fb17f2560bf in octave::tree_evaluator::eval_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, int&, int) ../libinterp/parse-tree/pt-eval.cc:508
    #18 0x7fb17f256d8f in octave::tree_evaluator::eval(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int) ../libinterp/parse-tree/pt-eval.cc:567
    #19 0x7fb17fb63b68 in octave::interpreter::eval(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int) ../libinterp/corefcn/interpreter.cc:1482
    #20 0x7fb17f1f4cc2 in Feval(octave::interpreter&, octave_value_list const&, int) ../libinterp/parse-tree/oct-parse.yy:5592
    #21 0x7fb17ee16a7a in octave_builtin::execute(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-builtin.cc:65
    #22 0x7fb17ef0ea1d in octave_function::call(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-fcn.cc:57
    #23 0x7fb17f2b7d4a in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-idx.cc:402
    #24 0x7fb17f2bdb1e in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) (/usr/local/lib/octave/6.1.91/liboctinterp.so.8+0x18cab1e)
    #25 0x7fb17f26e43c in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3032
    #26 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #27 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #28 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #29 0x7fb17f26fdd0 in octave::tree_evaluator::visit_try_catch_command(octave::tree_try_catch_command&) ../libinterp/parse-tree/pt-eval.cc:3228
    #30 0x7fb17f2a3e28 in octave::tree_try_catch_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-except.h:84
    #31 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #32 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #33 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #34 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #35 0x7fb17f26d687 in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) ../libinterp/parse-tree/pt-eval.cc:2886
    #36 0x7fb17f28665c in octave::tree_if_command_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-select.h:118
    #37 0x7fb17f26d21b in octave::tree_evaluator::visit_if_command(octave::tree_if_command&) ../libinterp/parse-tree/pt-eval.cc:2864
    #38 0x7fb17f2d5ec4 in octave::tree_if_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-select.h:151
    #39 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #40 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #41 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #42 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #43 0x7fb17f27139a in octave::tree_evaluator::visit_unwind_protect_command(octave::tree_unwind_protect_command&) ../libinterp/parse-tree/pt-eval.cc:3370
    #44 0x7fb17f2a3ea6 in octave::tree_unwind_protect_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-except.h:151
    #45 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #46 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #47 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #48 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #49 0x7fb17f268785 in octave::tree_evaluator::visit_simple_for_command(octave::tree_simple_for_command&) ../libinterp/parse-tree/pt-eval.cc:2465
    #50 0x7fb17f2c7fd6 in octave::tree_simple_for_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-loop.h:222
    #51 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #52 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #53 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #54 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #55 0x7fb17f26c0d4 in octave::tree_evaluator::execute_user_function(octave_user_function&, int, octave_value_list const&) ../libinterp/parse-tree/pt-eval.cc:2771
    #56 0x7fb17f0191f5 in octave_user_function::execute(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:496
    #57 0x7fb17f019053 in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:489
    #58 0x7fb17f2b7d4a in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-idx.cc:402
    #59 0x7fb17f236a2e in octave::tree_multi_assignment::evaluate_n(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-assign.cc:201
    #60 0x7fb17f23a746 in octave::tree_multi_assignment::evaluate(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-assign.h:156
    #61 0x7fb17f26e43c in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3032
    #62 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #63 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #64 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #65 0x7fb17f26d687 in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) ../libinterp/parse-tree/pt-eval.cc:2886
    #66 0x7fb17f28665c in octave::tree_if_command_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-select.h:118
    #67 0x7fb17f26d21b in octave::tree_evaluator::visit_if_command(octave::tree_if_command&) ../libinterp/parse-tree/pt-eval.cc:2864
    #68 0x7fb17f2d5ec4 in octave::tree_if_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-select.h:151
    #69 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #70 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #71 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #72 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #73 0x7fb17f26d687 in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) ../libinterp/parse-tree/pt-eval.cc:2886
    #74 0x7fb17f28665c in octave::tree_if_command_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-select.h:118
    #75 0x7fb17f26d21b in octave::tree_evaluator::visit_if_command(octave::tree_if_command&) ../libinterp/parse-tree/pt-eval.cc:2864
    #76 0x7fb17f2d5ec4 in octave::tree_if_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-select.h:151
    #77 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #78 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #79 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #80 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #81 0x7fb17f268785 in octave::tree_evaluator::visit_simple_for_command(octave::tree_simple_for_command&) ../libinterp/parse-tree/pt-eval.cc:2465
    #82 0x7fb17f2c7fd6 in octave::tree_simple_for_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-loop.h:222
    #83 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #84 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #85 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #86 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #87 0x7fb17f27139a in octave::tree_evaluator::visit_unwind_protect_command(octave::tree_unwind_protect_command&) ../libinterp/parse-tree/pt-eval.cc:3370
    #88 0x7fb17f2a3ea6 in octave::tree_unwind_protect_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-except.h:151
    #89 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #90 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #91 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #92 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #93 0x7fb17f26c0d4 in octave::tree_evaluator::execute_user_function(octave_user_function&, int, octave_value_list const&) ../libinterp/parse-tree/pt-eval.cc:2771
    #94 0x7fb17f0191f5 in octave_user_function::execute(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:496
    #95 0x7fb17f019053 in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:489
    #96 0x7fb17f2b7d4a in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-idx.cc:402
    #97 0x7fb17f236a2e in octave::tree_multi_assignment::evaluate_n(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-assign.cc:201
    #98 0x7fb17f23a746 in octave::tree_multi_assignment::evaluate(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-assign.h:156
    #99 0x7fb17f26e43c in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3032
    #100 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #101 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #102 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #103 0x7fb17f26d687 in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) ../libinterp/parse-tree/pt-eval.cc:2886
    #104 0x7fb17f28665c in octave::tree_if_command_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-select.h:118
    #105 0x7fb17f26d21b in octave::tree_evaluator::visit_if_command(octave::tree_if_command&) ../libinterp/parse-tree/pt-eval.cc:2864
    #106 0x7fb17f2d5ec4 in octave::tree_if_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-select.h:151
    #107 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #108 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #109 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #110 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #111 0x7fb17f268785 in octave::tree_evaluator::visit_simple_for_command(octave::tree_simple_for_command&) ../libinterp/parse-tree/pt-eval.cc:2465
    #112 0x7fb17f2c7fd6 in octave::tree_simple_for_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-loop.h:222
    #113 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #114 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #115 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #116 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #117 0x7fb17f26c0d4 in octave::tree_evaluator::execute_user_function(octave_user_function&, int, octave_value_list const&) ../libinterp/parse-tree/pt-eval.cc:2771
    #118 0x7fb17f0191f5 in octave_user_function::execute(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:496
    #119 0x7fb17f019053 in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:489
    #120 0x7fb17f2b7d4a in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-idx.cc:402
    #121 0x7fb17f236a2e in octave::tree_multi_assignment::evaluate_n(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-assign.cc:201
    #122 0x7fb17f23a746 in octave::tree_multi_assignment::evaluate(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-assign.h:156
    #123 0x7fb17f26e43c in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3032
    #124 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #125 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #126 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #127 0x7fb17f26891d in octave::tree_evaluator::visit_simple_for_command(octave::tree_simple_for_command&) ../libinterp/parse-tree/pt-eval.cc:2479
    #128 0x7fb17f2c7fd6 in octave::tree_simple_for_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-loop.h:222
    #129 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #130 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #131 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #132 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #133 0x7fb17f26fdd0 in octave::tree_evaluator::visit_try_catch_command(octave::tree_try_catch_command&) ../libinterp/parse-tree/pt-eval.cc:3228
    #134 0x7fb17f2a3e28 in octave::tree_try_catch_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-except.h:84
    #135 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #136 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #137 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #138 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #139 0x7fb17f27139a in octave::tree_evaluator::visit_unwind_protect_command(octave::tree_unwind_protect_command&) ../libinterp/parse-tree/pt-eval.cc:3370
    #140 0x7fb17f2a3ea6 in octave::tree_unwind_protect_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-except.h:151
    #141 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #142 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #143 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #144 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #145 0x7fb17f26c0d4 in octave::tree_evaluator::execute_user_function(octave_user_function&, int, octave_value_list const&) ../libinterp/parse-tree/pt-eval.cc:2771
    #146 0x7fb17f0191f5 in octave_user_function::execute(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:496
    #147 0x7fb17f019053 in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:489
    #148 0x7fb17f2b7d4a in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-idx.cc:402
    #149 0x7fb17f2bdb1e in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) (/usr/local/lib/octave/6.1.91/liboctinterp.so.8+0x18cab1e)
    #150 0x7fb17f26e43c in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3032
    #151 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #152 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #153 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #154 0x7fb17f26d687 in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) ../libinterp/parse-tree/pt-eval.cc:2886
    #155 0x7fb17f28665c in octave::tree_if_command_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-select.h:118
    #156 0x7fb17f26d21b in octave::tree_evaluator::visit_if_command(octave::tree_if_command&) ../libinterp/parse-tree/pt-eval.cc:2864
    #157 0x7fb17f2d5ec4 in octave::tree_if_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-select.h:151
    #158 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #159 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #160 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #161 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #162 0x7fb17f26891d in octave::tree_evaluator::visit_simple_for_command(octave::tree_simple_for_command&) ../libinterp/parse-tree/pt-eval.cc:2479
    #163 0x7fb17f2c7fd6 in octave::tree_simple_for_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-loop.h:222
    #164 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #165 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #166 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #167 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #168 0x7fb17f27139a in octave::tree_evaluator::visit_unwind_protect_command(octave::tree_unwind_protect_command&) ../libinterp/parse-tree/pt-eval.cc:3370
    #169 0x7fb17f2a3ea6 in octave::tree_unwind_protect_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-except.h:151
    #170 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #171 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #172 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #173 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #174 0x7fb17f26f951 in octave::tree_evaluator::visit_switch_command(octave::tree_switch_command&) ../libinterp/parse-tree/pt-eval.cc:3192
    #175 0x7fb17f2d5fc0 in octave::tree_switch_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-select.h:279
    #176 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #177 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #178 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #179 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #180 0x7fb17f26c0d4 in octave::tree_evaluator::execute_user_function(octave_user_function&, int, octave_value_list const&) ../libinterp/parse-tree/pt-eval.cc:2771
    #181 0x7fb17f0191f5 in octave_user_function::execute(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:496
    #182 0x7fb17f019053 in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:489
    #183 0x7fb17f2b7d4a in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-idx.cc:402
    #184 0x7fb17f2bdb1e in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) (/usr/local/lib/octave/6.1.91/liboctinterp.so.8+0x18cab1e)
    #185 0x7fb17f26e43c in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3032
    #186 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #187 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #188 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #189 0x7fb17f255325 in octave::tree_evaluator::eval(std::shared_ptr<octave::tree_statement_list>&, bool) ../libinterp/parse-tree/pt-eval.cc:404
    #190 0x7fb17fb6205c in octave::interpreter::main_loop() ../libinterp/corefcn/interpreter.cc:1269
    #191 0x7fb17fb57b40 in octave::interpreter::execute() ../libinterp/corefcn/interpreter.cc:797
    #192 0x7fb180d37522 in octave::interpreter_qobject::execute() ../libgui/src/interpreter-qobject.cc:87
    #193 0x7fb180ff193f in octave::interpreter_qobject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) libgui/src/moc-interpreter-qobject.cc:95
    #194 0x7fb17c3e7275 in QObject::event(QEvent*) (/lib64/libQt5Core.so.5+0x288275)
    #195 0x7fb17cd075f4 in QApplicationPrivate::notify_helper(QObject*, QEvent*) (/lib64/libQt5Widgets.so.5+0x1675f4)
    #196 0x7fb17cd0eb0f in QApplication::notify(QObject*, QEvent*) (/lib64/libQt5Widgets.so.5+0x16eb0f)
    #197 0x7fb180e52e57 in octave::octave_qapplication::notify(QObject*, QEvent*) ../libgui/src/octave-qobject.cc:136
    #198 0x7fb17c3bd325 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (/lib64/libQt5Core.so.5+0x25e325)
    #199 0x7fb17c3c0596 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) (/lib64/libQt5Core.so.5+0x261596)
    #200 0x7fb17c410406  (/lib64/libQt5Core.so.5+0x2b1406)
    #201 0x7fb16f3c567c in g_main_context_dispatch (/lib64/libglib-2.0.so.0+0x4d67c)
    #202 0x7fb16f3c5a47  (/lib64/libglib-2.0.so.0+0x4da47)
    #203 0x7fb16f3c5adf in g_main_context_iteration (/lib64/libglib-2.0.so.0+0x4dadf)
    #204 0x7fb17c41018a in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (/lib64/libQt5Core.so.5+0x2b118a)
    #205 0x7fb17c3bc18a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (/lib64/libQt5Core.so.5+0x25d18a)
    #206 0x7fb17c21ad41 in QThread::exec() (/lib64/libQt5Core.so.5+0xbbd41)
    #207 0x7fb17c21c075  (/lib64/libQt5Core.so.5+0xbd075)
    #208 0x7fb1734a6149 in start_thread (/lib64/libpthread.so.0+0x8149)
    #209 0x7fb1731d7f22 in clone (/lib64/libc.so.6+0xfcf22)

0x603003dc2550 is located 0 bytes inside of 31-byte region [0x603003dc2550,0x603003dc256f)
freed by thread T6 (QThread) here:
    #0 0x7fb181655688 in operator delete(void*) (/lib64/libasan.so.5+0xf2688)
    #1 0x7fb143cf2117 in Fsparsersb(octave_value_list const&, int) /tmp/oct-M5EBar/sparsersb-1.0.8/src/sparsersb.cc:2825
    #2 0x7fb17ee168af in octave_builtin::execute(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-builtin.cc:59
    #3 0x7fb17ef0ea1d in octave_function::call(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-fcn.cc:57
    #4 0x7fb17f2b7d4a in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-idx.cc:402
    #5 0x7fb17f2bdb1e in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) (/usr/local/lib/octave/6.1.91/liboctinterp.so.8+0x18cab1e)
    #6 0x7fb17f26e43c in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3032
    #7 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #8 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #9 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #10 0x7fb17f26c0d4 in octave::tree_evaluator::execute_user_function(octave_user_function&, int, octave_value_list const&) ../libinterp/parse-tree/pt-eval.cc:2771
    #11 0x7fb17f0191f5 in octave_user_function::execute(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:496
    #12 0x7fb17f019053 in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:489
    #13 0x7fb17f2b7d4a in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-idx.cc:402
    #14 0x7fb17f2560bf in octave::tree_evaluator::eval_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, int&, int) ../libinterp/parse-tree/pt-eval.cc:508
    #15 0x7fb17f256d8f in octave::tree_evaluator::eval(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int) ../libinterp/parse-tree/pt-eval.cc:567
    #16 0x7fb17fb63b68 in octave::interpreter::eval(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int) ../libinterp/corefcn/interpreter.cc:1482
    #17 0x7fb17f1f4cc2 in Feval(octave::interpreter&, octave_value_list const&, int) ../libinterp/parse-tree/oct-parse.yy:5592
    #18 0x7fb17ee16a7a in octave_builtin::execute(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-builtin.cc:65
    #19 0x7fb17ef0ea1d in octave_function::call(octave::tree_evaluator&, int, octave_value_list const&) ../libinterp/octave-value/ov-fcn.cc:57
    #20 0x7fb17f2b7d4a in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) ../libinterp/parse-tree/pt-idx.cc:402
    #21 0x7fb17f2bdb1e in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) (/usr/local/lib/octave/6.1.91/liboctinterp.so.8+0x18cab1e)
    #22 0x7fb17f26e43c in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3032
    #23 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124
    #24 0x7fb17f26f0cc in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) ../libinterp/parse-tree/pt-eval.cc:3117
    #25 0x7fb17ed46bbe in octave::tree_statement_list::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:201
    #26 0x7fb17f26fdd0 in octave::tree_evaluator::visit_try_catch_command(octave::tree_try_catch_command&) ../libinterp/parse-tree/pt-eval.cc:3228
    #27 0x7fb17f2a3e28 in octave::tree_try_catch_command::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-except.h:84
    #28 0x7fb17f26e1bf in octave::tree_evaluator::visit_statement(octave::tree_statement&) ../libinterp/parse-tree/pt-eval.cc:3009
    #29 0x7fb17f2d9586 in octave::tree_statement::accept(octave::tree_walker&) ../libinterp/parse-tree/pt-stmt.h:124

previously allocated by thread T6 (QThread) here:
    #0 0x7fb1816547b0 in operator new(unsigned long) (/lib64/libasan.so.5+0xf17b0)
    #1 0x7fb17d52f0f8 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace_aux(unsigned long, unsigned long, unsigned long, char) (/lib64/libqscintilla2_qt5.so.15+0x2b10f8)
    #2 0x7fb180bcb0e9 in octave::refcount<long>::operator--() ../liboctave/util/oct-refcount.h:67

Thread T6 (QThread) created by T0 here:
    #0 0x7fb1815b5ea3 in __interceptor_pthread_create (/lib64/libasan.so.5+0x52ea3)
    #1 0x7fb17c21baf6 in QThread::start(QThread::Priority) (/lib64/libQt5Core.so.5+0xbcaf6)

SUMMARY: AddressSanitizer: heap-use-after-free (/lib64/libasan.so.5+0xba0bb)
Shadow bytes around the buggy address:
  0x0c06807b0450: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c06807b0460: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c06807b0470: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c06807b0480: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c06807b0490: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c06807b04a0: fa fa fa fa 00 00 00 fa fa fa[fd]fd fd fd fa fa
  0x0c06807b04b0: 00 00 00 fa fa fa fd fd fd fa fa fa 00 00 00 fa
  0x0c06807b04c0: fa fa fd fd fd fa fa fa fd fd fd fa fa fa 00 00
  0x0c06807b04d0: 00 fa fa fa 00 00 00 fa fa fa 00 00 00 fa fa fa
  0x0c06807b04e0: 00 00 00 fa fa fa 00 00 00 fa fa fa 00 00 00 fa
  0x0c06807b04f0: fa fa fd fd fd fa fa fa fd fd fd fa fa fa fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==1335615==ABORTING


Dmitri.
--

Dmitri A. Sergatskov <dasergatskov>
Thu 11 Feb 2021 06:47:06 PM UTC, comment #1: 

And also crashes dev Octave on Windows.

Status => confirmed

Philip Nienhuis <philipnienhuis>
Group Member
Thu 11 Feb 2021 11:12:08 AM UTC, original submission:  

Running `pkg test sparsersb` with Octave 6.1.90 on Windows 10 crashes Octave with the following top of the backtrace:

Thread 17 received signal SIGSEGV, Segmentation fault.
[Switching to Thread 15260.0x37c8]
0x00007ff8cc1b151d in ntdll!RtlEnterCriticalSection ()
   from C:\WINDOWS\SYSTEM32\ntdll.dll
(gdb) bt
#0  0x00007ff8cc1b151d in ntdll!RtlEnterCriticalSection ()
   from C:\WINDOWS\SYSTEM32\ntdll.dll
#1  0x000000002ac584b7 in sparsersb!rsb.do_util_merge_sorted_subarrays_in_place ()
   from C:\Program Files\GNU Octave\Octave-6.1.90\mingw64\lib\octave\packages\sparsersb-1.0.8\x86_64-w64-mingw32-api-v55\sparsersb.oct
#2  0x000000002ac443ed in sparsersb!rsb__do_get_pixmap_RGB_from_matrix ()
   from C:\Program Files\GNU Octave\Octave-6.1.90\mingw64\lib\octave\packages\sparsersb-1.0.8\x86_64-w64-mingw32-api-v55\sparsersb.oct
#3  0x000000002ac44d7b in sparsersb!rsb__do_get_pixmap_RGB_from_matrix ()
   from C:\Program Files\GNU Octave\Octave-6.1.90\mingw64\lib\octave\packages\sparsersb-1.0.8\x86_64-w64-mingw32-api-v55\sparsersb.oct
#4  0x000000002ac46914 in sparsersb!rsb.do_mtx_render ()
   from C:\Program Files\GNU Octave\Octave-6.1.90\mingw64\lib\octave\packages\sparsersb-1.0.8\x86_64-w64-mingw32-api-v55\sparsersb.oct
#5  0x000000002a957589 in sparsersb!_Z10FsparsersbRK17octave_value_listi ()
   from C:\Program Files\GNU Octave\Octave-6.1.90\mingw64\lib\octave\packages\sparsersb-1.0.8\x86_64-w64-mingw32-api-v55\sparsersb.oct
#6  0x000000006f6c05a7 in liboctinterp-8!_ZN14octave_builtin7executeERN6octave14tree_evaluatorEiRK17octave_value_list ()
   from C:\PROGRA~1\GNUOCT~1\OCTAVE~2.90\mingw64\bin\liboctinterp-8.dll
#7  0x000000006f7027f4 in liboctinterp-8!_ZN15octave_function4callERN6octave14tree_evaluatorEiRK17octave_value_list ()
   from C:\PROGRA~1\GNUOCT~1\OCTAVE~2.90\mingw64\bin\liboctinterp-8.dll
--Type <RET> for more, q to quit, c to continue without paging--


Is this bug #58957 again or is this something new?

The modifications to the build rule made for that bug are still in place.

CC'ing Michele as the package maintainer.

Markus Mützel <mmuetzel>
Group administrator

 

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

Attach Files:
   
   
Comment:
   

Attached Files
file #51943:  fntests_sparsersb.log added by mmuetzel (2KiB - application/octet-stream)

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -email is unavailable- added by dezperado (Posted a comment)
  • -email is unavailable- added by dasergatskov (Posted a comment)
  • -email is unavailable- added by mmuetzel (Submitted the item)
  • -email is unavailable- added by mmuetzel
  •  

    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 8 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2022-05-27 mmuetzel StatusReady For Test Fixed
        Open/ClosedOpen Closed
    2021-09-21 dezperado Attached File- Added librsb-1.2.0.10-test-limits-fix.tar.gz, #51951
    2021-09-19 mmuetzel StatusIn Progress Ready For Test
    2021-09-19 mmuetzel Attached File- Added fntests_sparsersb.log, #51943
        StatusConfirmed In Progress
    2021-02-11 philipnienhuis StatusNone Confirmed
    2021-02-11 mmuetzel Carbon-Copy- Added dezperado

    Back to the top

    Powered by Savane 3.13-758e.
    Corresponding source code