X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=pcrs.c;h=83100983b6475d0b7d75cbae6280db8595227d28;hp=67b7b35635923f294e6d9e2570eed96882c0b8a9;hb=23445442f4bf0aa0bcf6e35df09daf8ef0d69d99;hpb=36bed44da8971c4b75627ec86cc41163bfde81ae diff --git a/pcrs.c b/pcrs.c index 67b7b356..83100983 100644 --- a/pcrs.c +++ b/pcrs.c @@ -168,6 +168,7 @@ static int pcrs_parse_perl_options(const char *optstring, int *flags) case 'o': break; case 's': rc |= PCRE_DOTALL; break; case 'x': rc |= PCRE_EXTENDED; break; + case 'D': *flags |= PCRS_DYNAMIC; break; case 'U': rc |= PCRE_UNGREEDY; break; case 'T': *flags |= PCRS_TRIVIAL; break; default: break; @@ -280,7 +281,7 @@ static pcrs_substitute *pcrs_compile_replacement(const char *replacement, int tr */ if (trivialflag) { - text = strncpy(text, replacement, length + 1); + strlcpy(text, replacement, length + 1); k = (int)length; } @@ -669,7 +670,10 @@ pcrs_job *pcrs_compile(const char *pattern, const char *substitute, const char * #ifdef PCRE_STUDY_JIT_COMPILE - pcre_study_options = PCRE_STUDY_JIT_COMPILE; + if (!(flags & PCRS_DYNAMIC)) + { + pcre_study_options = PCRE_STUDY_JIT_COMPILE; + } #endif /* @@ -1174,7 +1178,7 @@ pcrs_job *pcrs_compile_dynamic_command(char *pcrs_command, const struct pcrs_var */ assert(NULL == strchr(v->name, d)); - ret = snprintf(buf, sizeof(buf), "s%c\\$%s%c%s%cgT", d, v->name, d, v->value, d); + ret = snprintf(buf, sizeof(buf), "s%c\\$%s%c%s%cDgT", d, v->name, d, v->value, d); assert(ret >= 0); if (ret >= sizeof(buf)) { @@ -1185,10 +1189,10 @@ pcrs_job *pcrs_compile_dynamic_command(char *pcrs_command, const struct pcrs_var * properly. */ static const char warning[] = "... [too long, truncated]"; - const size_t trailer_size = sizeof(warning) + 3; /* 3 for d + "gT" */ + const size_t trailer_size = sizeof(warning) + 4; /* 4 for d + "DgT" */ char *trailer_start = buf + sizeof(buf) - trailer_size; - ret = snprintf(trailer_start, trailer_size, "%s%cgT", warning, d); + ret = snprintf(trailer_start, trailer_size, "%s%cDgT", warning, d); assert(ret == trailer_size - 1); assert(sizeof(buf) == strlen(buf) + 1); truncation = 1;