Mercurial > hg > th-libs
changeset 641:9a1ed82abefd
Fix parsing of +? and *?.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 24 Jan 2020 09:36:43 +0200 |
parents | 9e1f9e1d1487 |
children | 3a35db5c1873 |
files | th_regex.c |
diffstat | 1 files changed, 17 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/th_regex.c Fri Jan 24 09:13:24 2020 +0200 +++ b/th_regex.c Fri Jan 24 09:36:43 2020 +0200 @@ -423,17 +423,26 @@ if (cch == '?') { - // Check if previous was a count - pnode->mode = (pnode->mode == TH_RE_MATCH_COUNT_GREEDY) ? - TH_RE_MATCH_COUNT_NONGREEDY : TH_RE_MATCH_COUNT_GREEDY; - - // Previous token is optional (repeat 0-1 times) - pnode->repeatMin = 0; - pnode->repeatMax = 1; + // Check if previous was a count ("*?" or "+?") + if (pnode->mode == TH_RE_MATCH_COUNT_GREEDY) + pnode->mode = TH_RE_MATCH_COUNT_NONGREEDY; + else + if (pnode->mode == TH_RE_MATCH_COUNT_NONGREEDY) + { + res = THERR_INVALID_DATA; + goto exit; + } + else + { + // Previous token is optional (repeat 0-1 times) + pnode->mode = TH_RE_MATCH_COUNT_NONGREEDY; + pnode->repeatMin = 0; + pnode->repeatMax = 1; + } } else { - // Check if previous was a count + // Check if previous was a count ("**", "*+", etc.) if (pnode->mode == TH_RE_MATCH_COUNT_GREEDY || pnode->mode == TH_RE_MATCH_COUNT_NONGREEDY) {