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!