octave-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Octave-bug-tracker] [bug #55400] contour3 causes heap-buffer-overflow w


From: Dmitri A. Sergatskov
Subject: [Octave-bug-tracker] [bug #55400] contour3 causes heap-buffer-overflow with memory sanitizer
Date: Sat, 5 Jan 2019 20:16:37 -0500 (EST)
User-agent: Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:64.0) Gecko/20100101 Firefox/64.0

URL:
  <https://savannah.gnu.org/bugs/?55400>

                 Summary: contour3 causes heap-buffer-overflow with memory
sanitizer
                 Project: GNU Octave
            Submitted by: dasergatskov
            Submitted on: Sun 06 Jan 2019 01:16:35 AM UTC
                Category: Plotting
                Severity: 3 - Normal
                Priority: 5 - Normal
              Item Group: Segfault, Bus Error, etc.
                  Status: None
             Assigned to: None
         Originator Name: 
        Originator Email: 
             Open/Closed: Open
         Discussion Lock: Any
                 Release: 5.0.1
        Operating System: GNU/Linux

    _______________________________________________________

Details:

When compiled with address sanitizer (with or *without* Qt)
contour3(peaks(19)) causes:


octave:1> contour3(peaks(19))
=================================================================
==8114==ERROR: AddressSanitizer: heap-buffer-overflow on address
0x606001488c00 at pc 0x7fc08d71a9b4 bp 0x7ffc92a0b8d0 sp 0x7ffc92a0b8c0
READ of size 8 at 0x606001488c00 thread T0
    #0 0x7fc08d71a9b3 in patch::properties::update_data()
../libinterp/corefcn/graphics.cc:9456
    #1 0x7fc08d7ab9b3 in patch::properties::update_faces()
libinterp/corefcn/graphics.h:9385
    #2 0x7fc08d7a8310 in patch::properties::set_faces(octave_value const&)
libinterp/corefcn/graphics.h:9079
    #3 0x7fc08d5c613e in patch::properties::set(caseless_str const&,
octave_value const&) libinterp/corefcn/graphics-props.cc:4584
    #4 0x7fc08d7755a6 in base_graphics_object::set(caseless_str const&,
octave_value const&) libinterp/corefcn/graphics.h:2689
    #5 0x7fc08d498929 in graphics_object::set_value_or_default(caseless_str
const&, octave_value const&) ../libinterp/corefcn/graphics.cc:2652
    #6 0x7fc08d497994 in graphics_object::set(octave_value_list const&)
../libinterp/corefcn/graphics.cc:2431
    #7 0x7fc08d49a0d0 in xset ../libinterp/corefcn/graphics.cc:2825
    #8 0x7fc08d750f84 in make_graphics_object
../libinterp/corefcn/graphics.cc:12475
    #9 0x7fc08d7547a0 in F__go_patch__(octave_value_list const&, int)
../libinterp/corefcn/graphics.cc:12693
    #10 0x7fc08cc38190 in octave_builtin::call(octave::tree_evaluator&, int,
octave_value_list const&) ../libinterp/octave-value/ov-builtin.cc:65
    #11 0x7fc08d0a7efe in
octave::tree_evaluator::visit_index_expression(octave::tree_index_expression&)
../libinterp/parse-tree/pt-eval.cc:2007
    #12 0x7fc08d0e3444 in
octave::tree_index_expression::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-idx.h:102
    #13 0x7fc08cd0bda1 in
octave::tree_evaluator::evaluate(octave::tree_expression*, int)
../libinterp/parse-tree/pt-eval.h:312
    #14 0x7fc08d0fd957 in
octave::tm_row_const::init(octave::tree_argument_list const&,
octave::tree_evaluator&) ../libinterp/parse-tree/pt-tm-const.cc:168
    #15 0x7fc08d104fbf in
octave::tm_row_const::tm_row_const(octave::tree_argument_list const&,
octave::tree_evaluator&) ../libinterp/parse-tree/pt-tm-const.h:154
    #16 0x7fc08d100471 in octave::tm_const::init(octave::tree_matrix const&)
