Control: tags -1 + patch Please find attached a patch; build-tested only.
Description: Port to PCRE2. Bug-Debian: https://bugs.debian.org/1000014 Author: Yavor Doganov <ya...@doganov.org> Forwarded: no Last-Update: 2023-12-22 ---
--- mydumper-0.10.1.orig/cmake/modules/FindPCRE.cmake +++ mydumper-0.10.1/cmake/modules/FindPCRE.cmake @@ -11,10 +11,10 @@ # For details see the accompanying COPYING-CMAKE-SCRIPTS file. -if (PCRE_INCLUDE_DIR AND PCRE_PCREPOSIX_LIBRARY AND PCRE_PCRE_LIBRARY) +if (PCRE_INCLUDE_DIR AND PCRE_PCRE_LIBRARY) # Already in cache, be silent set(PCRE_FIND_QUIETLY TRUE) -endif (PCRE_INCLUDE_DIR AND PCRE_PCREPOSIX_LIBRARY AND PCRE_PCRE_LIBRARY) +endif (PCRE_INCLUDE_DIR AND PCRE_PCRE_LIBRARY) if (NOT WIN32) @@ -22,24 +22,22 @@ # in the FIND_PATH() and FIND_LIBRARY() calls find_package(PkgConfig) - pkg_check_modules(PC_PCRE REQUIRED libpcre) + pkg_check_modules(PC_PCRE REQUIRED libpcre2-8) set(PCRE_DEFINITIONS ${PC_PCRE_CFLAGS_OTHER}) endif (NOT WIN32) -find_path(PCRE_INCLUDE_DIR pcre.h +find_path(PCRE_INCLUDE_DIR pcre2.h HINTS ${PC_PCRE_INCLUDEDIR} ${PC_PCRE_INCLUDE_DIRS} - PATH_SUFFIXES pcre) + ) -find_library(PCRE_PCRE_LIBRARY NAMES pcre HINTS ${PC_PCRE_LIBDIR} ${PC_PCRE_LIBRARY_DIRS}) - -find_library(PCRE_PCREPOSIX_LIBRARY NAMES pcreposix HINTS ${PC_PCRE_LIBDIR} ${PC_PCRE_LIBRARY_DIRS}) +find_library(PCRE_PCRE_LIBRARY NAMES pcre2-8 HINTS ${PC_PCRE_LIBDIR} ${PC_PCRE_LIBRARY_DIRS}) include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(PCRE DEFAULT_MSG PCRE_INCLUDE_DIR PCRE_PCRE_LIBRARY PCRE_PCREPOSIX_LIBRARY ) +find_package_handle_standard_args(PCRE DEFAULT_MSG PCRE_INCLUDE_DIR PCRE_PCRE_LIBRARY ) -set(PCRE_LIBRARIES ${PCRE_PCRE_LIBRARY} ${PCRE_PCREPOSIX_LIBRARY}) +set(PCRE_LIBRARIES ${PCRE_PCRE_LIBRARY}) -mark_as_advanced(PCRE_INCLUDE_DIR PCRE_LIBRARIES PCRE_PCREPOSIX_LIBRARY PCRE_PCRE_LIBRARY) +mark_as_advanced(PCRE_INCLUDE_DIR PCRE_LIBRARIES PCRE_PCRE_LIBRARY) --- mydumper-0.10.1.orig/mydumper.c +++ mydumper-0.10.1/mydumper.c @@ -36,7 +36,8 @@ #include <errno.h> #include <time.h> #include <zlib.h> -#include <pcre.h> +#define PCRE2_CODE_UNIT_WIDTH 8 +#include <pcre2.h> #include <signal.h> #include <glib/gstdio.h> #include "config.h" @@ -387,26 +388,31 @@ gboolean check_regex(char *database, char *table) { /* This is not going to be used in threads */ - static pcre *re = NULL; + static pcre2_code *re = NULL; + pcre2_match_data *md; int rc; - int ovector[9] = {0}; - const char *error; - int erroroffset; + PCRE2_UCHAR error[120]; + int err; + PCRE2_SIZE erroroffset; char *p; /* Let's compile the RE before we do anything */ if (!re) { - re = pcre_compile(regexstring, PCRE_CASELESS | PCRE_MULTILINE, &error, - &erroroffset, NULL); + re = pcre2_compile((PCRE2_SPTR)regexstring, strlen(regexstring), + PCRE2_CASELESS | PCRE2_MULTILINE, + &err, &erroroffset, NULL); if (!re) { + pcre2_get_error_message(err, error, sizeof(error)); g_critical("Regular expression fail: %s", error); exit(EXIT_FAILURE); } } p = g_strdup_printf("%s.%s", database, table); - rc = pcre_exec(re, NULL, p, strlen(p), 0, 0, ovector, 9); + md = pcre2_match_data_create(9, NULL); + rc = pcre2_match(re, (PCRE2_SPTR)p, strlen(p), 0, 0, md, NULL); + pcre2_match_data_free(md); g_free(p); return (rc > 0) ? TRUE : FALSE; --- mydumper-0.10.1.orig/server_detect.c +++ mydumper-0.10.1/server_detect.c @@ -15,73 +15,96 @@ Authors: Andrew Hutchings, SkySQL (andrew at skysql dot com) */ -#include <pcre.h> +#define PCRE2_CODE_UNIT_WIDTH 8 +#include <pcre2.h> #include <glib.h> #include <string.h> #include "server_detect.h" int detect_server(MYSQL *conn) { - pcre *re = NULL; - const char *error; - int erroroffset; - int ovector[9] = {0}; + pcre2_code *re = NULL; + pcre2_match_data *md; + PCRE2_UCHAR error[120]; + PCRE2_SIZE erroroffset; + int err; int rc; const char *db_version = mysql_get_server_info(conn); // debug the version g_message("Server version reported as: %s", db_version); - re = pcre_compile(DETECT_TIDB_REGEX, 0, &error, &erroroffset, NULL); + re = pcre2_compile((PCRE2_SPTR)DETECT_TIDB_REGEX, PCRE2_ZERO_TERMINATED, + 0, &err, &erroroffset, NULL); if (!re) { + pcre2_get_error_message(err, error, sizeof(error)); g_critical("Regular expression fail: %s", error); exit(EXIT_FAILURE); } - rc = pcre_exec(re, NULL, db_version, strlen(db_version), 0, 0, ovector, 9); - pcre_free(re); + md = pcre2_match_data_create(9, NULL); + rc = pcre2_match(re, (PCRE2_SPTR)db_version, strlen(db_version), + 0, 0, md, NULL); + pcre2_code_free(re); if (rc > 0) { + pcre2_match_data_free(md); return SERVER_TYPE_TIDB; } - re = pcre_compile(DETECT_MYSQL_REGEX, 0, &error, &erroroffset, NULL); + re = pcre2_compile((PCRE2_SPTR)DETECT_MYSQL_REGEX, PCRE2_ZERO_TERMINATED, + 0, &err, &erroroffset, NULL); if (!re) { + pcre2_get_error_message(err, error, sizeof(error)); g_critical("Regular expression fail: %s", error); + pcre2_match_data_free(md); exit(EXIT_FAILURE); } - rc = pcre_exec(re, NULL, db_version, strlen(db_version), 0, 0, ovector, 9); - pcre_free(re); + rc = pcre2_match(re, (PCRE2_SPTR)db_version, strlen(db_version), + 0, 0, md, NULL); + pcre2_code_free(re); if (rc > 0) { + pcre2_match_data_free(md); return SERVER_TYPE_MYSQL; } - re = pcre_compile(DETECT_DRIZZLE_REGEX, 0, &error, &erroroffset, NULL); + re = pcre2_compile((PCRE2_SPTR)DETECT_DRIZZLE_REGEX, PCRE2_ZERO_TERMINATED, + 0, &err, &erroroffset, NULL); if (!re) { + pcre2_get_error_message(err, error, sizeof(error)); g_critical("Regular expression fail: %s", error); + pcre2_match_data_free(md); exit(EXIT_FAILURE); } - rc = pcre_exec(re, NULL, db_version, strlen(db_version), 0, 0, ovector, 9); - pcre_free(re); + rc = pcre2_match(re, (PCRE2_SPTR)db_version, strlen(db_version), + 0, 0, md, NULL); + pcre2_code_free(re); if (rc > 0) { + pcre2_match_data_free(md); return SERVER_TYPE_DRIZZLE; } - re = pcre_compile(DETECT_MARIADB_REGEX, 0, &error, &erroroffset, NULL); + re = pcre2_compile((PCRE2_SPTR)DETECT_MARIADB_REGEX, PCRE2_ZERO_TERMINATED, + 0, &err, &erroroffset, NULL); if (!re) { + pcre2_get_error_message(err, error, sizeof(error)); g_critical("Regular expression fail: %s", error); + pcre2_match_data_free(md); exit(EXIT_FAILURE); } - rc = pcre_exec(re, NULL, db_version, strlen(db_version), 0, 0, ovector, 9); - pcre_free(re); + rc = pcre2_match(re, (PCRE2_SPTR)db_version, strlen(db_version), + 0, 0, md, NULL); + pcre2_code_free(re); if (rc > 0) { + pcre2_match_data_free(md); return SERVER_TYPE_MYSQL; } + pcre2_match_data_free(md); return SERVER_TYPE_UNKNOWN; } --- mydumper-0.10.1.orig/connection.c +++ mydumper-0.10.1/connection.c @@ -15,7 +15,6 @@ Authors: Aaron Brady, Shopify (insom) */ -#include <pcre.h> #include <glib.h> #include <string.h> #include "config.h"