comparison libinterp/corefcn/stack-frame.cc @ 30199:37ddca7ad9cb stable

avoid internal error and segfault with eval and scripts (bug #61191) * stack-frame.cc (script_stack_frame::get_val_offsets_with_insert): If frame_offset is initially zero then update frame_offset from m_lexical_frame_offsets after calling set_script_offsets_internal. * test/bug-61191/bug-61191.tst, test/bug-61191/subdir/bug_61191.m: New files. * test/bug-61191/module.mk: Update. * test/module.mk: Update.
author John W. Eaton <jwe@octave.org>
date Tue, 21 Sep 2021 13:14:31 -0400
parents d13d090cb03a
children 3e419a830e90
comparison
equal deleted inserted replaced
30193:6cc5315cdf2f 30199:37ddca7ad9cb
198 static std::size_t get_num_symbols (octave_user_script *script); 198 static std::size_t get_num_symbols (octave_user_script *script);
199 199
200 void set_script_offsets (void); 200 void set_script_offsets (void);
201 201
202 void set_script_offsets_internal (const std::map<std::string, 202 void set_script_offsets_internal (const std::map<std::string,
203 symbol_record>& symbols); 203 symbol_record>& symbols);
204 204
205 void resize_and_update_script_offsets (const symbol_record& sym); 205 void resize_and_update_script_offsets (const symbol_record& sym);
206 206
207 symbol_scope get_scope (void) const { return m_script->scope (); } 207 symbol_scope get_scope (void) const { return m_script->scope (); }
208 208
1863 // duplication? 1863 // duplication?
1864 1864
1865 std::map<std::string, symbol_record> tmp_symbols; 1865 std::map<std::string, symbol_record> tmp_symbols;
1866 tmp_symbols[sym.name ()] = sym; 1866 tmp_symbols[sym.name ()] = sym;
1867 set_script_offsets_internal (tmp_symbols); 1867 set_script_offsets_internal (tmp_symbols);
1868
1869 // set_script_offsets_internal may have modified
1870 // m_lexical_frame_offsets and m_value_offsets.
1871
1872 frame_offset = m_lexical_frame_offsets.at (data_offset);
1868 } 1873 }
1869 1874
1870 data_offset = m_value_offsets.at (data_offset); 1875 data_offset = m_value_offsets.at (data_offset);
1871 } 1876 }
1872 else 1877 else