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"

Reply via email to