../libinterp/parse-tree/pt-tm-const.cc:308
    #17 0x7fc08d0c2512 in octave::tm_const::tm_const(octave::tree_matrix
const&, octave::tree_evaluator&)
(/home/dima/src/octave/gcc_asan_min/libinterp/.libs/liboctinterp.so.6+0x173f512)
    #18 0x7fc08d0a9d2e in
octave::tree_evaluator::visit_matrix(octave::tree_matrix&)
../libinterp/parse-tree/pt-eval.cc:2226
    #19 0x7fc08d0ebb9e in octave::tree_matrix::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-mat.h:70
    #20 0x7fc08cd0bda1 in
octave::tree_evaluator::evaluate(octave::tree_expression*, int)
../libinterp/parse-tree/pt-eval.h:312
    #21 0x7fc08d0aefc1 in
octave::tree_evaluator::visit_simple_assignment(octave::tree_simple_assignment&)
../libinterp/parse-tree/pt-eval.cc:2680
    #22 0x7fc08d085c9a in
octave::tree_simple_assignment::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-assign.h:84
    #23 0x7fc08cd0bda1 in
octave::tree_evaluator::evaluate(octave::tree_expression*, int)
../libinterp/parse-tree/pt-eval.h:312
    #24 0x7fc08d0b027b in
octave::tree_evaluator::visit_statement(octave::tree_statement&)
../libinterp/parse-tree/pt-eval.cc:2775
    #25 0x7fc08d0facc6 in octave::tree_statement::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-stmt.h:119
    #26 0x7fc08d0b095c in
octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&)
../libinterp/parse-tree/pt-eval.cc:2844
    #27 0x7fc08cd0c9cc in
octave::tree_statement_list::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-stmt.h:194
    #28 0x7fc08d0b10e0 in
octave::tree_evaluator::visit_switch_command(octave::tree_switch_command&)
../libinterp/parse-tree/pt-eval.cc:2919
    #29 0x7fc08d0f7af6 in
octave::tree_switch_command::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-select.h:276
    #30 0x7fc08d0b00a6 in
octave::tree_evaluator::visit_statement(octave::tree_statement&)
../libinterp/parse-tree/pt-eval.cc:2753
    #31 0x7fc08d0facc6 in octave::tree_statement::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-stmt.h:119
    #32 0x7fc08d0b095c in
octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&)
../libinterp/parse-tree/pt-eval.cc:2844
    #33 0x7fc08cd0c9cc in
octave::tree_statement_list::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-stmt.h:194
    #34 0x7fc08d0b2e68 in
octave::tree_evaluator::visit_while_command(octave::tree_while_command&)
../libinterp/parse-tree/pt-eval.cc:3172
    #35 0x7fc08d0eb28c in
octave::tree_while_command::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-loop.h:95
    #36 0x7fc08d0b00a6 in
octave::tree_evaluator::visit_statement(octave::tree_statement&)
../libinterp/parse-tree/pt-eval.cc:2753
    #37 0x7fc08d0facc6 in octave::tree_statement::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-stmt.h:119
    #38 0x7fc08d0b095c in
octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&)
../libinterp/parse-tree/pt-eval.cc:2844
    #39 0x7fc08cd0c9cc in
octave::tree_statement_list::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-stmt.h:194
    #40 0x7fc08d0a70f7 in
octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&)
../libinterp/parse-tree/pt-eval.cc:1862
    #41 0x7fc08d089d2e in
octave::tree_if_command_list::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-select.h:115
    #42 0x7fc08d0a6d09 in
octave::tree_evaluator::visit_if_command(octave::tree_if_command&)
../libinterp/parse-tree/pt-eval.cc:1840
    #43 0x7fc08d0f7a0e in
octave::tree_if_command::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-select.h:148
    #44 0x7fc08d0b00a6 in
octave::tree_evaluator::visit_statement(octave::tree_statement&)
../libinterp/parse-tree/pt-eval.cc:2753
    #45 0x7fc08d0facc6 in octave::tree_statement::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-stmt.h:119
    #46 0x7fc08d0b095c in
octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&)
../libinterp/parse-tree/pt-eval.cc:2844
    #47 0x7fc08cd0c9cc in
octave::tree_statement_list::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-stmt.h:194
    #48 0x7fc08d0a5040 in
octave::tree_evaluator::execute_user_function(octave_user_function&, int,
octave_value_list const&) ../libinterp/parse-tree/pt-eval.cc:1694
    #49 0x7fc08ce8bf8e in octave_user_function::call(octave::tree_evaluator&,
int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:455
    #50 0x7fc08d0a7efe in
octave::tree_evaluator::visit_index_expression(octave::tree_index_expression&)
../libinterp/parse-tree/pt-eval.cc:2007
    #51 0x7fc08d0e3444 in
octave::tree_index_expression::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-idx.h:102
    #52 0x7fc08cd0bda1 in
octave::tree_evaluator::evaluate(octave::tree_expression*, int)
../libinterp/parse-tree/pt-eval.h:312
    #53 0x7fc08d0b027b in
octave::tree_evaluator::visit_statement(octave::tree_statement&)
../libinterp/parse-tree/pt-eval.cc:2775
    #54 0x7fc08d0facc6 in octave::tree_statement::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-stmt.h:119
    #55 0x7fc08d0b095c in
octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&)
../libinterp/parse-tree/pt-eval.cc:2844
    #56 0x7fc08cd0c9cc in
octave::tree_statement_list::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-stmt.h:194
    #57 0x7fc08d0a5040 in
octave::tree_evaluator::execute_user_function(octave_user_function&, int,
octave_value_list const&) ../libinterp/parse-tree/pt-eval.cc:1694
    #58 0x7fc08ce8bf8e in octave_user_function::call(octave::tree_evaluator&,
int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:455
    #59 0x7fc08d0a7efe in
octave::tree_evaluator::visit_index_expression(octave::tree_index_expression&)
../libinterp/parse-tree/pt-eval.cc:2007
    #60 0x7fc08d0e3444 in
octave::tree_index_expression::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-idx.h:102
    #61 0x7fc08d0c056d in
octave::tree_evaluator::evaluate_n(octave::tree_expression*, int)
../libinterp/parse-tree/pt-eval.h:343
    #62 0x7fc08d0ab20e in
octave::tree_evaluator::visit_multi_assignment(octave::tree_multi_assignment&)
../libinterp/parse-tree/pt-eval.cc:2319
    #63 0x7fc08d085de0 in
octave::tree_multi_assignment::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-assign.h:153
    #64 0x7fc08cd0bda1 in
octave::tree_evaluator::evaluate(octave::tree_expression*, int)
../libinterp/parse-tree/pt-eval.h:312
    #65 0x7fc08d0b027b in
octave::tree_evaluator::visit_statement(octave::tree_statement&)
../libinterp/parse-tree/pt-eval.cc:2775
    #66 0x7fc08d0facc6 in octave::tree_statement::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-stmt.h:119
    #67 0x7fc08d0b095c in
octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&)
../libinterp/parse-tree/pt-eval.cc:2844
    #68 0x7fc08cd0c9cc in
octave::tree_statement_list::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-stmt.h:194
    #69 0x7fc08d0b2a22 in
octave::tree_evaluator::visit_unwind_protect_command(octave::tree_unwind_protect_command&)
../libinterp/parse-tree/pt-eval.cc:3100
    #70 0x7fc08d0db1d4 in
octave::tree_unwind_protect_command::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-except.h:148
    #71 0x7fc08d0b00a6 in
octave::tree_evaluator::visit_statement(octave::tree_statement&)
../libinterp/parse-tree/pt-eval.cc:2753
    #72 0x7fc08d0facc6 in octave::tree_statement::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-stmt.h:119
    #73 0x7fc08d0b095c in
octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&)
../libinterp/parse-tree/pt-eval.cc:2844
    #74 0x7fc08cd0c9cc in
