Mercurial > octave
diff libinterp/parse-tree/parse.h @ 26512:4d6392c879d7 stable
avoid double free of lexer on exit (bug #55347)
* parse.h (parser::parser): Accept pointer to lexer object instead of
reference. Comment to state that lexer object must be allocated by
new and will be deleted by the parser destructor.
* pt-eval.cc (tree_evaluator::repl): Construct parser using pointer to
lexer. Don't delete lexer object.
(tree_evaluator::repl, tree_evaluator::eval_string): Avoid confusing
"parser parser" declaration by renaming parser objects to be
repl_parser and eval_parser, respectively.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 09 Jan 2019 14:49:01 -0500 |
parents | 6e698f4606db |
children | 32890ede698c 2310164737b3 |
line wrap: on
line diff
--- a/libinterp/parse-tree/parse.h Wed Jan 09 09:05:31 2019 +0100 +++ b/libinterp/parse-tree/parse.h Wed Jan 09 14:49:01 2019 -0500 @@ -498,8 +498,12 @@ : base_parser (*(new lexer (eval_string, interp))) { } - parser (lexer& lxr) - : base_parser (lxr) + // The lexer must be allocated with new. The parser object + // takes ownership of and deletes the lexer object in its + // destructor. + + parser (lexer *lxr) + : base_parser (*lxr) { } // No copying!