From 1d59ba9f01d29fe2c9f0591a09c9def682a4a614 Mon Sep 17 00:00:00 2001 From: mbkma Date: Thu, 14 Aug 2025 17:22:01 +0200 Subject: =?UTF-8?q?fix=20Expressions=20like=20e=C2=B23=20crashes=20mate-ca?= =?UTF-8?q?lc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/parser.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/parser.c') diff --git a/src/parser.c b/src/parser.c index d60c142..2cce157 100644 --- a/src/parser.c +++ b/src/parser.c @@ -219,8 +219,13 @@ p_destroy_all_nodes(ParseNode* node) p_destroy_all_nodes(node->right); /* Don't call free for tokens, as they are allocated and freed in lexer. */ /* WARNING: If node->value is freed elsewhere, please assign it NULL before calling p_destroy_all_nodes(). */ - if(node->value) + /* Fix for crash in expressions like "e²3" where node->value may be invalid */ + if(node->value && node->value != (void*)node->token) + { + /* Only free if value was dynamically allocated by parser functions */ + /* Skip freeing if value points to token data or other non-malloc'd memory */ free(node->value); + } free(node); } -- cgit v1.2.1