octave::tree_statement_list::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-stmt.h:194
    #75 0x7fc08d0a5040 in
octave::tree_evaluator::execute_user_function(octave_user_function&, int,
octave_value_list const&) ../libinterp/parse-tree/pt-eval.cc:1694
    #76 0x7fc08ce8bf8e in octave_user_function::call(octave::tree_evaluator&,
int, octave_value_list const&) ../libinterp/octave-value/ov-usr-fcn.cc:455
    #77 0x7fc08d0a7efe in
octave::tree_evaluator::visit_index_expression(octave::tree_index_expression&)
../libinterp/parse-tree/pt-eval.cc:2007
    #78 0x7fc08d0e3444 in
octave::tree_index_expression::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-idx.h:102
    #79 0x7fc08cd0bda1 in
octave::tree_evaluator::evaluate(octave::tree_expression*, int)
../libinterp/parse-tree/pt-eval.h:312
    #80 0x7fc08d0b027b in
octave::tree_evaluator::visit_statement(octave::tree_statement&)
../libinterp/parse-tree/pt-eval.cc:2775
    #81 0x7fc08d0facc6 in octave::tree_statement::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-stmt.h:119
    #82 0x7fc08d0b095c in
octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&)
../libinterp/parse-tree/pt-eval.cc:2844
    #83 0x7fc08cd0c9cc in
octave::tree_statement_list::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-stmt.h:194
    #84 0x7fc08d09614f in octave::tree_evaluator::repl(bool)
../libinterp/parse-tree/pt-eval.cc:105
    #85 0x7fc08d855d50 in octave::interpreter::main_loop()
../libinterp/corefcn/interpreter.cc:949
    #86 0x7fc08d852df3 in octave::interpreter::execute()
../libinterp/corefcn/interpreter.cc:694
    #87 0x7fc08c1c8d5e in octave::cli_application::execute()
../libinterp/octave.cc:391
    #88 0x402954 in main ../src/main-cli.cc:92
    #89 0x7fc0863fa412 in __libc_start_main (/lib64/libc.so.6+0x24412)
    #90 0x4022ad in _start
(/home/dima/src/octave/gcc_asan_min/src/.libs/lt-octave-cli+0x4022ad)

0x606001488c00 is located 0 bytes to the right of 64-byte region
[0x606001488bc0,0x606001488c00)
allocated by thread T0 here:
    #0 0x7fc08e423650 in operator new[](unsigned long)
(/lib64/libasan.so.5+0xf1650)
    #1 0x7fc08c27fc6a in Array<double>::ArrayRep::ArrayRep(double*, long)
../liboctave/array/Array.h:140
    #2 0x7fc08c3faf49 in Array<double>::make_unique()
../liboctave/array/Array.h:191
    #3 0x7fc08c3f86e9 in Array<double>::elem(long)
../liboctave/array/Array.h:490
    #4 0x7fc08c73ba17 in Array<double>::elem(long, long)
../liboctave/array/Array.h:494
    #5 0x7fc08ce3286a in Array<double>::operator()(long, long)
../liboctave/array/Array.h:503
    #6 0x7fc08d71a934 in patch::properties::update_data()
../libinterp/corefcn/graphics.cc:9452
    #7 0x7fc08d7ab9b3 in patch::properties::update_faces()
libinterp/corefcn/graphics.h:9385
    #8 0x7fc08d7a8310 in patch::properties::set_faces(octave_value const&)
libinterp/corefcn/graphics.h:9079
    #9 0x7fc08d5c613e in patch::properties::set(caseless_str const&,
octave_value const&) libinterp/corefcn/graphics-props.cc:4584
    #10 0x7fc08d7755a6 in base_graphics_object::set(caseless_str const&,
octave_value const&) libinterp/corefcn/graphics.h:2689
    #11 0x7fc08d498929 in graphics_object::set_value_or_default(caseless_str
const&, octave_value const&) ../libinterp/corefcn/graphics.cc:2652
    #12 0x7fc08d497994 in graphics_object::set(octave_value_list const&)
