developer-manual: Add more build instructions for Debian
[privoxy.git] / pcrs.c
diff --git a/pcrs.c b/pcrs.c
index 67b7b35..8310098 100644 (file)
--- 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;