hscollider: fix UTF8 check for patterns

This commit is contained in:
Wang Xiang W 2020-04-08 11:26:05 -04:00 committed by Hong, Yang A
parent 7c4490cfc9
commit 934473f406

View File

@ -241,6 +241,13 @@ void addCallout(string &re) {
re.append("\\E)(?C)"); re.append("\\E)(?C)");
} }
static
bool isUtf8(const CompiledPcre &compiled) {
unsigned long int options = 0;
pcre_fullinfo(compiled.bytecode, NULL, PCRE_INFO_OPTIONS, &options);
return options & PCRE_UTF8;
}
unique_ptr<CompiledPcre> unique_ptr<CompiledPcre>
GroundTruth::compile(unsigned id, bool no_callouts) { GroundTruth::compile(unsigned id, bool no_callouts) {
bool highlander = false; bool highlander = false;
@ -380,6 +387,8 @@ GroundTruth::compile(unsigned id, bool no_callouts) {
throw PcreCompileFailure(oss.str()); throw PcreCompileFailure(oss.str());
} }
compiled->utf8 |= isUtf8(*compiled);
return compiled; return compiled;
} }
@ -451,13 +460,6 @@ int scanBasic(const CompiledPcre &compiled, const string &buffer,
return ret; return ret;
} }
static
bool isUtf8(const CompiledPcre &compiled) {
unsigned long int options = 0;
pcre_fullinfo(compiled.bytecode, NULL, PCRE_INFO_OPTIONS, &options);
return options & PCRE_UTF8;
}
static static
CaptureVec makeCaptureVec(const vector<int> &ovector, int ret) { CaptureVec makeCaptureVec(const vector<int> &ovector, int ret) {
assert(ret > 0); assert(ret > 0);