]> granicus.if.org Git - onig/commitdiff
expand case fold if string is a single character case
authorK.Kosako <kkosako0@gmail.com>
Thu, 4 Oct 2018 12:23:47 +0000 (21:23 +0900)
committerK.Kosako <kkosako0@gmail.com>
Thu, 4 Oct 2018 12:23:47 +0000 (21:23 +0900)
src/regcomp.c

index 8e832660817a74dfb7e2aed3b3c744431d532c44..31a8e35adf19a8bac72809bfc2ab6a4be2dda918 100644 (file)
@@ -3664,7 +3664,10 @@ expand_case_fold_string(Node* node, regex_t* reg)
     len = enclen(reg->enc, p);
     is_good = is_good_case_fold_items_for_search(reg->enc, len, n, items);
 
-    if (is_good || IS_NOT_NULL(snode)) {
+    if (IS_NOT_NULL(snode) ||
+       (is_good &&
+        /* expand single char case: ex. /(?i:a)/ */
+        !(p == start && p + len >= end))) {
       if (IS_NULL(snode)) {
         if (IS_NULL(root) && IS_NOT_NULL(prev_node)) {
           top_root = root = onig_node_list_add(NULL_NODE, prev_node);