From: Fabian Keil Date: Sun, 7 Feb 2021 03:12:14 +0000 (+0100) Subject: Remove support for pcre1 X-Git-Url: http://www.privoxy.org/gitweb/%22https:/@default-cgi@/faq/static/developer-manual/eas?a=commitdiff_plain;h=24d0ff8398fdf97cdd8685478afcf1b73d743a93;p=privoxy.git Remove support for pcre1 --- diff --git a/configure.in b/configure.in index 9aadfafb..51d1b20a 100644 --- a/configure.in +++ b/configure.in @@ -903,29 +903,6 @@ AC_CHECK_LIB(pcre2-posix, regcomp, [ ], [have_pcre2posix=no], -lpcre2-8) fi -if test $have_pcre2 = "no"; then - -AC_CHECK_LIB(pcre, pcre_compile, [ - AC_CHECK_HEADER(pcre.h, [ - AC_EGREP_HEADER(pcre_fullinfo, pcre.h, [have_pcre=yes], [AC_MSG_WARN([[pcre old version installed]]); have_pcre=no]) - ], [ - AC_CHECK_HEADER(pcre/pcre.h, [ - AC_EGREP_HEADER(pcre_fullinfo, pcre/pcre.h, [have_pcre=yes]; [AC_DEFINE(PCRE_H_IN_SUBDIR)], [AC_MSG_WARN([[pcre old version installed]]); have_pcre=no]) - ], [have_pcre=no]) - ]) -], [have_pcre=no]) - -AC_CHECK_LIB(pcreposix, regcomp, [ - AC_CHECK_HEADER(pcreposix.h, [ - AC_EGREP_HEADER(pcreposix_regerror, pcreposix.h, [AC_MSG_WARN([[pcreposix old version installed]]); have_pcreposix=no], [have_pcreposix=yes]) - ], [ - AC_CHECK_HEADER(pcre/pcreposix.h, [ - AC_EGREP_HEADER(pcreposix_regerror, pcre/pcreposix.h, [AC_MSG_WARN([[pcreposix old version installed]]); have_pcreposix=no], [have_pcreposix=yes]; [AC_DEFINE(PCREPOSIX_H_IN_SUBDIR)]) - ], [have_pcreposix=no]) - ]) -], [have_pcreposix=no], -lpcre) - -fi dnl ================================================================ dnl libpcrs is temporarily disabled. dnl @@ -1158,30 +1135,7 @@ if test $have_pcre2 = "yes"; then AC_DEFINE(FEATURE_DYNAMIC_PCRE,1,[Define to dynamically link to pcre.]) fi else - -if test $have_pcre = "yes"; then - echo "using libpcre" - STATIC_PCRE_ONLY=# - LIBS="$LIBS -lpcre -lpcreposix" - if test "$use_static_pcre" = "yes"; then - pcre_dyn=no - AC_DEFINE(PCRE_STATIC,1,[Define to statically link to pcre library on Windows.]) -# see /usr/i686-w64-mingw32/sys-root/mingw/include/pcre.h line 54 -# #if defined(_WIN32) && !defined(PCRE_STATIC) -# # ifndef PCRE_EXP_DECL -# # define PCRE_EXP_DECL extern __declspec(dllimport) -# # endif -# If you want to statically link a program against a PCRE library in the form of -# a non-dll .a file, you must define PCRE_STATIC before including pcre.h or -# pcrecpp.h, otherwise the pcre_malloc() and pcre_free() exported functions will -# be declared __declspec(dllimport), with unwanted results. - else - pcre_dyn=yes - AC_DEFINE(FEATURE_DYNAMIC_PCRE,1,[Define to dynamically link to pcre.]) - fi -else - AC_MSG_ERROR(Detected neither pcre2 nor pcre library.) -fi + AC_MSG_ERROR(Failed to detect pcre2 library.) fi AC_DEFINE(FEATURE_CONNECTION_KEEP_ALIVE) diff --git a/pcrs.c b/pcrs.c index eaeea625..8c04c3a2 100644 --- a/pcrs.c +++ b/pcrs.c @@ -112,13 +112,7 @@ const char *pcrs_strerror(const int error) return "(pcrs:) At least one variable was too big and has been truncated before compilation"; default: -#ifdef HAVE_PCRE2 pcre2_get_error_message(error, (PCRE2_UCHAR8*)buf, sizeof(buf)); -#else - snprintf(buf, sizeof(buf), - "Error code %d. For details, check the pcre documentation.", - error); -#endif return buf; } } @@ -471,22 +465,8 @@ pcrs_job *pcrs_free_job(pcrs_job *job) next = job->next; if (job->pattern != NULL) { -#ifdef HAVE_PCRE2 pcre2_code_free(job->pattern); -#else - free(job->pattern); -#endif } -#ifndef HAVE_PCRE2 - if (job->hints != NULL) - { -#ifdef PCRE_CONFIG_JIT - pcre_free_study(job->hints); -#else - free(job->hints); -#endif - } -#endif if (job->substitute != NULL) { if (job->substitute->text != NULL) free(job->substitute->text); @@ -635,12 +615,7 @@ pcrs_job *pcrs_compile(const char *pattern, const char *substitute, const char * pcrs_job *newjob; unsigned int flags; int capturecount; -#ifdef HAVE_PCRE2 int ret; -#else - int pcre_study_options = 0; - const char *error; -#endif *errptr = 0; @@ -672,27 +647,21 @@ pcrs_job *pcrs_compile(const char *pattern, const char *substitute, const char * /* * Compile the pattern */ -#ifdef HAVE_PCRE2 PCRE2_SIZE error_offset; newjob->pattern = pcre2_compile((const unsigned char *)pattern, PCRE2_ZERO_TERMINATED, (unsigned)newjob->options, errptr, &error_offset, NULL); -#else - newjob->pattern = pcre_compile(pattern, newjob->options, &error, errptr, NULL); -#endif if (newjob->pattern == NULL) { pcrs_free_job(newjob); return NULL; } -#if defined(PCRE_STUDY_JIT_COMPILE) || defined(HAVE_PCRE2) #ifdef DISABLE_PCRE_JIT_COMPILATION #warning PCRE_STUDY_JIT_COMPILE is supported but Privoxy has been configured not to use it #else if (!(flags & PCRS_DYNAMIC)) { -#ifdef HAVE_PCRE2 /* Try to enable JIT compilation but continue if it's unsupported. */ if ((ret = pcre2_jit_compile(newjob->pattern, PCRE2_JIT_COMPLETE)) && (ret != PCRE2_ERROR_JIT_BADOPTION)) @@ -701,36 +670,15 @@ pcrs_job *pcrs_compile(const char *pattern, const char *substitute, const char * pcrs_free_job(newjob); return NULL; } -#else - pcre_study_options = PCRE_STUDY_JIT_COMPILE; -#endif } #endif -#endif -#ifndef HAVE_PCRE2 - /* - * Generate hints. This has little overhead, since the - * hints will be NULL for a boring pattern anyway. - */ - newjob->hints = pcre_study(newjob->pattern, pcre_study_options, &error); - if (error != NULL) - { - *errptr = PCRS_ERR_STUDY; - pcrs_free_job(newjob); - return NULL; - } -#endif /* * Determine the number of capturing subpatterns. * This is needed for handling $+ in the substitute. */ -#ifdef HAVE_PCRE2 if (0 > (*errptr = pcre2_pattern_info(newjob->pattern, PCRE2_INFO_CAPTURECOUNT, &capturecount))) -#else - if (0 > (*errptr = pcre_fullinfo(newjob->pattern, newjob->hints, PCRE_INFO_CAPTURECOUNT, &capturecount))) -#endif { pcrs_free_job(newjob); return NULL; @@ -848,14 +796,9 @@ int pcrs_execute(pcrs_job *job, const char *subject, size_t subject_length, char submatches, max_matches = PCRS_MAX_MATCH_INIT; size_t newsize; -#ifdef HAVE_PCRE2 pcrs_match *matches, *dummy; pcre2_match_data *pcre2_matches; size_t *offsets; -#else - pcrs_match *matches, *dummy; - int offsets[3 * PCRS_MAX_SUBMATCHES]; -#endif char *result_offset; offset = i = 0; @@ -869,13 +812,12 @@ int pcrs_execute(pcrs_job *job, const char *subject, size_t subject_length, char return(PCRS_ERR_BADJOB); } -#ifdef HAVE_PCRE2 if (NULL == (pcre2_matches = pcre2_match_data_create_from_pattern(job->pattern, NULL))) { return(PCRS_ERR_NOMEM); } offsets = pcre2_get_ovector_pointer(pcre2_matches); -#endif + if (NULL == (matches = (pcrs_match *)malloc((size_t)max_matches * sizeof(pcrs_match)))) { return(PCRS_ERR_NOMEM); @@ -888,12 +830,8 @@ int pcrs_execute(pcrs_job *job, const char *subject, size_t subject_length, char */ newsize = subject_length; -#ifdef HAVE_PCRE2 while ((submatches = pcre2_match(job->pattern, (const unsigned char *)subject, subject_length, (size_t)offset, 0, pcre2_matches, NULL)) > 0) -#else - while ((submatches = pcre_exec(job->pattern, job->hints, subject, (int)subject_length, offset, 0, offsets, 3 * PCRS_MAX_SUBMATCHES)) > 0) -#endif { job->flags |= PCRS_SUCCESS; matches[i].submatches = submatches; @@ -947,16 +885,11 @@ int pcrs_execute(pcrs_job *job, const char *subject, size_t subject_length, char offset = (int)offsets[1]; } /* Pass pcre error through if (bad) failure */ -#ifdef HAVE_PCRE2 if (submatches < PCRE2_ERROR_NOMATCH) -#else - if (submatches < PCRE_ERROR_NOMATCH) -#endif { free(matches); -#ifdef HAVE_PCRE2 pcre2_match_data_free(pcre2_matches); -#endif + return submatches; } matches_found = i; @@ -967,18 +900,15 @@ int pcrs_execute(pcrs_job *job, const char *subject, size_t subject_length, char * and append terminating null byte. */ if ((*result = (char *)malloc(newsize + 1 -#ifdef HAVE_PCRE2 /* * Work around to prevent invalid reads in the jit code. */ + 16 -#endif )) == NULL) { free(matches); -#ifdef HAVE_PCRE2 pcre2_match_data_free(pcre2_matches); -#endif + return PCRS_ERR_NOMEM; } else @@ -1031,10 +961,9 @@ int pcrs_execute(pcrs_job *job, const char *subject, size_t subject_length, char memcpy(result_offset, subject + offset, subject_length - (size_t)offset); *result_length = newsize; -#ifdef HAVE_PCRE2 pcre2_match_data_free(pcre2_matches); -#endif free(matches); + return matches_found; } diff --git a/pcrs.h b/pcrs.h index 32cf37c2..8e2fb968 100644 --- a/pcrs.h +++ b/pcrs.h @@ -33,18 +33,11 @@ *********************************************************************/ -#ifdef HAVE_PCRE2 #define PCRE2_CODE_UNIT_WIDTH 8 #define PCREn(x) PCRE2_ ## x #ifndef _PCRE2_H #include #endif -#else -#define PCREn(x) PCRE_ ## x -#ifndef _PCRE_H -#include -#endif -#endif /* * Constants: @@ -117,12 +110,7 @@ typedef struct { /* A PCRS job */ typedef struct PCRS_JOB { -#ifdef HAVE_PCRE2 - pcre2_code *pattern; -#else - pcre *pattern; /* The compiled pcre pattern */ - pcre_extra *hints; /* The pcre hints for the pattern */ -#endif + pcre2_code *pattern; int options; /* The pcre options (numeric) */ unsigned int flags; /* The pcrs and user flags (see "Flags" above) */ pcrs_substitute *substitute; /* The compiled pcrs substitute */ diff --git a/project.h b/project.h index 0a1740a7..e6009046 100644 --- a/project.h +++ b/project.h @@ -103,38 +103,20 @@ */ #ifdef STATIC_PCRE -#ifdef HAVE_PCRE2 # include "pcre2.h" # include "pcre2posix.h" #else -# include "pcre.h" -# include "pcreposix.h" -#endif -#else -# ifdef HAVE_PCRE2 -# ifdef PCRE2_H_IN_SUBDIR -# define PCRE2_CODE_UNIT_WIDTH 8 -# include -# else -# define PCRE2_CODE_UNIT_WIDTH 8 -# include -# endif -# ifdef PCRE2POSIX_H_IN_SUBDIR -# include -# else -# include -# endif +# ifdef PCRE2_H_IN_SUBDIR +# define PCRE2_CODE_UNIT_WIDTH 8 +# include +# else +# define PCRE2_CODE_UNIT_WIDTH 8 +# include +# endif +# ifdef PCRE2POSIX_H_IN_SUBDIR +# include # else -# ifdef PCRE_H_IN_SUBDIR -# include -# else -# include -# endif -# ifdef PCREPOSIX_H_IN_SUBDIR -# include -# else -# include -# endif +# include # endif #endif @@ -440,16 +422,10 @@ struct http_response enum crunch_reason crunch_reason; /**< Why the response was generated in the first place. */ }; -#ifdef HAVE_PCRE2 -#define REGEX_TYPE pcre2_code -#else -#define REGEX_TYPE regex_t -#endif - struct url_spec { #ifdef FEATURE_PCRE_HOST_PATTERNS - REGEX_TYPE *host_regex;/**< Regex for host matching */ + pcre2_code *host_regex;/**< Regex for host matching */ enum host_regex_type { VANILLA_HOST_PATTERN, PCRE_HOST_PATTERN } host_regex_type; #endif /* defined FEATURE_PCRE_HOST_PATTERNS */ int dcount; /**< How many parts to this domain? (length of dvec) */ @@ -459,7 +435,7 @@ struct url_spec char *port_list; /**< List of acceptable ports, or NULL to match all ports */ - REGEX_TYPE *preg; /**< Regex for matching path part */ + pcre2_code *preg; /**< Regex for matching path part */ }; /** @@ -474,7 +450,7 @@ struct pattern_spec union { struct url_spec url_spec; - REGEX_TYPE *tag_regex; + pcre2_code *tag_regex; } pattern; unsigned int flags; /**< Bitmap with various pattern properties. */ diff --git a/urlmatch.c b/urlmatch.c index 7682c9e0..816e08c6 100644 --- a/urlmatch.c +++ b/urlmatch.c @@ -611,7 +611,6 @@ jb_err parse_http_request(const char *req, struct http_request *http) } -#ifdef HAVE_PCRE2 /********************************************************************* * * Function : compile_pattern @@ -707,90 +706,6 @@ static jb_err compile_pattern(const char *pattern, enum regex_anchoring anchorin return JB_ERR_OK; } -#else -/********************************************************************* - * - * Function : compile_pattern - * - * Description : Compiles a host, domain or TAG pattern. - * - * Parameters : - * 1 : pattern = The pattern to compile. - * 2 : anchoring = How the regex should be modified - * before compilation. Can be either - * one of NO_ANCHORING, LEFT_ANCHORED, - * RIGHT_ANCHORED or RIGHT_ANCHORED_HOST. - * 3 : url = In case of failures, the spec member is - * logged and the structure freed. - * 4 : regex = Where the compiled regex should be stored. - * - * Returns : JB_ERR_OK - Success - * JB_ERR_PARSE - Cannot parse regex - * - *********************************************************************/ -static jb_err compile_pattern(const char *pattern, enum regex_anchoring anchoring, - struct pattern_spec *url, regex_t **regex) -{ - int errcode; - const char *fmt = NULL; - char *rebuf; - size_t rebuf_size; - - assert(pattern); - - if (pattern[0] == '\0') - { - *regex = NULL; - return JB_ERR_OK; - } - - switch (anchoring) - { - case NO_ANCHORING: - fmt = "%s"; - break; - case RIGHT_ANCHORED: - fmt = "%s$"; - break; - case RIGHT_ANCHORED_HOST: - fmt = "%s\\.?$"; - break; - case LEFT_ANCHORED: - fmt = "^%s"; - break; - default: - log_error(LOG_LEVEL_FATAL, - "Invalid anchoring in compile_pattern %d", anchoring); - } - rebuf_size = strlen(pattern) + strlen(fmt); - rebuf = malloc_or_die(rebuf_size); - *regex = zalloc_or_die(sizeof(**regex)); - - snprintf(rebuf, rebuf_size, fmt, pattern); - - errcode = regcomp(*regex, rebuf, (REG_EXTENDED|REG_NOSUB|REG_ICASE)); - - if (errcode) - { - size_t errlen = regerror(errcode, *regex, rebuf, rebuf_size); - if (errlen > (rebuf_size - (size_t)1)) - { - errlen = rebuf_size - (size_t)1; - } - rebuf[errlen] = '\0'; - log_error(LOG_LEVEL_ERROR, "error compiling %s from %s: %s", - pattern, url->spec, rebuf); - free_pattern_spec(url); - freez(rebuf); - - return JB_ERR_PARSE; - } - freez(rebuf); - - return JB_ERR_OK; - -} -#endif /********************************************************************* @@ -1156,7 +1071,6 @@ static int simplematch(const char *pattern, const char *text) } -#ifdef HAVE_PCRE2 /********************************************************************* * * Function : pcre2_pattern_matches @@ -1196,15 +1110,13 @@ static int pcre2_pattern_matches(const pcre2_code *pattern, const char *string) return (ret >= 0); } -#endif /********************************************************************* * * Function : regex_matches * - * Description : Checks if a compiled regex pattern matches a string - * using either pcre2 or pcre1 code. + * Description : Checks if a compiled regex pattern matches a string. * * Parameters : * 1 : pattern = The compiled pattern @@ -1213,13 +1125,9 @@ static int pcre2_pattern_matches(const pcre2_code *pattern, const char *string) * Returns : TRUE for yes, FALSE otherwise. * *********************************************************************/ -int regex_matches(const REGEX_TYPE *pattern, const char *string) +int regex_matches(const pcre2_code *pattern, const char *string) { -#ifdef HAVE_PCRE2 return pcre2_pattern_matches(pattern, string); -#else - return (0 == regexec(pattern, string, 0, NULL, 0)); -#endif } /********************************************************************* @@ -1439,12 +1347,7 @@ void free_pattern_spec(struct pattern_spec *pattern) { if (pattern->pattern.tag_regex) { -#ifdef HAVE_PCRE2 pcre2_code_free(pattern->pattern.tag_regex); -#else - regfree(pattern->pattern.tag_regex); - freez(pattern->pattern.tag_regex); -#endif } return; } @@ -1452,12 +1355,7 @@ void free_pattern_spec(struct pattern_spec *pattern) #ifdef FEATURE_PCRE_HOST_PATTERNS if (pattern->pattern.url_spec.host_regex) { -#ifdef HAVE_PCRE2 pcre2_code_free(pattern->pattern.url_spec.host_regex); -#else - regfree(pattern->pattern.url_spec.host_regex); - freez(pattern->pattern.url_spec.host_regex); -#endif } #endif /* def FEATURE_PCRE_HOST_PATTERNS */ freez(pattern->pattern.url_spec.dbuffer); @@ -1466,12 +1364,7 @@ void free_pattern_spec(struct pattern_spec *pattern) freez(pattern->pattern.url_spec.port_list); if (pattern->pattern.url_spec.preg) { -#ifdef HAVE_PCRE2 pcre2_code_free(pattern->pattern.url_spec.preg); -#else - regfree(pattern->pattern.url_spec.preg); - freez(pattern->pattern.url_spec.preg); -#endif } } diff --git a/urlmatch.h b/urlmatch.h index 543f2b88..d00764ec 100644 --- a/urlmatch.h +++ b/urlmatch.h @@ -50,7 +50,7 @@ extern int url_requires_percent_encoding(const char *url); extern int url_match(const struct pattern_spec *pattern, const struct http_request *http); -int regex_matches(const REGEX_TYPE *pattern, const char *string); +int regex_matches(const pcre2_code *pattern, const char *string); extern jb_err create_pattern_spec(struct pattern_spec *url, char *buf); extern void free_pattern_spec(struct pattern_spec *url);