[colorer/Colorer-library] cregexp_refactoring: Reject inverted CRegExp {n,m} ranges at compile time instead of matching past the upper bound. (48f14b4)

0 views
Skip to first unread message

farg...@farmanager.com

unread,
Aug 16, 2026, 3:31:29 PM (12 hours ago) Aug 16
to farco...@googlegroups.com
Repository : https://github.com/colorer/Colorer-library
On branch : cregexp_refactoring
Link : https://github.com/colorer/Colorer-library/commit/48f14b4f71e9570ef8af6e1fae94f49445ad0101

>---------------------------------------------------------------

commit 48f14b4f71e9570ef8af6e1fae94f49445ad0101
Author: Aleksey Dobrunov <cta...@ctapmex.com>
Date: Mon Aug 17 00:24:06 2026 +0500

Reject inverted CRegExp {n,m} ranges at compile time instead of matching past the upper bound.


>---------------------------------------------------------------

48f14b4f71e9570ef8af6e1fae94f49445ad0101
src/colorer/cregexp/cregexp.cpp | 5 +++--
tests/unit/test_cregexp.cpp | 2 ++
2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/colorer/cregexp/cregexp.cpp b/src/colorer/cregexp/cregexp.cpp
index 0b08be9..944f33d 100644
--- a/src/colorer/cregexp/cregexp.cpp
+++ b/src/colorer/cregexp/cregexp.cpp
@@ -607,11 +607,12 @@ EError CRegExp::setStructs(SRegInfo*& re, const UnicodeString& expr, int from, i
next->e = UnicodeTools::getNumber(&expr, comma + 1, en - comma - 1);
else
next->e = next->s;
- if (next->e == -1)
+ if (next->s < 0)
return EError::EOP;
-
if (en - comma == 1)
next->e = -1;
+ else if (next->e < next->s)
+ return EError::EOP;
if (next->e == -1)
next->op = nonGreedy ? EOps::ReNGRangeN : EOps::ReRangeN;
else
diff --git a/tests/unit/test_cregexp.cpp b/tests/unit/test_cregexp.cpp
index b575878..ec8150a 100644
--- a/tests/unit/test_cregexp.cpp
+++ b/tests/unit/test_cregexp.cpp
@@ -134,6 +134,8 @@ TEST_CASE("CRegExp compilation errors", "[cregexp]")
{u"/a{/", EError::EBRACKETS},
{u"/+/", EError::EOP},
{u"/{2}/", EError::EOP},
+ {u"/a{5,2}/", EError::EOP},
+ {u"/{5,2}/", EError::EOP},
{u"/*/", EError::EOP},
{u"/\\/", EError::ESYNTAX},
{u"/\\y/", EError::ESYNTAX},


Reply all
Reply to author
Forward
0 new messages