diff options
| author | fengweihao <[email protected]> | 2019-06-14 13:15:49 +0800 |
|---|---|---|
| committer | fengweihao <[email protected]> | 2019-06-14 13:15:49 +0800 |
| commit | 39c84b0bbdd8da51b42bfbfb5f01b4e635d7994b (patch) | |
| tree | 20126bc48284e1db450d68c096eab4658ff2538f /plugin/business/pangu-http/src/pattern_replace.cpp | |
| parent | 104fe5af71ea6567cf6241c0ebba99def9be745b (diff) | |
close #144
修复页面编码方式为gb2312,命中替换规则后,页面无法显示
修复insert script告警
Diffstat (limited to 'plugin/business/pangu-http/src/pattern_replace.cpp')
| -rw-r--r-- | plugin/business/pangu-http/src/pattern_replace.cpp | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/plugin/business/pangu-http/src/pattern_replace.cpp b/plugin/business/pangu-http/src/pattern_replace.cpp index 70012eb..c5a5f4b 100644 --- a/plugin/business/pangu-http/src/pattern_replace.cpp +++ b/plugin/business/pangu-http/src/pattern_replace.cpp @@ -188,7 +188,7 @@ size_t select_replace_rule(enum replace_zone zone, const struct replace_rule * r return j; } -size_t replace_string(const char * in, size_t in_sz, const struct replace_rule * zone, char** out) +size_t replace_string(const char * in, size_t in_sz, const struct replace_rule * zone, char** out, int options) { assert(strlen(zone->find) != 0); @@ -198,8 +198,9 @@ size_t replace_string(const char * in, size_t in_sz, const struct replace_rule * const PCRE2_SPTR pattern = (PCRE2_SPTR)zone->find; const PCRE2_SPTR subject = (PCRE2_SPTR)in; const PCRE2_SPTR replacement = (PCRE2_SPTR)zone->replace_with; + uint32_t pcre2_options = options ? PCRE2_UTF : 0; - pcre2_code *re = pcre2_compile(pattern, strlen(zone->find), PCRE2_UTF, &error, &erroffset, 0); + pcre2_code *re = pcre2_compile(pattern, strlen(zone->find), pcre2_options, &error, &erroffset, 0); if (!re) return -1; @@ -237,7 +238,7 @@ not_enough_mem_retry: } size_t execute_replace_rule(const char * in, size_t in_sz, - enum replace_zone zone, const struct replace_rule * rules, size_t n_rule, char** out) + enum replace_zone zone, const struct replace_rule * rules, size_t n_rule, char** out, int options) { const struct replace_rule * todo[n_rule]; size_t n_todo = 0, i = 0, interator_sz=0, pre_out_sz=0; @@ -253,7 +254,7 @@ size_t execute_replace_rule(const char * in, size_t in_sz, interator_sz = in_sz; for (i = 0; i < n_todo; i++) { - output_size = replace_string(interator, interator_sz, todo[i], &new_out); + output_size = replace_string(interator, interator_sz, todo[i], &new_out, options); if (output_size == 0) { continue; @@ -287,7 +288,12 @@ static char *find_insert_position(char * in) { char *insert_from = NULL; char *script_local = NULL; - + + if (in == NULL) + { + return NULL; + } + insert_from = strstr(in, "jquery"); if (insert_from != NULL) { @@ -369,14 +375,14 @@ size_t execute_insert_rule(char * in, size_t in_sz, const struct insert_rule * r return insert_string(in, in_sz, rules->position, rules->script, rules->type, out); } -void simple_replace(const char* find, const char* replacement, const char* input, size_t in_sz, char** output, size_t *output_sz) +void simple_replace(const char* find, const char* replacement, const char* input, size_t in_sz, char** output, size_t *output_sz, int options) { char* exec_para=NULL; asprintf(&exec_para,"zone=http_resp_body;substitute=/%s/%s", find, replacement); size_t n_got_rule=0; struct replace_rule rules[16]; n_got_rule=format_replace_rule(exec_para, rules, sizeof(rules)/sizeof(rules[0])); - *output_sz=execute_replace_rule(input, strlen(input), kZoneResponseBody, rules, n_got_rule, output); + *output_sz=execute_replace_rule(input, strlen(input), kZoneResponseBody, rules, n_got_rule, output, options); free(exec_para); return; } |
