summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069>2019-11-16 17:30:07 +0000
committerph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069>2019-11-16 17:30:07 +0000
commit3c7295bb56a7944fe5358cb2eab2ad68d35a3aa1 (patch)
tree38cf6affc36a46a45468f4dc2555e82f7d9d9d64 /src
parentcd3016b9089095098567bf637fe9e458b22fa711 (diff)
downloadpcre2-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.c13
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;