Control: tags -1 + patch
Please find attached a patch.
Description: Port to PCRE2.
Bug-Debian: https://bugs.debian.org/999922
Author: Yavor Doganov [email protected]>
Forwarded: no
Last-Update: 2023-12-20
---
--- xneur.orig/configure.ac
+++ xneur/configure.ac
@@ -143,7 +143,7 @@
AC_DEFINE(WITH_DEBUG, 1, [Define if you want debug support])
fi
-PKG_CHECK_MODULES(PCRE, [libpcre >= 5.0])
+PKG_CHECK_MODULES(PCRE, [libpcre2-8])
AC_ARG_WITH(keylogger, [ --without-keylogger Compile without keylogger
function])
if test "x$with_keylogger" != "xno"; then
--- xneur.orig/lib/misc/regexp.c
+++ xneur/lib/misc/regexp.c
@@ -21,7 +21,8 @@
# include "config.h"
#endif
-#include <pcre.h>
+#define PCRE2_CODE_UNIT_WIDTH 8
+#include <pcre2.h>
#include <string.h>
#include <stdio.h>
@@ -31,45 +32,58 @@
int check_regexp_match(const char *str, const char *pattern)
{
- int options = PCRE_UTF8;
- const char *error;
- int erroffset;
+ pcre2_compile_context *ctxt;
+ uint32_t options = PCRE2_UTF;
+ int error;
+ PCRE2_SIZE erroffset;
//log_message(DEBUG, "Processing word '%s' against regular expression
'%s'", str, pattern);
- const unsigned char *tables = pcre_maketables();
- pcre *re = pcre_compile(pattern, options, &error, &erroffset, tables);
+ ctxt = pcre2_compile_context_create(NULL);
+ const uint8_t *tables = pcre2_maketables(NULL);
+ pcre2_set_character_tables(ctxt, tables);
+ pcre2_code *re = pcre2_compile((PCRE2_SPTR)pattern, strlen(pattern),
+ options, &error, &erroffset, ctxt);
+ pcre2_maketables_free(NULL, tables);
+ pcre2_compile_context_free(ctxt);
if (!re)
{
log_message(ERROR, _("Can't compile regular expression '%s'"),
pattern);
return FALSE;
}
- int str_len = strlen(str);
+ PCRE2_SIZE str_len = strlen(str);
- int ovector[50];
- int count = pcre_exec(re, NULL, str, str_len, 0, 0, ovector, 50);
- if (count <= 0 && count != PCRE_ERROR_NOMATCH)
+ pcre2_match_data *ovector;
+ ovector = pcre2_match_data_create(50, NULL);
+ int count = pcre2_match(re, (PCRE2_SPTR)str, str_len, 0, 0, ovector,
NULL);
+ if (count <= 0 && count != PCRE2_ERROR_NOMATCH)
{
log_message(ERROR, _("Can't exec regular expression '%s', eror
code %d"), pattern, count);
- pcre_free(re);
- pcre_free((void*)tables);
+ pcre2_code_free(re);
+ pcre2_match_data_free(ovector);
return FALSE;
}
- pcre_free(re);
- pcre_free((void*)tables);
+ pcre2_code_free(re);
- if (count == PCRE_ERROR_NOMATCH)
+ if (count == PCRE2_ERROR_NOMATCH)
+ {
+ pcre2_match_data_free(ovector);
return FALSE;
+ }
- const char *pcre_string = NULL;
- if(pcre_get_substring(str, ovector, count, 0, &pcre_string) < 0)
+ PCRE2_UCHAR *pcre_string;
+ if(pcre2_substring_get_bynumber(ovector, 0, &pcre_string, &str_len) < 0)
+ {
+ pcre2_match_data_free(ovector);
return FALSE;
+ }
//log_message(TRACE, _("Match word '%s' and PERL pattern '%s'"), str,
pattern);
- pcre_free_substring(pcre_string);
+ pcre2_substring_free(pcre_string);
+ pcre2_match_data_free(ovector);
return TRUE;
}