Repository :
https://github.com/colorer/Colorer-library
On branch : cregexp_refactoring
Link :
https://github.com/colorer/Colorer-library/commit/28a966249066eb7053dc3738356e126799a8c526
>---------------------------------------------------------------
commit 28a966249066eb7053dc3738356e126799a8c526
Author: Aleksey Dobrunov <
cta...@ctapmex.com>
Date: Sun Aug 16 23:57:48 2026 +0500
Fix SRegInfo destructor to free union members by opcode instead of treating the union as a pointer.
>---------------------------------------------------------------
28a966249066eb7053dc3738356e126799a8c526
src/colorer/cregexp/cregexp.cpp | 36 +++++++++++++++++++++++-------------
1 file changed, 23 insertions(+), 13 deletions(-)
diff --git a/src/colorer/cregexp/cregexp.cpp b/src/colorer/cregexp/cregexp.cpp
index 9f1178c..089d5af 100644
--- a/src/colorer/cregexp/cregexp.cpp
+++ b/src/colorer/cregexp/cregexp.cpp
@@ -34,19 +34,29 @@ SRegInfo::SRegInfo()
SRegInfo::~SRegInfo()
{
delete next;
- if (un.param)
- switch (op) {
- case EOps::ReEnum:
- delete un.charclass;
- break;
- case EOps::ReWord:
- delete un.word;
- break;
- default:
- if (op > EOps::ReBlockOps && (op < EOps::ReSymbolOps || op == EOps::ReBrackets || op == EOps::ReNamedBrackets))
- delete un.param;
- break;
- }
+ switch (op) {
+ case EOps::ReEnum:
+ delete un.charclass;
+ break;
+ case EOps::ReWord:
+ delete un.word;
+ break;
+ case EOps::ReBrackets:
+ case EOps::ReNamedBrackets:
+ case EOps::ReOr:
+ case EOps::ReAhead:
+ case EOps::ReNAhead:
+ case EOps::ReBehind:
+ case EOps::ReNBehind:
+ case EOps::ReRangeN:
+ case EOps::ReRangeNM:
+ case EOps::ReNGRangeN:
+ case EOps::ReNGRangeNM:
+ delete un.param;
+ break;
+ default:
+ break;
+ }
}
////////////////////////////////////////////////////////////////////////////