summaryrefslogtreecommitdiff
path: root/plugin/business/pangu-http/src/pattern_replace.cpp
diff options
context:
space:
mode:
authorzhengchao <[email protected]>2019-06-03 13:00:27 +0800
committerzhengchao <[email protected]>2019-06-03 13:00:27 +0800
commit044d512184002cfaeaf12bd568e33d76beb99172 (patch)
tree80326e292c86ec32424564510b79aaa416a3ba33 /plugin/business/pangu-http/src/pattern_replace.cpp
parentace31ae24a9e484723d755b7a030c0598f1fabcb (diff)
修复pcre2_compile中参数顺序错误,支持utf8的替换,俄语不区分大小写测试通过。v4.0.0-20190603
Diffstat (limited to 'plugin/business/pangu-http/src/pattern_replace.cpp')
-rw-r--r--plugin/business/pangu-http/src/pattern_replace.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/plugin/business/pangu-http/src/pattern_replace.cpp b/plugin/business/pangu-http/src/pattern_replace.cpp
index 95e3fed..667bae3 100644
--- a/plugin/business/pangu-http/src/pattern_replace.cpp
+++ b/plugin/business/pangu-http/src/pattern_replace.cpp
@@ -192,15 +192,15 @@ size_t replace_string(const char * in, size_t in_sz, const struct replace_rule *
{
assert(strlen(zone->find) != 0);
- int error;
- PCRE2_SIZE erroffset;
+ int error=0;
+ PCRE2_SIZE erroffset=0;
const PCRE2_SPTR pattern = (PCRE2_SPTR)zone->find;
const PCRE2_SPTR subject = (PCRE2_SPTR)in;
const PCRE2_SPTR replacement = (PCRE2_SPTR)zone->replace_with;
- pcre2_code *re = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, 0, &error, &erroffset, 0);
- if (re == 0)
+ pcre2_code *re = pcre2_compile(pattern, strlen(zone->find), PCRE2_UTF, &error, &erroffset, 0);
+ if (!re)
return -1;
pcre2_jit_compile(re, PCRE2_JIT_COMPLETE);
@@ -211,7 +211,11 @@ size_t replace_string(const char * in, size_t in_sz, const struct replace_rule *
not_enough_mem_retry:
out_buffer = (PCRE2_UCHAR*)malloc(sizeof(PCRE2_UCHAR)*outbuff_size);
outlen = outbuff_size;
- int rc = pcre2_substitute(re, subject, in_sz, 0, PCRE2_SUBSTITUTE_GLOBAL | PCRE2_SUBSTITUTE_EXTENDED | PCRE2_SUBSTITUTE_OVERFLOW_LENGTH, 0, 0, replacement, PCRE2_ZERO_TERMINATED, out_buffer, &outlen);
+ int rc = pcre2_substitute(re, subject, in_sz, 0,
+ PCRE2_SUBSTITUTE_GLOBAL | PCRE2_SUBSTITUTE_EXTENDED | PCRE2_SUBSTITUTE_OVERFLOW_LENGTH,
+ 0, 0, //pcre2_match_data *match_data, pcre2_match_context
+ replacement, strlen(zone->replace_with),
+ out_buffer, &outlen);
if(outlen>outbuff_size)
{
outbuff_size=outlen;