../libinterp/corefcn/graphics.cc:2431
    #13 0x7fc08d49a0d0 in xset ../libinterp/corefcn/graphics.cc:2825
    #14 0x7fc08d750f84 in make_graphics_object
../libinterp/corefcn/graphics.cc:12475
    #15 0x7fc08d7547a0 in F__go_patch__(octave_value_list const&, int)
../libinterp/corefcn/graphics.cc:12693
    #16 0x7fc08cc38190 in octave_builtin::call(octave::tree_evaluator&, int,
octave_value_list const&) ../libinterp/octave-value/ov-builtin.cc:65
    #17 0x7fc08d0a7efe in
octave::tree_evaluator::visit_index_expression(octave::tree_index_expression&)
../libinterp/parse-tree/pt-eval.cc:2007
    #18 0x7fc08d0e3444 in
octave::tree_index_expression::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-idx.h:102
    #19 0x7fc08cd0bda1 in
octave::tree_evaluator::evaluate(octave::tree_expression*, int)
../libinterp/parse-tree/pt-eval.h:312
    #20 0x7fc08d0fd957 in
octave::tm_row_const::init(octave::tree_argument_list const&,
octave::tree_evaluator&) ../libinterp/parse-tree/pt-tm-const.cc:168
    #21 0x7fc08d104fbf in
octave::tm_row_const::tm_row_const(octave::tree_argument_list const&,
octave::tree_evaluator&) ../libinterp/parse-tree/pt-tm-const.h:154
    #22 0x7fc08d100471 in octave::tm_const::init(octave::tree_matrix const&)
../libinterp/parse-tree/pt-tm-const.cc:308
    #23 0x7fc08d0c2512 in octave::tm_const::tm_const(octave::tree_matrix
const&, octave::tree_evaluator&)
(/home/dima/src/octave/gcc_asan_min/libinterp/.libs/liboctinterp.so.6+0x173f512)
    #24 0x7fc08d0a9d2e in
octave::tree_evaluator::visit_matrix(octave::tree_matrix&)
../libinterp/parse-tree/pt-eval.cc:2226
    #25 0x7fc08d0ebb9e in octave::tree_matrix::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-mat.h:70
    #26 0x7fc08cd0bda1 in
octave::tree_evaluator::evaluate(octave::tree_expression*, int)
../libinterp/parse-tree/pt-eval.h:312
    #27 0x7fc08d0aefc1 in
octave::tree_evaluator::visit_simple_assignment(octave::tree_simple_assignment&)
../libinterp/parse-tree/pt-eval.cc:2680
    #28 0x7fc08d085c9a in
octave::tree_simple_assignment::accept(octave::tree_walker&)
../libinterp/parse-tree/pt-assign.h:84
    #29 0x7fc08cd0bda1 in
octave::tree_evaluator::evaluate(octave::tree_expression*, int)
../libinterp/parse-tree/pt-eval.h:312

SUMMARY: AddressSanitizer: heap-buffer-overflow
../libinterp/corefcn/graphics.cc:9456 in patch::properties::update_data()
Shadow bytes around the buggy address:
  0x0c0c80289130: fd fd fd fd fd fd fd fd fa fa fa fa fd fd fd fd
  0x0c0c80289140: fd fd fd fd fa fa fa fa fd fd fd fd fd fd fd fd
  0x0c0c80289150: fa fa fa fa 00 00 00 00 00 00 00 00 fa fa fa fa
  0x0c0c80289160: fd fd fd fd fd fd fd fd fa fa fa fa fd fd fd fd
  0x0c0c80289170: fd fd fd fd fa fa fa fa 00 00 00 00 00 00 00 00
=>0x0c0c80289180:[fa]fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0c80289190: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0c802891a0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0c802891b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0c802891c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c0c802891d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
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
==8114==ABORTING


This particular trace is on octave w/o qt.

Dmitri.
--





    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?55400>

_______________________________________________
  Message sent via Savannah
  https://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]