grep/icase: avoid kwsset on literal non-ascii strings
[gitweb.git] / grep.c
diff --git a/grep.c b/grep.c
index f430d7e75622314e5bb3aabca3d384ed214be694..451275d2980428a8891e0fcf9f8f15aa543f16b1 100644 (file)
--- a/grep.c
+++ b/grep.c
@@ -4,6 +4,7 @@
 #include "xdiff-interface.h"
 #include "diff.h"
 #include "diffcore.h"
+#include "commit.h"
 
 static int grep_source_load(struct grep_source *gs);
 static int grep_source_is_binary(struct grep_source *gs);
@@ -398,14 +399,18 @@ static int is_fixed(const char *s, size_t len)
 
 static void compile_regexp(struct grep_pat *p, struct grep_opt *opt)
 {
+       int icase, ascii_only;
        int err;
 
        p->word_regexp = opt->word_regexp;
        p->ignore_case = opt->ignore_case;
+       icase          = opt->regflags & REG_ICASE || p->ignore_case;
+       ascii_only     = !has_non_ascii(p->pattern);
 
        if (opt->fixed)
                p->fixed = 1;
-       else if (is_fixed(p->pattern, p->patternlen))
+       else if ((!icase || ascii_only) &&
+                is_fixed(p->pattern, p->patternlen))
                p->fixed = 1;
        else
                p->fixed = 0;