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 <[email protected]>
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"