From 9dfac0acd6bb6c4eae164d4b4f3309f85ec5d798 Mon Sep 17 00:00:00 2001 From: GillesDuvert Date: Thu, 7 Sep 2023 17:25:32 +0200 Subject: [PATCH] see #1632 do not delete an object before using something that was defined inside said object. --- src/GDLLexer.hpp | 7 ++++--- src/gdlc.g | 9 +++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/GDLLexer.hpp b/src/GDLLexer.hpp index 123d09632..7411b2ac0 100644 --- a/src/GDLLexer.hpp +++ b/src/GDLLexer.hpp @@ -132,13 +132,14 @@ class CUSTOM_API GDLLexer : public antlr::CharScanner, public GDLTokenTypes // make copy as we delete 'this' antlr::TokenStreamSelector* sel=selector; - // here 'this' is deleted (pops selector) - delete sel->getCurrentStream(); // make sure errors are reported in right file parserPtr->setFilename( static_cast(selector->getCurrentStream())->getFilename()); - + + // here 'this' is deleted (pops selector) + delete sel->getCurrentStream(); + // don't allow EOF until main lexer. Force the // selector to retry for another token. sel->retry(); diff --git a/src/gdlc.g b/src/gdlc.g index 4a7ef5a5c..6920d5d48 100644 --- a/src/gdlc.g +++ b/src/gdlc.g @@ -2152,13 +2152,14 @@ tokens { // make copy as we delete 'this' antlr::TokenStreamSelector* sel=selector; - // here 'this' is deleted (pops selector) - delete sel->getCurrentStream(); - // make sure errors are reported in right file parserPtr->setFilename( static_cast(selector->getCurrentStream())->getFilename()); - + + //GD: see issue #1632 -- deletion must be here and not before previous line! + // here 'this' is deleted (pops selector) + delete sel->getCurrentStream(); + // don't allow EOF until main lexer. Force the // selector to retry for another token. sel->retry();