diff options
author | dgp <dgp@users.sourceforge.net> | 2015-09-21 18:50:23 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2015-09-21 18:50:23 (GMT) |
commit | 87744f43c95c4da096d19a16453155500adadf6f (patch) | |
tree | 9ae7931adc68cbfe0d97e8e9dc51b58b212ee4c0 | |
parent | 1ee459aa148ae0eb14af0f2c7f190c994a03504e (diff) | |
parent | a6f9ef29aeb06d76382d8d469ba53a14ca531401 (diff) | |
download | tcl-87744f43c95c4da096d19a16453155500adadf6f.zip tcl-87744f43c95c4da096d19a16453155500adadf6f.tar.gz tcl-87744f43c95c4da096d19a16453155500adadf6f.tar.bz2 |
[d7ea9f985][a3c3508599] Internal regexp fixes that cleanup and streamline.
-rw-r--r-- | generic/regc_color.c | 2 | ||||
-rw-r--r-- | generic/regcomp.c | 16 |
2 files changed, 10 insertions, 8 deletions
diff --git a/generic/regc_color.c b/generic/regc_color.c index f5d6dfd..2e167fe 100644 --- a/generic/regc_color.c +++ b/generic/regc_color.c @@ -259,7 +259,7 @@ newcolor( return COLORLESS; /* too many colors */ } n = cm->ncds * 2; - if (n < MAX_COLOR + 1) { + if (n > MAX_COLOR + 1) { n = MAX_COLOR + 1; } if (cm->cd == cm->cdspace) { diff --git a/generic/regcomp.c b/generic/regcomp.c index 4f0c139..6fa3964 100644 --- a/generic/regcomp.c +++ b/generic/regcomp.c @@ -593,13 +593,15 @@ makesearch( break; } } + + /* + * We want to mark states as being in the list already by having non + * NULL tmp fields, but we can't just store the old slist value in tmp + * because that doesn't work for the first such state. Instead, the + * first list entry gets its own address in tmp. + */ if (b != NULL && s->tmp == NULL) { - /* - * Must be split if not already in the list (fixes bugs 505048, - * 230589, 840258, 504785). - */ - - s->tmp = slist; + s->tmp = (slist != NULL) ? slist : s; slist = s; } } @@ -620,7 +622,7 @@ makesearch( freearc(nfa, a); } } - s2 = s->tmp; + s2 = (s->tmp != s) ? s->tmp : NULL; s->tmp = NULL; /* clean up while we're at it */ } } |