@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user