diff options
author | ph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069> | 2019-11-16 17:30:07 +0000 |
---|---|---|
committer | ph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069> | 2019-11-16 17:30:07 +0000 |
commit | 3c7295bb56a7944fe5358cb2eab2ad68d35a3aa1 (patch) | |
tree | 38cf6affc36a46a45468f4dc2555e82f7d9d9d64 /src | |
parent | cd3016b9089095098567bf637fe9e458b22fa711 (diff) | |
download | pcre2-3c7295bb56a7944fe5358cb2eab2ad68d35a3aa1.tar.gz |
Fix sometimes failing caseless non-ASCII matching in assertion.
git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@1185 6239d852-aaf2-0410-a92c-79f79f948069
Diffstat (limited to 'src')
-rw-r--r-- | src/pcre2_compile.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/pcre2_compile.c b/src/pcre2_compile.c index 3204973..800b61b 100644 --- a/src/pcre2_compile.c +++ b/src/pcre2_compile.c @@ -8741,6 +8741,19 @@ do { case OP_MINPLUSI: case OP_POSPLUSI: if (inassert == 0) return 0; + + /* If the character is more than one code unit long, we cannot set its + first code unit when matching caselessly. Later scanning may pick up + multiple code units. */ + +#ifdef SUPPORT_UNICODE +#if PCRE2_CODE_UNIT_WIDTH == 8 + if (scode[1] >= 0x80) return 0; +#elif PCRE2_CODE_UNIT_WIDTH == 16 + if (scode[1] >= 0xd800 && scode[1] <= 0xdfff) return 0; +#endif +#endif + if (cflags < 0) { c = scode[1]; cflags = REQ_CASELESS; } else if (c != scode[1]) return 0; break; |