!127 Update to 2.74.4
From: @dwl301 Reviewed-by: @dillon_chen Signed-off-by: @dillon_chen
This commit is contained in:
commit
a16d0bf70d
@ -1,69 +0,0 @@
|
|||||||
From f43cf341511dd684a58c09e104e28c11987cbff1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Rozhuk Ivan <rozhuk.im@gmail.com>
|
|
||||||
Date: Sat, 25 Jun 2022 18:46:08 +0300
|
|
||||||
Subject: [PATCH] [PATCH] Add lock in _g_get_unix_mount_points() around
|
|
||||||
*fsent() functions
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/f43cf341511dd684a58c09e104e28c11987cbff1
|
|
||||||
|
|
||||||
---
|
|
||||||
gio/gunixmounts.c | 22 +++++++++++++---------
|
|
||||||
1 file changed, 13 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gio/gunixmounts.c b/gio/gunixmounts.c
|
|
||||||
index 563bdba3b2..3005aa7af3 100644
|
|
||||||
--- a/gio/gunixmounts.c
|
|
||||||
+++ b/gio/gunixmounts.c
|
|
||||||
@@ -1410,17 +1410,13 @@ _g_get_unix_mount_points (void)
|
|
||||||
{
|
|
||||||
struct fstab *fstab = NULL;
|
|
||||||
GUnixMountPoint *mount_point;
|
|
||||||
- GList *return_list;
|
|
||||||
+ GList *return_list = NULL;
|
|
||||||
+ G_LOCK_DEFINE_STATIC (fsent);
|
|
||||||
#ifdef HAVE_SYS_SYSCTL_H
|
|
||||||
int usermnt = 0;
|
|
||||||
struct stat sb;
|
|
||||||
#endif
|
|
||||||
-
|
|
||||||
- if (!setfsent ())
|
|
||||||
- return NULL;
|
|
||||||
|
|
||||||
- return_list = NULL;
|
|
||||||
-
|
|
||||||
#ifdef HAVE_SYS_SYSCTL_H
|
|
||||||
#if defined(HAVE_SYSCTLBYNAME)
|
|
||||||
{
|
|
||||||
@@ -1448,7 +1444,14 @@ _g_get_unix_mount_points (void)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
-
|
|
||||||
+
|
|
||||||
+ G_LOCK (fsent);
|
|
||||||
+ if (!setfsent ())
|
|
||||||
+ {
|
|
||||||
+ G_UNLOCK (fsent);
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
while ((fstab = getfsent ()) != NULL)
|
|
||||||
{
|
|
||||||
gboolean is_read_only = FALSE;
|
|
||||||
@@ -1482,9 +1485,10 @@ _g_get_unix_mount_points (void)
|
|
||||||
|
|
||||||
return_list = g_list_prepend (return_list, mount_point);
|
|
||||||
}
|
|
||||||
-
|
|
||||||
+
|
|
||||||
endfsent ();
|
|
||||||
-
|
|
||||||
+ G_UNLOCK (fsent);
|
|
||||||
+
|
|
||||||
return g_list_reverse (return_list);
|
|
||||||
}
|
|
||||||
/* Interix {{{2 */
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,68 +0,0 @@
|
|||||||
From d9ba6150909818beb05573f54f26232063492c5b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Emmanuel Fleury <emmanuel.fleury@gmail.com>
|
|
||||||
Date: Mon, 1 Aug 2022 19:05:14 +0200
|
|
||||||
Subject: [PATCH] Handling collision between standard i/o file descriptors and
|
|
||||||
newly created ones
|
|
||||||
|
|
||||||
Though unlikely to happen, it may happen that newly created file
|
|
||||||
descriptor take the value 0 (stdin), 1 (stdout) or 2 (stderr) if one
|
|
||||||
of the standard ones have been dismissed in between. So, it may
|
|
||||||
confuse the program if it is unaware of this change.
|
|
||||||
|
|
||||||
The point of this patch is to avoid a reasign of standard file
|
|
||||||
descriptors on newly created ones.
|
|
||||||
|
|
||||||
Closes issue #16
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/d9ba6150909818beb05573f54f26232063492c5b
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/glib-unix.c | 24 ++++++++++++++++++++++++
|
|
||||||
1 file changed, 24 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/glib/glib-unix.c b/glib/glib-unix.c
|
|
||||||
index d2dea10ef0..d67b8a357a 100644
|
|
||||||
--- a/glib/glib-unix.c
|
|
||||||
+++ b/glib/glib-unix.c
|
|
||||||
@@ -108,6 +108,17 @@ g_unix_open_pipe (int *fds,
|
|
||||||
ecode = pipe2 (fds, pipe2_flags);
|
|
||||||
if (ecode == -1 && errno != ENOSYS)
|
|
||||||
return g_unix_set_error_from_errno (error, errno);
|
|
||||||
+ /* Don't reassign pipes to stdin, stdout, stderr if closed meanwhile */
|
|
||||||
+ else if (fds[0] < 3 || fds[1] < 3)
|
|
||||||
+ {
|
|
||||||
+ int old_fds[2] = { fds[0], fds[1] };
|
|
||||||
+ gboolean result = g_unix_open_pipe (fds, flags, error);
|
|
||||||
+ close (old_fds[0]);
|
|
||||||
+ close (old_fds[1]);
|
|
||||||
+
|
|
||||||
+ if (!result)
|
|
||||||
+ g_unix_set_error_from_errno (error, errno);
|
|
||||||
+ }
|
|
||||||
else if (ecode == 0)
|
|
||||||
return TRUE;
|
|
||||||
/* Fall through on -ENOSYS, we must be running on an old kernel */
|
|
||||||
@@ -116,6 +127,19 @@ g_unix_open_pipe (int *fds,
|
|
||||||
ecode = pipe (fds);
|
|
||||||
if (ecode == -1)
|
|
||||||
return g_unix_set_error_from_errno (error, errno);
|
|
||||||
+ /* Don't reassign pipes to stdin, stdout, stderr if closed meanwhile */
|
|
||||||
+ else if (fds[0] < 3 || fds[1] < 3)
|
|
||||||
+ {
|
|
||||||
+ int old_fds[2] = { fds[0], fds[1] };
|
|
||||||
+ gboolean result = g_unix_open_pipe (fds, flags, error);
|
|
||||||
+ close (old_fds[0]);
|
|
||||||
+ close (old_fds[1]);
|
|
||||||
+
|
|
||||||
+ if (!result)
|
|
||||||
+ g_unix_set_error_from_errno (error, errno);
|
|
||||||
+
|
|
||||||
+ return result;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (flags == 0)
|
|
||||||
return TRUE;
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,52 +0,0 @@
|
|||||||
From a9394bd68e222377f0156bf9c213b3f3a1e340d0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Emmanuele Bassi <ebassi@gnome.org>
|
|
||||||
Date: Sat, 30 Jul 2022 20:03:42 +0100
|
|
||||||
Subject: [PATCH] Implement GFileIface.set_display_name() for resource files
|
|
||||||
|
|
||||||
Resource files cannot be renamed, and GFileIface.set_display_name() is
|
|
||||||
mandatory.
|
|
||||||
|
|
||||||
Fixes: #2705
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/a9394bd68e222377f0156bf9c213b3f3a1e340d0
|
|
||||||
|
|
||||||
---
|
|
||||||
gio/gresourcefile.c | 14 ++++++++++++++
|
|
||||||
1 file changed, 14 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/gio/gresourcefile.c b/gio/gresourcefile.c
|
|
||||||
index 340d3378b3..24f20f2903 100644
|
|
||||||
--- a/gio/gresourcefile.c
|
|
||||||
+++ b/gio/gresourcefile.c
|
|
||||||
@@ -646,6 +646,19 @@ g_resource_file_monitor_file (GFile *file,
|
|
||||||
return g_object_new (g_resource_file_monitor_get_type (), NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static GFile *
|
|
||||||
+g_resource_file_set_display_name (GFile *file,
|
|
||||||
+ const char *display_name,
|
|
||||||
+ GCancellable *cancellable,
|
|
||||||
+ GError **error)
|
|
||||||
+{
|
|
||||||
+ g_set_error_literal (error,
|
|
||||||
+ G_IO_ERROR,
|
|
||||||
+ G_IO_ERROR_NOT_SUPPORTED,
|
|
||||||
+ _("Resource files cannot be renamed"));
|
|
||||||
+ return NULL;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
g_resource_file_file_iface_init (GFileIface *iface)
|
|
||||||
{
|
|
||||||
@@ -664,6 +677,7 @@ g_resource_file_file_iface_init (GFileIface *iface)
|
|
||||||
iface->get_relative_path = g_resource_file_get_relative_path;
|
|
||||||
iface->resolve_relative_path = g_resource_file_resolve_relative_path;
|
|
||||||
iface->get_child_for_display_name = g_resource_file_get_child_for_display_name;
|
|
||||||
+ iface->set_display_name = g_resource_file_set_display_name;
|
|
||||||
iface->enumerate_children = g_resource_file_enumerate_children;
|
|
||||||
iface->query_info = g_resource_file_query_info;
|
|
||||||
iface->query_filesystem_info = g_resource_file_query_filesystem_info;
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,228 +0,0 @@
|
|||||||
From 4f79f0712cd5c67301e60e758a2f6c60b44e7a0e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Philip Withnall <pwithnall@endlessos.org>
|
|
||||||
Date: Mon, 28 Mar 2022 12:55:20 +0100
|
|
||||||
Subject: [PATCH] gversionmacros: Add version macros for GLib 2.74
|
|
||||||
|
|
||||||
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/4f79f0712cd5c67301e60e758a2f6c60b44e7a0e
|
|
||||||
|
|
||||||
---
|
|
||||||
docs/reference/gio/gio-docs.xml | 4 +++
|
|
||||||
docs/reference/glib/glib-docs.xml | 4 +++
|
|
||||||
docs/reference/glib/glib-sections.txt | 14 ++++++++
|
|
||||||
docs/reference/gobject/gobject-docs.xml | 4 +++
|
|
||||||
docs/reference/meson.build | 2 +-
|
|
||||||
glib/gversionmacros.h | 44 +++++++++++++++++++++++++
|
|
||||||
6 files changed, 71 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/docs/reference/gio/gio-docs.xml b/docs/reference/gio/gio-docs.xml
|
|
||||||
index 76057e8978..bee46875ff 100644
|
|
||||||
--- a/docs/reference/gio/gio-docs.xml
|
|
||||||
+++ b/docs/reference/gio/gio-docs.xml
|
|
||||||
@@ -400,6 +400,10 @@
|
|
||||||
<title>Index of new symbols in 2.72</title>
|
|
||||||
<xi:include href="xml/api-index-2.72.xml"><xi:fallback /></xi:include>
|
|
||||||
</index>
|
|
||||||
+ <index id="api-index-2-74" role="2.74">
|
|
||||||
+ <title>Index of new symbols in 2.74</title>
|
|
||||||
+ <xi:include href="xml/api-index-2.74.xml"><xi:fallback /></xi:include>
|
|
||||||
+ </index>
|
|
||||||
|
|
||||||
<xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
|
|
||||||
|
|
||||||
diff --git a/docs/reference/glib/glib-docs.xml b/docs/reference/glib/glib-docs.xml
|
|
||||||
index e642f4e930..b3928257e4 100644
|
|
||||||
--- a/docs/reference/glib/glib-docs.xml
|
|
||||||
+++ b/docs/reference/glib/glib-docs.xml
|
|
||||||
@@ -296,6 +296,10 @@
|
|
||||||
<title>Index of new symbols in 2.72</title>
|
|
||||||
<xi:include href="xml/api-index-2.72.xml"><xi:fallback /></xi:include>
|
|
||||||
</index>
|
|
||||||
+ <index id="api-index-2-74" role="2.74">
|
|
||||||
+ <title>Index of new symbols in 2.74</title>
|
|
||||||
+ <xi:include href="xml/api-index-2.74.xml"><xi:fallback /></xi:include>
|
|
||||||
+ </index>
|
|
||||||
|
|
||||||
<xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
|
|
||||||
|
|
||||||
diff --git a/docs/reference/glib/glib-sections.txt b/docs/reference/glib/glib-sections.txt
|
|
||||||
index 97dcf1f701..3532d28cb0 100644
|
|
||||||
--- a/docs/reference/glib/glib-sections.txt
|
|
||||||
+++ b/docs/reference/glib/glib-sections.txt
|
|
||||||
@@ -140,6 +140,7 @@ GLIB_VERSION_2_66
|
|
||||||
GLIB_VERSION_2_68
|
|
||||||
GLIB_VERSION_2_70
|
|
||||||
GLIB_VERSION_2_72
|
|
||||||
+GLIB_VERSION_2_74
|
|
||||||
GLIB_VERSION_CUR_STABLE
|
|
||||||
GLIB_VERSION_PREV_STABLE
|
|
||||||
GLIB_VERSION_MIN_REQUIRED
|
|
||||||
@@ -172,6 +173,7 @@ GLIB_AVAILABLE_ENUMERATOR_IN_2_66
|
|
||||||
GLIB_AVAILABLE_ENUMERATOR_IN_2_68
|
|
||||||
GLIB_AVAILABLE_ENUMERATOR_IN_2_70
|
|
||||||
GLIB_AVAILABLE_ENUMERATOR_IN_2_72
|
|
||||||
+GLIB_AVAILABLE_ENUMERATOR_IN_2_74
|
|
||||||
GLIB_AVAILABLE_IN_ALL
|
|
||||||
GLIB_AVAILABLE_IN_2_26
|
|
||||||
GLIB_AVAILABLE_IN_2_28
|
|
||||||
@@ -197,6 +199,7 @@ GLIB_AVAILABLE_IN_2_66
|
|
||||||
GLIB_AVAILABLE_IN_2_68
|
|
||||||
GLIB_AVAILABLE_IN_2_70
|
|
||||||
GLIB_AVAILABLE_IN_2_72
|
|
||||||
+GLIB_AVAILABLE_IN_2_74
|
|
||||||
GLIB_AVAILABLE_MACRO_IN_2_26
|
|
||||||
GLIB_AVAILABLE_MACRO_IN_2_28
|
|
||||||
GLIB_AVAILABLE_MACRO_IN_2_30
|
|
||||||
@@ -221,6 +224,7 @@ GLIB_AVAILABLE_MACRO_IN_2_66
|
|
||||||
GLIB_AVAILABLE_MACRO_IN_2_68
|
|
||||||
GLIB_AVAILABLE_MACRO_IN_2_70
|
|
||||||
GLIB_AVAILABLE_MACRO_IN_2_72
|
|
||||||
+GLIB_AVAILABLE_MACRO_IN_2_74
|
|
||||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_44
|
|
||||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_60
|
|
||||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_62
|
|
||||||
@@ -229,6 +233,7 @@ GLIB_AVAILABLE_STATIC_INLINE_IN_2_66
|
|
||||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_68
|
|
||||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_70
|
|
||||||
GLIB_AVAILABLE_STATIC_INLINE_IN_2_72
|
|
||||||
+GLIB_AVAILABLE_STATIC_INLINE_IN_2_74
|
|
||||||
GLIB_AVAILABLE_TYPE_IN_2_26
|
|
||||||
GLIB_AVAILABLE_TYPE_IN_2_28
|
|
||||||
GLIB_AVAILABLE_TYPE_IN_2_30
|
|
||||||
@@ -253,6 +258,7 @@ GLIB_AVAILABLE_TYPE_IN_2_66
|
|
||||||
GLIB_AVAILABLE_TYPE_IN_2_68
|
|
||||||
GLIB_AVAILABLE_TYPE_IN_2_70
|
|
||||||
GLIB_AVAILABLE_TYPE_IN_2_72
|
|
||||||
+GLIB_AVAILABLE_TYPE_IN_2_74
|
|
||||||
GLIB_DEPRECATED_ENUMERATOR
|
|
||||||
GLIB_DEPRECATED_ENUMERATOR_FOR
|
|
||||||
GLIB_DEPRECATED_ENUMERATOR_IN_2_26
|
|
||||||
@@ -303,6 +309,8 @@ GLIB_DEPRECATED_ENUMERATOR_IN_2_70
|
|
||||||
GLIB_DEPRECATED_ENUMERATOR_IN_2_70_FOR
|
|
||||||
GLIB_DEPRECATED_ENUMERATOR_IN_2_72
|
|
||||||
GLIB_DEPRECATED_ENUMERATOR_IN_2_72_FOR
|
|
||||||
+GLIB_DEPRECATED_ENUMERATOR_IN_2_74
|
|
||||||
+GLIB_DEPRECATED_ENUMERATOR_IN_2_74_FOR
|
|
||||||
GLIB_DEPRECATED_IN_2_26
|
|
||||||
GLIB_DEPRECATED_IN_2_26_FOR
|
|
||||||
GLIB_DEPRECATED_IN_2_28
|
|
||||||
@@ -351,6 +359,8 @@ GLIB_DEPRECATED_IN_2_70
|
|
||||||
GLIB_DEPRECATED_IN_2_70_FOR
|
|
||||||
GLIB_DEPRECATED_IN_2_72
|
|
||||||
GLIB_DEPRECATED_IN_2_72_FOR
|
|
||||||
+GLIB_DEPRECATED_IN_2_74
|
|
||||||
+GLIB_DEPRECATED_IN_2_74_FOR
|
|
||||||
GLIB_DEPRECATED_MACRO
|
|
||||||
GLIB_DEPRECATED_MACRO_FOR
|
|
||||||
GLIB_DEPRECATED_MACRO_IN_2_26
|
|
||||||
@@ -401,6 +411,8 @@ GLIB_DEPRECATED_MACRO_IN_2_70
|
|
||||||
GLIB_DEPRECATED_MACRO_IN_2_70_FOR
|
|
||||||
GLIB_DEPRECATED_MACRO_IN_2_72
|
|
||||||
GLIB_DEPRECATED_MACRO_IN_2_72_FOR
|
|
||||||
+GLIB_DEPRECATED_MACRO_IN_2_74
|
|
||||||
+GLIB_DEPRECATED_MACRO_IN_2_74_FOR
|
|
||||||
GLIB_DEPRECATED_TYPE
|
|
||||||
GLIB_DEPRECATED_TYPE_FOR
|
|
||||||
GLIB_DEPRECATED_TYPE_IN_2_26
|
|
||||||
@@ -451,6 +463,8 @@ GLIB_DEPRECATED_TYPE_IN_2_70
|
|
||||||
GLIB_DEPRECATED_TYPE_IN_2_70_FOR
|
|
||||||
GLIB_DEPRECATED_TYPE_IN_2_72
|
|
||||||
GLIB_DEPRECATED_TYPE_IN_2_72_FOR
|
|
||||||
+GLIB_DEPRECATED_TYPE_IN_2_74
|
|
||||||
+GLIB_DEPRECATED_TYPE_IN_2_74_FOR
|
|
||||||
GLIB_VERSION_CUR_STABLE
|
|
||||||
GLIB_VERSION_PREV_STABLE
|
|
||||||
</SECTION>
|
|
||||||
diff --git a/docs/reference/gobject/gobject-docs.xml b/docs/reference/gobject/gobject-docs.xml
|
|
||||||
index aa5a9c7220..bfab048372 100644
|
|
||||||
--- a/docs/reference/gobject/gobject-docs.xml
|
|
||||||
+++ b/docs/reference/gobject/gobject-docs.xml
|
|
||||||
@@ -218,6 +218,10 @@
|
|
||||||
<title>Index of new symbols in 2.72</title>
|
|
||||||
<xi:include href="xml/api-index-2.72.xml"><xi:fallback /></xi:include>
|
|
||||||
</index>
|
|
||||||
+ <index id="api-index-2-74" role="2.74">
|
|
||||||
+ <title>Index of new symbols in 2.74</title>
|
|
||||||
+ <xi:include href="xml/api-index-2.74.xml"><xi:fallback /></xi:include>
|
|
||||||
+ </index>
|
|
||||||
|
|
||||||
<xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
|
|
||||||
|
|
||||||
diff --git a/docs/reference/meson.build b/docs/reference/meson.build
|
|
||||||
index 8128e21bf2..1bc97a2f6e 100644
|
|
||||||
--- a/docs/reference/meson.build
|
|
||||||
+++ b/docs/reference/meson.build
|
|
||||||
@@ -7,7 +7,7 @@
|
|
||||||
stable_2_series_versions = [
|
|
||||||
'26', '28', '30', '32', '34', '36', '38',
|
|
||||||
'40', '42', '44', '46', '48', '50', '52', '54', '56', '58',
|
|
||||||
- '60', '62', '64', '66', '68', '70', '72',
|
|
||||||
+ '60', '62', '64', '66', '68', '70', '72', '74',
|
|
||||||
]
|
|
||||||
|
|
||||||
ignore_decorators = [
|
|
||||||
diff --git a/glib/gversionmacros.h b/glib/gversionmacros.h
|
|
||||||
index e08c809019..143e048241 100644
|
|
||||||
--- a/glib/gversionmacros.h
|
|
||||||
+++ b/glib/gversionmacros.h
|
|
||||||
@@ -275,6 +275,16 @@
|
|
||||||
*/
|
|
||||||
#define GLIB_VERSION_2_72 (G_ENCODE_VERSION (2, 72))
|
|
||||||
|
|
||||||
+/**
|
|
||||||
+ * GLIB_VERSION_2_74:
|
|
||||||
+ *
|
|
||||||
+ * A macro that evaluates to the 2.74 version of GLib, in a format
|
|
||||||
+ * that can be used by the C pre-processor.
|
|
||||||
+ *
|
|
||||||
+ * Since: 2.74
|
|
||||||
+ */
|
|
||||||
+#define GLIB_VERSION_2_74 (G_ENCODE_VERSION (2, 74))
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* GLIB_VERSION_CUR_STABLE:
|
|
||||||
*
|
|
||||||
@@ -1164,4 +1174,38 @@
|
|
||||||
# define GLIB_AVAILABLE_TYPE_IN_2_72
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_74
|
|
||||||
+# define GLIB_DEPRECATED_IN_2_74 GLIB_DEPRECATED
|
|
||||||
+# define GLIB_DEPRECATED_IN_2_74_FOR(f) GLIB_DEPRECATED_FOR(f)
|
|
||||||
+# define GLIB_DEPRECATED_MACRO_IN_2_74 GLIB_DEPRECATED_MACRO
|
|
||||||
+# define GLIB_DEPRECATED_MACRO_IN_2_74_FOR(f) GLIB_DEPRECATED_MACRO_FOR(f)
|
|
||||||
+# define GLIB_DEPRECATED_ENUMERATOR_IN_2_74 GLIB_DEPRECATED_ENUMERATOR
|
|
||||||
+# define GLIB_DEPRECATED_ENUMERATOR_IN_2_74_FOR(f) GLIB_DEPRECATED_ENUMERATOR_FOR(f)
|
|
||||||
+# define GLIB_DEPRECATED_TYPE_IN_2_74 GLIB_DEPRECATED_TYPE
|
|
||||||
+# define GLIB_DEPRECATED_TYPE_IN_2_74_FOR(f) GLIB_DEPRECATED_TYPE_FOR(f)
|
|
||||||
+#else
|
|
||||||
+# define GLIB_DEPRECATED_IN_2_74 _GLIB_EXTERN
|
|
||||||
+# define GLIB_DEPRECATED_IN_2_74_FOR(f) _GLIB_EXTERN
|
|
||||||
+# define GLIB_DEPRECATED_MACRO_IN_2_74
|
|
||||||
+# define GLIB_DEPRECATED_MACRO_IN_2_74_FOR(f)
|
|
||||||
+# define GLIB_DEPRECATED_ENUMERATOR_IN_2_74
|
|
||||||
+# define GLIB_DEPRECATED_ENUMERATOR_IN_2_74_FOR(f)
|
|
||||||
+# define GLIB_DEPRECATED_TYPE_IN_2_74
|
|
||||||
+# define GLIB_DEPRECATED_TYPE_IN_2_74_FOR(f)
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_74
|
|
||||||
+# define GLIB_AVAILABLE_IN_2_74 GLIB_UNAVAILABLE(2, 74)
|
|
||||||
+# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_74 GLIB_UNAVAILABLE_STATIC_INLINE(2, 74)
|
|
||||||
+# define GLIB_AVAILABLE_MACRO_IN_2_74 GLIB_UNAVAILABLE_MACRO(2, 74)
|
|
||||||
+# define GLIB_AVAILABLE_ENUMERATOR_IN_2_74 GLIB_UNAVAILABLE_ENUMERATOR(2, 74)
|
|
||||||
+# define GLIB_AVAILABLE_TYPE_IN_2_74 GLIB_UNAVAILABLE_TYPE(2, 74)
|
|
||||||
+#else
|
|
||||||
+# define GLIB_AVAILABLE_IN_2_74 _GLIB_EXTERN
|
|
||||||
+# define GLIB_AVAILABLE_STATIC_INLINE_IN_2_74
|
|
||||||
+# define GLIB_AVAILABLE_MACRO_IN_2_74
|
|
||||||
+# define GLIB_AVAILABLE_ENUMERATOR_IN_2_74
|
|
||||||
+# define GLIB_AVAILABLE_TYPE_IN_2_74
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#endif /* __G_VERSION_MACROS_H__ */
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
From 27203e48c91ab8b55033dcf1773cb60c0aaed3fa Mon Sep 17 00:00:00 2001
|
|
||||||
From: Sebastian Keller <skeller@gnome.org>
|
|
||||||
Date: Tue, 30 Aug 2022 21:39:36 +0200
|
|
||||||
Subject: [PATCH] documentportal: Fix small leak in add_documents with empty
|
|
||||||
URI list
|
|
||||||
|
|
||||||
When called with an empty URI list (or only inaccessible files),
|
|
||||||
g_document_portal_add_documents would not call g_variant_builder_end,
|
|
||||||
leaking the memory allocated by the variant builder.
|
|
||||||
|
|
||||||
Closes: https://gitlab.gnome.org/GNOME/glib/-/issues/2733
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/27203e48c91ab8b55033dcf1773cb60c0aaed3fa
|
|
||||||
|
|
||||||
---
|
|
||||||
gio/gdocumentportal.c | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/gio/gdocumentportal.c b/gio/gdocumentportal.c
|
|
||||||
index c08c36c581..382e2aab6e 100644
|
|
||||||
--- a/gio/gdocumentportal.c
|
|
||||||
+++ b/gio/gdocumentportal.c
|
|
||||||
@@ -203,6 +203,7 @@ g_document_portal_add_documents (GList *uris,
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ruris = g_list_copy_deep (uris, (GCopyFunc)g_strdup, NULL);
|
|
||||||
+ g_variant_builder_clear (&builder);
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,46 +0,0 @@
|
|||||||
From 02d0d6497b92d05d1145d1077654ad2453938b6c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Rozhuk Ivan <rozhuk.im@gmail.com>
|
|
||||||
Date: Sat, 25 Jun 2022 19:01:30 +0300
|
|
||||||
Subject: [PATCH] [PATCH] _g_get_unix_mount_points(): reduce syscalls inside
|
|
||||||
loop
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/02d0d6497b92d05d1145d1077654ad2453938b6c
|
|
||||||
|
|
||||||
---
|
|
||||||
gio/gunixmounts.c | 16 ++++++++--------
|
|
||||||
1 file changed, 8 insertions(+), 8 deletions(-)
|
|
||||||
diff --git a/gio/gunixmounts.c b/gio/gunixmounts.c
|
|
||||||
index ba08245..92ab163 100644
|
|
||||||
--- a/gio/gunixmounts.c
|
|
||||||
+++ b/gio/gunixmounts.c
|
|
||||||
@@ -1414,6 +1414,7 @@ _g_get_unix_mount_points (void)
|
|
||||||
GList *return_list = NULL;
|
|
||||||
G_LOCK_DEFINE_STATIC (fsent);
|
|
||||||
#ifdef HAVE_SYS_SYSCTL_H
|
|
||||||
+ uid_t uid = getuid ();
|
|
||||||
int usermnt = 0;
|
|
||||||
struct stat sb;
|
|
||||||
#endif
|
|
||||||
@@ -1466,14 +1467,13 @@ _g_get_unix_mount_points (void)
|
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SYSCTL_H
|
|
||||||
if (usermnt != 0)
|
|
||||||
- {
|
|
||||||
- uid_t uid = getuid ();
|
|
||||||
- if (stat (fstab->fs_file, &sb) == 0)
|
|
||||||
- {
|
|
||||||
- if (uid == 0 || sb.st_uid == uid)
|
|
||||||
- is_user_mountable = TRUE;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
+ {
|
|
||||||
+ if (uid == 0 ||
|
|
||||||
+ (stat (fstab->fs_file, &sb) == 0 && sb.st_uid == uid))
|
|
||||||
+ {
|
|
||||||
+ is_user_mountable = TRUE;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
mount_point = create_unix_mount_point (fstab->fs_spec,
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
From 221f22b6e18fdd306e676e28a79afd3697bddd03 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Fri, 2 Sep 2022 20:38:46 +0200
|
|
||||||
Subject: [PATCH] gdesktopappinfo: Unref the GDBus call results
|
|
||||||
|
|
||||||
On our GDBus call callback wrapper we were completing the gdbus call but
|
|
||||||
ignoring the returned value, that was always leaked.
|
|
||||||
|
|
||||||
Fix this.
|
|
||||||
|
|
||||||
Helps with: https://gitlab.gnome.org/GNOME/glib/-/issues/333
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/221f22b6e18fdd306e676e28a79afd3697bddd03
|
|
||||||
|
|
||||||
---
|
|
||||||
gio/gdesktopappinfo.c | 8 ++++++--
|
|
||||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gio/gdesktopappinfo.c b/gio/gdesktopappinfo.c
|
|
||||||
index af2311ca52..52d308f540 100644
|
|
||||||
--- a/gio/gdesktopappinfo.c
|
|
||||||
+++ b/gio/gdesktopappinfo.c
|
|
||||||
@@ -3283,15 +3283,19 @@ launch_uris_with_dbus_cb (GObject *object,
|
|
||||||
{
|
|
||||||
GTask *task = G_TASK (user_data);
|
|
||||||
GError *error = NULL;
|
|
||||||
+ GVariant *ret;
|
|
||||||
|
|
||||||
- g_dbus_connection_call_finish (G_DBUS_CONNECTION (object), result, &error);
|
|
||||||
+ ret = g_dbus_connection_call_finish (G_DBUS_CONNECTION (object), result, &error);
|
|
||||||
if (error != NULL)
|
|
||||||
{
|
|
||||||
g_dbus_error_strip_remote_error (error);
|
|
||||||
g_task_return_error (task, g_steal_pointer (&error));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
- g_task_return_boolean (task, TRUE);
|
|
||||||
+ {
|
|
||||||
+ g_task_return_boolean (task, TRUE);
|
|
||||||
+ g_variant_unref (ret);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
g_object_unref (task);
|
|
||||||
}
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,29 +0,0 @@
|
|||||||
From e268ff39b648e7b100d2aa50f472b4ff8ff5313a Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Fri, 2 Sep 2022 21:10:05 +0200
|
|
||||||
Subject: [PATCH] gio/tests/gdbus-peer: Unref cached property GVariant value
|
|
||||||
|
|
||||||
Helps with: https://gitlab.gnome.org/GNOME/glib/-/issues/333
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/e268ff39b648e7b100d2aa50f472b4ff8ff5313a
|
|
||||||
|
|
||||||
---
|
|
||||||
gio/tests/gdbus-peer.c | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/gio/tests/gdbus-peer.c b/gio/tests/gdbus-peer.c
|
|
||||||
index 7179d089df..763689a4fd 100644
|
|
||||||
--- a/gio/tests/gdbus-peer.c
|
|
||||||
+++ b/gio/tests/gdbus-peer.c
|
|
||||||
@@ -843,6 +843,7 @@ do_test_peer (void)
|
|
||||||
error = NULL;
|
|
||||||
value = g_dbus_proxy_get_cached_property (proxy, "PeerProperty");
|
|
||||||
g_assert_cmpstr (g_variant_get_string (value, NULL), ==, "ThePropertyValue");
|
|
||||||
+ g_clear_pointer (&value, g_variant_unref);
|
|
||||||
|
|
||||||
/* try invoking a method */
|
|
||||||
error = NULL;
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,67 +0,0 @@
|
|||||||
From 1da208cddc19cad05ccf4b798a99f7045e41ffc4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Fri, 2 Sep 2022 20:26:06 +0200
|
|
||||||
Subject: [PATCH] gio/tests/gdbus-proxy-threads: Unref GVariant's that we own
|
|
||||||
|
|
||||||
This test is leaking various GVariant's that we are supposed to unref,
|
|
||||||
leading the valgrind CI job to complain about.
|
|
||||||
|
|
||||||
Helps with: https://gitlab.gnome.org/GNOME/glib/-/issues/333
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/1da208cddc19cad05ccf4b798a99f7045e41ffc4
|
|
||||||
|
|
||||||
---
|
|
||||||
gio/tests/gdbus-proxy-threads.c | 12 ++++++++++--
|
|
||||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gio/tests/gdbus-proxy-threads.c b/gio/tests/gdbus-proxy-threads.c
|
|
||||||
index 76b857e731..a0a38d07cd 100644
|
|
||||||
--- a/gio/tests/gdbus-proxy-threads.c
|
|
||||||
+++ b/gio/tests/gdbus-proxy-threads.c
|
|
||||||
@@ -119,13 +119,17 @@ request_name_cb (GObject *source,
|
|
||||||
GDBusConnection *connection = G_DBUS_CONNECTION (source);
|
|
||||||
GError *error = NULL;
|
|
||||||
GVariant *var;
|
|
||||||
+ GVariant *child;
|
|
||||||
|
|
||||||
var = g_dbus_connection_call_finish (connection, res, &error);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
- g_assert_cmpuint (g_variant_get_uint32 (g_variant_get_child_value (var, 0)),
|
|
||||||
+ child = g_variant_get_child_value (var, 0);
|
|
||||||
+ g_assert_cmpuint (g_variant_get_uint32 (child),
|
|
||||||
==, DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER);
|
|
||||||
|
|
||||||
release_name (connection, TRUE);
|
|
||||||
+ g_variant_unref (child);
|
|
||||||
+ g_variant_unref (var);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -154,11 +158,13 @@ release_name_cb (GObject *source,
|
|
||||||
GDBusConnection *connection = G_DBUS_CONNECTION (source);
|
|
||||||
GError *error = NULL;
|
|
||||||
GVariant *var;
|
|
||||||
+ GVariant *child;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
var = g_dbus_connection_call_finish (connection, res, &error);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
- g_assert_cmpuint (g_variant_get_uint32 (g_variant_get_child_value (var, 0)),
|
|
||||||
+ child = g_variant_get_child_value (var, 0);
|
|
||||||
+ g_assert_cmpuint (g_variant_get_uint32 (child),
|
|
||||||
==, DBUS_RELEASE_NAME_REPLY_RELEASED);
|
|
||||||
|
|
||||||
/* generate some rapid NameOwnerChanged signals to try to trigger crashes */
|
|
||||||
@@ -170,6 +176,8 @@ release_name_cb (GObject *source,
|
|
||||||
|
|
||||||
/* wait for dbus-daemon to catch up */
|
|
||||||
request_name (connection, TRUE);
|
|
||||||
+ g_variant_unref (child);
|
|
||||||
+ g_variant_unref (var);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,58 +0,0 @@
|
|||||||
From cef780e9ef86b1d9545db892c6b8340488da21d9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon McVittie <smcv@collabora.com>
|
|
||||||
Date: Thu, 23 Jun 2022 10:12:44 +0100
|
|
||||||
Subject: [PATCH] giochannel: Add G_IO_FLAG_NONE
|
|
||||||
|
|
||||||
This makes the state where no flags are set a bit more self-documenting.
|
|
||||||
|
|
||||||
Signed-off-by: Simon McVittie <smcv@collabora.com>
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/cef780e9ef86b1d9545db892c6b8340488da21d9
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/giochannel.c | 1 +
|
|
||||||
glib/giochannel.h | 1 +
|
|
||||||
glib/giounix.c | 2 +-
|
|
||||||
3 files changed, 3 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/glib/giochannel.c b/glib/giochannel.c
|
|
||||||
index 6fec45f66d..25baf42c9a 100644
|
|
||||||
--- a/glib/giochannel.c
|
|
||||||
+++ b/glib/giochannel.c
|
|
||||||
@@ -946,6 +946,7 @@ g_io_channel_get_line_term (GIOChannel *channel,
|
|
||||||
**/
|
|
||||||
/**
|
|
||||||
* GIOFlags:
|
|
||||||
+ * @G_IO_FLAG_NONE: no special flags set. Since: 2.74
|
|
||||||
* @G_IO_FLAG_APPEND: turns on append mode, corresponds to %O_APPEND
|
|
||||||
* (see the documentation of the UNIX open() syscall)
|
|
||||||
* @G_IO_FLAG_NONBLOCK: turns on nonblocking mode, corresponds to
|
|
||||||
diff --git a/glib/giochannel.h b/glib/giochannel.h
|
|
||||||
index 5a13449d58..dee3d7d055 100644
|
|
||||||
--- a/glib/giochannel.h
|
|
||||||
+++ b/glib/giochannel.h
|
|
||||||
@@ -85,6 +85,7 @@ typedef enum
|
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
+ G_IO_FLAG_NONE GLIB_AVAILABLE_ENUMERATOR_IN_2_74 = 0,
|
|
||||||
G_IO_FLAG_APPEND = 1 << 0,
|
|
||||||
G_IO_FLAG_NONBLOCK = 1 << 1,
|
|
||||||
G_IO_FLAG_IS_READABLE = 1 << 2, /* Read only flag */
|
|
||||||
diff --git a/glib/giounix.c b/glib/giounix.c
|
|
||||||
index b6345b6c68..067cecf9ac 100644
|
|
||||||
--- a/glib/giounix.c
|
|
||||||
+++ b/glib/giounix.c
|
|
||||||
@@ -400,7 +400,7 @@ g_io_unix_set_flags (GIOChannel *channel,
|
|
||||||
static GIOFlags
|
|
||||||
g_io_unix_get_flags (GIOChannel *channel)
|
|
||||||
{
|
|
||||||
- GIOFlags flags = 0;
|
|
||||||
+ GIOFlags flags = G_IO_FLAG_NONE;
|
|
||||||
glong fcntl_flags;
|
|
||||||
GIOUnixChannel *unix_channel = (GIOUnixChannel *) channel;
|
|
||||||
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,82 +0,0 @@
|
|||||||
From f59e02a1439c70616547d51abf0a6da33e095e80 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon McVittie <smcv@collabora.com>
|
|
||||||
Date: Thu, 31 Mar 2022 14:28:56 +0100
|
|
||||||
Subject: [PATCH] gioenums: Add G_TLS_CERTIFICATE_FLAGS_NONE
|
|
||||||
|
|
||||||
This makes the absence of flags (in other words, a valid certificate)
|
|
||||||
more self-documenting.
|
|
||||||
|
|
||||||
Signed-off-by: Simon McVittie <smcv@collabora.com>
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/f59e02a1439c70616547d51abf0a6da33e095e80
|
|
||||||
|
|
||||||
---
|
|
||||||
gio/gdtlsclientconnection.c | 2 +-
|
|
||||||
gio/gioenums.h | 2 ++
|
|
||||||
gio/gtlscertificate.c | 2 ++
|
|
||||||
gio/gtlsclientconnection.c | 2 +-
|
|
||||||
4 files changed, 6 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gio/gdtlsclientconnection.c b/gio/gdtlsclientconnection.c
|
|
||||||
index 74cce7572f..403c8b74d0 100644
|
|
||||||
--- a/gio/gdtlsclientconnection.c
|
|
||||||
+++ b/gio/gdtlsclientconnection.c
|
|
||||||
@@ -191,7 +191,7 @@ g_dtls_client_connection_new (GDatagramBased *base_socket,
|
|
||||||
GTlsCertificateFlags
|
|
||||||
g_dtls_client_connection_get_validation_flags (GDtlsClientConnection *conn)
|
|
||||||
{
|
|
||||||
- GTlsCertificateFlags flags = 0;
|
|
||||||
+ GTlsCertificateFlags flags = G_TLS_CERTIFICATE_FLAGS_NONE;
|
|
||||||
|
|
||||||
g_return_val_if_fail (G_IS_DTLS_CLIENT_CONNECTION (conn), 0);
|
|
||||||
|
|
||||||
diff --git a/gio/gioenums.h b/gio/gioenums.h
|
|
||||||
index 0d27c15a2b..deacd62206 100644
|
|
||||||
--- a/gio/gioenums.h
|
|
||||||
+++ b/gio/gioenums.h
|
|
||||||
@@ -1578,6 +1578,7 @@ typedef enum {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GTlsCertificateFlags:
|
|
||||||
+ * @G_TLS_CERTIFICATE_FLAGS_NONE: No flags. Since: 2.74
|
|
||||||
* @G_TLS_CERTIFICATE_UNKNOWN_CA: The signing certificate authority is
|
|
||||||
* not known.
|
|
||||||
* @G_TLS_CERTIFICATE_BAD_IDENTITY: The certificate does not match the
|
|
||||||
@@ -1609,6 +1610,7 @@ typedef enum {
|
|
||||||
* Since: 2.28
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
+ G_TLS_CERTIFICATE_FLAGS_NONE GLIB_AVAILABLE_ENUMERATOR_IN_2_74 = 0,
|
|
||||||
G_TLS_CERTIFICATE_UNKNOWN_CA = (1 << 0),
|
|
||||||
G_TLS_CERTIFICATE_BAD_IDENTITY = (1 << 1),
|
|
||||||
G_TLS_CERTIFICATE_NOT_ACTIVATED = (1 << 2),
|
|
||||||
diff --git a/gio/gtlscertificate.c b/gio/gtlscertificate.c
|
|
||||||
index ca09b180ae..e97b8ac144 100644
|
|
||||||
--- a/gio/gtlscertificate.c
|
|
||||||
+++ b/gio/gtlscertificate.c
|
|
||||||
@@ -1121,6 +1121,8 @@ g_tls_certificate_get_issuer (GTlsCertificate *cert)
|
|
||||||
* check a certificate against a CA that is not part of the system
|
|
||||||
* CA database.
|
|
||||||
*
|
|
||||||
+ * If @cert is valid, %G_TLS_CERTIFICATE_FLAGS_NONE is returned.
|
|
||||||
+ *
|
|
||||||
* If @identity is not %NULL, @cert's name(s) will be compared against
|
|
||||||
* it, and %G_TLS_CERTIFICATE_BAD_IDENTITY will be set in the return
|
|
||||||
* value if it does not match. If @identity is %NULL, that bit will
|
|
||||||
diff --git a/gio/gtlsclientconnection.c b/gio/gtlsclientconnection.c
|
|
||||||
index a6dc897f9f..e6c77b681d 100644
|
|
||||||
--- a/gio/gtlsclientconnection.c
|
|
||||||
+++ b/gio/gtlsclientconnection.c
|
|
||||||
@@ -213,7 +213,7 @@ g_tls_client_connection_new (GIOStream *base_io_stream,
|
|
||||||
GTlsCertificateFlags
|
|
||||||
g_tls_client_connection_get_validation_flags (GTlsClientConnection *conn)
|
|
||||||
{
|
|
||||||
- GTlsCertificateFlags flags = 0;
|
|
||||||
+ GTlsCertificateFlags flags = G_TLS_CERTIFICATE_FLAGS_NONE;
|
|
||||||
|
|
||||||
g_return_val_if_fail (G_IS_TLS_CLIENT_CONNECTION (conn), 0);
|
|
||||||
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,53 +0,0 @@
|
|||||||
From cc528f6c2e336a3484c920fe2d11337388829dbe Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon McVittie <smcv@collabora.com>
|
|
||||||
Date: Thu, 23 Jun 2022 10:09:15 +0100
|
|
||||||
Subject: [PATCH] giomodule test: Don't pass a magic number to
|
|
||||||
g_test_trap_subprocess()
|
|
||||||
|
|
||||||
This worked, but seems like bad style.
|
|
||||||
|
|
||||||
Signed-off-by: Simon McVittie <smcv@collabora.com>
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/cc528f6c2e336a3484c920fe2d11337388829dbe
|
|
||||||
|
|
||||||
---
|
|
||||||
gio/tests/giomodule.c | 8 ++++++--
|
|
||||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gio/tests/giomodule.c b/gio/tests/giomodule.c
|
|
||||||
index b4923eeefd..4ea6efebd1 100644
|
|
||||||
--- a/gio/tests/giomodule.c
|
|
||||||
+++ b/gio/tests/giomodule.c
|
|
||||||
@@ -80,6 +80,10 @@ test_extension_point (void)
|
|
||||||
g_assert (g_io_extension_get_priority (ext) == 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#define INHERIT_ALL (G_TEST_SUBPROCESS_INHERIT_STDIN | \
|
|
||||||
+ G_TEST_SUBPROCESS_INHERIT_STDOUT | \
|
|
||||||
+ G_TEST_SUBPROCESS_INHERIT_STDERR)
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
test_module_scan_all (void)
|
|
||||||
{
|
|
||||||
@@ -105,7 +109,7 @@ test_module_scan_all (void)
|
|
||||||
g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-a");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
- g_test_trap_subprocess (NULL, 0, 7);
|
|
||||||
+ g_test_trap_subprocess (NULL, 0, INHERIT_ALL);
|
|
||||||
g_test_trap_assert_passed ();
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -136,7 +140,7 @@ test_module_scan_all_with_scope (void)
|
|
||||||
g_io_module_scope_free (scope);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
- g_test_trap_subprocess (NULL, 0, 7);
|
|
||||||
+ g_test_trap_subprocess (NULL, 0, INHERIT_ALL);
|
|
||||||
g_test_trap_assert_passed ();
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
From 2401e1a090dcaac7614a8984cd3e3832a2a476ab Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Fri, 16 Sep 2022 15:11:47 +0200
|
|
||||||
Subject: [PATCH] glocalfileoutputstream: Do not double-close an fd on unlink
|
|
||||||
error
|
|
||||||
|
|
||||||
In case we fail unlinking a file we could close again an FD that has
|
|
||||||
been already just closed. So avoid this by unsetting it when closing.
|
|
||||||
|
|
||||||
Coverity CID: #1474462
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/2401e1a090dcaac7614a8984cd3e3832a2a476ab
|
|
||||||
|
|
||||||
---
|
|
||||||
gio/glocalfileoutputstream.c | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/gio/glocalfileoutputstream.c b/gio/glocalfileoutputstream.c
|
|
||||||
index 78d3e85..a61d5b5 100644
|
|
||||||
--- a/gio/glocalfileoutputstream.c
|
|
||||||
+++ b/gio/glocalfileoutputstream.c
|
|
||||||
@@ -1163,6 +1163,7 @@ handle_overwrite_open (const char *filename,
|
|
||||||
if (replace_destination_set)
|
|
||||||
{
|
|
||||||
g_close (fd, NULL);
|
|
||||||
+ fd = -1;
|
|
||||||
|
|
||||||
if (g_unlink (filename) != 0)
|
|
||||||
{
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,157 +0,0 @@
|
|||||||
From 0d4e401ede234a3ce25e6098776ef5e966ad080b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon McVittie <smcv@collabora.com>
|
|
||||||
Date: Thu, 23 Jun 2022 10:18:08 +0100
|
|
||||||
Subject: [PATCH] gmarkup: Add G_MARKUP_PARSE_FLAGS_NONE
|
|
||||||
|
|
||||||
Signed-off-by: Simon McVittie <smcv@collabora.com>
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/0d4e401ede234a3ce25e6098776ef5e966ad080b
|
|
||||||
|
|
||||||
---
|
|
||||||
gio/gcontenttype.c | 3 ++-
|
|
||||||
glib/gbookmarkfile.c | 2 +-
|
|
||||||
glib/gmarkup.h | 2 ++
|
|
||||||
glib/tests/autoptr.c | 4 +++-
|
|
||||||
glib/tests/markup-collect.c | 4 +++-
|
|
||||||
glib/tests/markup-parse.c | 2 +-
|
|
||||||
glib/tests/markup-subparser.c | 3 ++-
|
|
||||||
glib/tests/markup.c | 3 ++-
|
|
||||||
gobject/tests/boxed.c | 3 ++-
|
|
||||||
9 files changed, 18 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gio/gcontenttype.c b/gio/gcontenttype.c
|
|
||||||
index 190c5d7bf8..170bb43419 100644
|
|
||||||
--- a/gio/gcontenttype.c
|
|
||||||
+++ b/gio/gcontenttype.c
|
|
||||||
@@ -435,7 +435,8 @@ load_comment_for_mime_helper (const char *dir,
|
|
||||||
if (!res)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
- context = g_markup_parse_context_new (&parser, 0, &parse_data, NULL);
|
|
||||||
+ context = g_markup_parse_context_new (&parser, G_MARKUP_PARSE_FLAGS_NONE,
|
|
||||||
+ &parse_data, NULL);
|
|
||||||
res = g_markup_parse_context_parse (context, data, len, NULL);
|
|
||||||
g_free (data);
|
|
||||||
g_markup_parse_context_free (context);
|
|
||||||
diff --git a/glib/gbookmarkfile.c b/glib/gbookmarkfile.c
|
|
||||||
index 5ae1ad6642..a45f939b0f 100644
|
|
||||||
--- a/glib/gbookmarkfile.c
|
|
||||||
+++ b/glib/gbookmarkfile.c
|
|
||||||
@@ -1510,7 +1510,7 @@ g_bookmark_file_parse (GBookmarkFile *bookmark,
|
|
||||||
parse_data->bookmark_file = bookmark;
|
|
||||||
|
|
||||||
context = g_markup_parse_context_new (&markup_parser,
|
|
||||||
- 0,
|
|
||||||
+ G_MARKUP_PARSE_FLAGS_NONE,
|
|
||||||
parse_data,
|
|
||||||
(GDestroyNotify) parse_data_free);
|
|
||||||
|
|
||||||
diff --git a/glib/gmarkup.h b/glib/gmarkup.h
|
|
||||||
index ae6976b154..6224d13431 100644
|
|
||||||
--- a/glib/gmarkup.h
|
|
||||||
+++ b/glib/gmarkup.h
|
|
||||||
@@ -76,6 +76,7 @@ GQuark g_markup_error_quark (void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GMarkupParseFlags:
|
|
||||||
+ * @G_MARKUP_PARSE_FLAGS_NONE: No special behaviour. Since: 2.74
|
|
||||||
* @G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG: flag you should not use
|
|
||||||
* @G_MARKUP_TREAT_CDATA_AS_TEXT: When this flag is set, CDATA marked
|
|
||||||
* sections are not passed literally to the @passthrough function of
|
|
||||||
@@ -96,6 +97,7 @@ GQuark g_markup_error_quark (void);
|
|
||||||
*/
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
+ G_MARKUP_PARSE_FLAGS_NONE GLIB_AVAILABLE_ENUMERATOR_IN_2_74 = 0, /*< nick=none >*/
|
|
||||||
G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG = 1 << 0,
|
|
||||||
G_MARKUP_TREAT_CDATA_AS_TEXT = 1 << 1,
|
|
||||||
G_MARKUP_PREFIX_ERROR_POSITION = 1 << 2,
|
|
||||||
diff --git a/glib/tests/autoptr.c b/glib/tests/autoptr.c
|
|
||||||
index 1b2dd7b094..035d3f6133 100644
|
|
||||||
--- a/glib/tests/autoptr.c
|
|
||||||
+++ b/glib/tests/autoptr.c
|
|
||||||
@@ -243,7 +243,9 @@ static GMarkupParser parser = {
|
|
||||||
static void
|
|
||||||
test_g_markup_parse_context (void)
|
|
||||||
{
|
|
||||||
- g_autoptr(GMarkupParseContext) val = g_markup_parse_context_new (&parser, 0, NULL, NULL);
|
|
||||||
+ g_autoptr(GMarkupParseContext) val = g_markup_parse_context_new (&parser,
|
|
||||||
+ G_MARKUP_PARSE_FLAGS_NONE,
|
|
||||||
+ NULL, NULL);
|
|
||||||
g_assert_nonnull (val);
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/glib/tests/markup-collect.c b/glib/tests/markup-collect.c
|
|
||||||
index 04b814b6cc..fa89b0ca61 100644
|
|
||||||
--- a/glib/tests/markup-collect.c
|
|
||||||
+++ b/glib/tests/markup-collect.c
|
|
||||||
@@ -206,7 +206,9 @@ test_cleanup (void)
|
|
||||||
if (!g_test_undefined ())
|
|
||||||
return;
|
|
||||||
|
|
||||||
- context = g_markup_parse_context_new (&cleanup_parser, 0, NULL, NULL);
|
|
||||||
+ context = g_markup_parse_context_new (&cleanup_parser,
|
|
||||||
+ G_MARKUP_PARSE_FLAGS_NONE, NULL,
|
|
||||||
+ NULL);
|
|
||||||
g_markup_parse_context_parse (context, XML, -1, NULL);
|
|
||||||
|
|
||||||
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,
|
|
||||||
diff --git a/glib/tests/markup-parse.c b/glib/tests/markup-parse.c
|
|
||||||
index 00742d7459..1945bc39bd 100644
|
|
||||||
--- a/glib/tests/markup-parse.c
|
|
||||||
+++ b/glib/tests/markup-parse.c
|
|
||||||
@@ -314,7 +314,7 @@ main (int argc, char *argv[])
|
|
||||||
if (argc > 1)
|
|
||||||
{
|
|
||||||
gint arg = 1;
|
|
||||||
- GMarkupParseFlags flags = 0;
|
|
||||||
+ GMarkupParseFlags flags = G_MARKUP_PARSE_FLAGS_NONE;
|
|
||||||
|
|
||||||
if (strcmp (argv[1], "--cdata-as-text") == 0)
|
|
||||||
{
|
|
||||||
diff --git a/glib/tests/markup-subparser.c b/glib/tests/markup-subparser.c
|
|
||||||
index 71b9ac6af5..4b1bc50185 100644
|
|
||||||
--- a/glib/tests/markup-subparser.c
|
|
||||||
+++ b/glib/tests/markup-subparser.c
|
|
||||||
@@ -289,7 +289,8 @@ test (gconstpointer user_data)
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
string = g_string_new (NULL);
|
|
||||||
- ctx = g_markup_parse_context_new (&parser, 0, string, NULL);
|
|
||||||
+ ctx = g_markup_parse_context_new (&parser, G_MARKUP_PARSE_FLAGS_NONE,
|
|
||||||
+ string, NULL);
|
|
||||||
result = g_markup_parse_context_parse (ctx, tc->markup,
|
|
||||||
strlen (tc->markup), &error);
|
|
||||||
if (result)
|
|
||||||
diff --git a/glib/tests/markup.c b/glib/tests/markup.c
|
|
||||||
index 71f9ff16c3..6fced87d49 100644
|
|
||||||
--- a/glib/tests/markup.c
|
|
||||||
+++ b/glib/tests/markup.c
|
|
||||||
@@ -80,7 +80,8 @@ test_markup_stack (void)
|
|
||||||
gboolean res;
|
|
||||||
GError *error = NULL;
|
|
||||||
|
|
||||||
- context = g_markup_parse_context_new (&parser, 0, &data, NULL);
|
|
||||||
+ context = g_markup_parse_context_new (&parser, G_MARKUP_PARSE_FLAGS_NONE,
|
|
||||||
+ &data, NULL);
|
|
||||||
res = g_markup_parse_context_parse (context, content, -1, &error);
|
|
||||||
g_assert (res);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
diff --git a/gobject/tests/boxed.c b/gobject/tests/boxed.c
|
|
||||||
index f961a2f87b..c2d091c54a 100644
|
|
||||||
--- a/gobject/tests/boxed.c
|
|
||||||
+++ b/gobject/tests/boxed.c
|
|
||||||
@@ -560,7 +560,8 @@ test_boxed_markup (void)
|
|
||||||
g_value_init (&value, G_TYPE_MARKUP_PARSE_CONTEXT);
|
|
||||||
g_assert (G_VALUE_HOLDS_BOXED (&value));
|
|
||||||
|
|
||||||
- c = g_markup_parse_context_new (&parser, 0, NULL, NULL);
|
|
||||||
+ c = g_markup_parse_context_new (&parser, G_MARKUP_PARSE_FLAGS_NONE,
|
|
||||||
+ NULL, NULL);
|
|
||||||
g_value_take_boxed (&value, c);
|
|
||||||
|
|
||||||
c2 = g_value_get_boxed (&value);
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,679 +0,0 @@
|
|||||||
From 879b9cd669f03ecd69f0c6913f06275d9c1973c6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon McVittie <smcv@collabora.com>
|
|
||||||
Date: Thu, 23 Jun 2022 10:34:15 +0100
|
|
||||||
Subject: [PATCH] gregex: Add G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT
|
|
||||||
|
|
||||||
Signed-off-by: Simon McVittie <smcv@collabora.com>
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/879b9cd669f03ecd69f0c6913f06275d9c1973c6
|
|
||||||
|
|
||||||
---
|
|
||||||
gio/gsettingsschema.c | 12 ++--
|
|
||||||
glib/gregex.c | 8 +--
|
|
||||||
glib/gregex.h | 4 ++
|
|
||||||
glib/tests/autoptr.c | 6 +-
|
|
||||||
glib/tests/regex.c | 143 +++++++++++++++++++++---------------------
|
|
||||||
gobject/tests/boxed.c | 4 +-
|
|
||||||
6 files changed, 94 insertions(+), 83 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gio/gsettingsschema.c b/gio/gsettingsschema.c
|
|
||||||
index 6ac1dfffa0..fb3bb70122 100644
|
|
||||||
--- a/gio/gsettingsschema.c
|
|
||||||
+++ b/gio/gsettingsschema.c
|
|
||||||
@@ -579,10 +579,14 @@ normalise_whitespace (const gchar *orig)
|
|
||||||
{
|
|
||||||
GRegex *s;
|
|
||||||
|
|
||||||
- cleanup[0] = g_regex_new ("^\\s+", 0, 0, 0);
|
|
||||||
- cleanup[1] = g_regex_new ("\\s+$", 0, 0, 0);
|
|
||||||
- cleanup[2] = g_regex_new ("\\s+", 0, 0, 0);
|
|
||||||
- s = g_regex_new ("\\n\\s*\\n+", 0, 0, 0);
|
|
||||||
+ cleanup[0] = g_regex_new ("^\\s+", G_REGEX_DEFAULT,
|
|
||||||
+ G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
+ cleanup[1] = g_regex_new ("\\s+$", G_REGEX_DEFAULT,
|
|
||||||
+ G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
+ cleanup[2] = g_regex_new ("\\s+", G_REGEX_DEFAULT,
|
|
||||||
+ G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
+ s = g_regex_new ("\\n\\s*\\n+", G_REGEX_DEFAULT,
|
|
||||||
+ G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
|
|
||||||
g_once_init_leave (&splitter, s);
|
|
||||||
}
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index 2fa0698911..5254d8d282 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -1653,7 +1653,7 @@ g_regex_match_simple (const gchar *pattern,
|
|
||||||
GRegex *regex;
|
|
||||||
gboolean result;
|
|
||||||
|
|
||||||
- regex = g_regex_new (pattern, compile_options, 0, NULL);
|
|
||||||
+ regex = g_regex_new (pattern, compile_options, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
if (!regex)
|
|
||||||
return FALSE;
|
|
||||||
result = g_regex_match_full (regex, string, -1, 0, match_options, NULL, NULL);
|
|
||||||
@@ -1692,7 +1692,7 @@ g_regex_match_simple (const gchar *pattern,
|
|
||||||
* GRegex *regex;
|
|
||||||
* GMatchInfo *match_info;
|
|
||||||
*
|
|
||||||
- * regex = g_regex_new ("[A-Z]+", 0, 0, NULL);
|
|
||||||
+ * regex = g_regex_new ("[A-Z]+", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
* g_regex_match (regex, string, 0, &match_info);
|
|
||||||
* while (g_match_info_matches (match_info))
|
|
||||||
* {
|
|
||||||
@@ -1768,7 +1768,7 @@ g_regex_match (const GRegex *regex,
|
|
||||||
* GMatchInfo *match_info;
|
|
||||||
* GError *error = NULL;
|
|
||||||
*
|
|
||||||
- * regex = g_regex_new ("[A-Z]+", 0, 0, NULL);
|
|
||||||
+ * regex = g_regex_new ("[A-Z]+", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
* g_regex_match_full (regex, string, -1, 0, 0, &match_info, &error);
|
|
||||||
* while (g_match_info_matches (match_info))
|
|
||||||
* {
|
|
||||||
@@ -2949,7 +2949,7 @@ g_regex_replace_literal (const GRegex *regex,
|
|
||||||
* g_hash_table_insert (h, "3", "THREE");
|
|
||||||
* g_hash_table_insert (h, "4", "FOUR");
|
|
||||||
*
|
|
||||||
- * reg = g_regex_new ("1|2|3|4", 0, 0, NULL);
|
|
||||||
+ * reg = g_regex_new ("1|2|3|4", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
* res = g_regex_replace_eval (reg, text, -1, 0, 0, eval_cb, h, NULL);
|
|
||||||
* g_hash_table_destroy (h);
|
|
||||||
*
|
|
||||||
diff --git a/glib/gregex.h b/glib/gregex.h
|
|
||||||
index 89c8485471..3fd61806f7 100644
|
|
||||||
--- a/glib/gregex.h
|
|
||||||
+++ b/glib/gregex.h
|
|
||||||
@@ -218,6 +218,7 @@ GQuark g_regex_error_quark (void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GRegexCompileFlags:
|
|
||||||
+ * @G_REGEX_DEFAULT: No special options set. Since: 2.74
|
|
||||||
* @G_REGEX_CASELESS: Letters in the pattern match both upper- and
|
|
||||||
* lowercase letters. This option can be changed within a pattern
|
|
||||||
* by a "(?i)" option setting.
|
|
||||||
@@ -297,6 +298,7 @@ GQuark g_regex_error_quark (void);
|
|
||||||
*/
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
+ G_REGEX_DEFAULT GLIB_AVAILABLE_ENUMERATOR_IN_2_74 = 0,
|
|
||||||
G_REGEX_CASELESS = 1 << 0,
|
|
||||||
G_REGEX_MULTILINE = 1 << 1,
|
|
||||||
G_REGEX_DOTALL = 1 << 2,
|
|
||||||
@@ -319,6 +321,7 @@ typedef enum
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GRegexMatchFlags:
|
|
||||||
+ * @G_REGEX_MATCH_DEFAULT: No special options set. Since: 2.74
|
|
||||||
* @G_REGEX_MATCH_ANCHORED: The pattern is forced to be "anchored", that is,
|
|
||||||
* it is constrained to match only at the first matching point in the
|
|
||||||
* string that is being searched. This effect can also be achieved by
|
|
||||||
@@ -387,6 +390,7 @@ typedef enum
|
|
||||||
* adding a new flag. */
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
+ G_REGEX_MATCH_DEFAULT GLIB_AVAILABLE_ENUMERATOR_IN_2_74 = 0,
|
|
||||||
G_REGEX_MATCH_ANCHORED = 1 << 4,
|
|
||||||
G_REGEX_MATCH_NOTBOL = 1 << 7,
|
|
||||||
G_REGEX_MATCH_NOTEOL = 1 << 8,
|
|
||||||
diff --git a/glib/tests/autoptr.c b/glib/tests/autoptr.c
|
|
||||||
index 035d3f6133..c5d9877bbe 100644
|
|
||||||
--- a/glib/tests/autoptr.c
|
|
||||||
+++ b/glib/tests/autoptr.c
|
|
||||||
@@ -296,14 +296,16 @@ test_g_rand (void)
|
|
||||||
static void
|
|
||||||
test_g_regex (void)
|
|
||||||
{
|
|
||||||
- g_autoptr(GRegex) val = g_regex_new (".*", 0, 0, NULL);
|
|
||||||
+ g_autoptr(GRegex) val = g_regex_new (".*", G_REGEX_DEFAULT,
|
|
||||||
+ G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
g_assert_nonnull (val);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
test_g_match_info (void)
|
|
||||||
{
|
|
||||||
- g_autoptr(GRegex) regex = g_regex_new (".*", 0, 0, NULL);
|
|
||||||
+ g_autoptr(GRegex) regex = g_regex_new (".*", G_REGEX_DEFAULT,
|
|
||||||
+ G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
g_autoptr(GMatchInfo) match = NULL;
|
|
||||||
|
|
||||||
if (!g_regex_match (regex, "hello", 0, &match))
|
|
||||||
diff --git a/glib/tests/regex.c b/glib/tests/regex.c
|
|
||||||
index e19f975875..c39d640fa2 100644
|
|
||||||
--- a/glib/tests/regex.c
|
|
||||||
+++ b/glib/tests/regex.c
|
|
||||||
@@ -286,7 +286,7 @@ test_match_next (gconstpointer d)
|
|
||||||
GSList *matches;
|
|
||||||
GSList *l_exp, *l_match;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, 0, 0, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
|
|
||||||
g_assert (regex != NULL);
|
|
||||||
|
|
||||||
@@ -478,7 +478,7 @@ test_match_count (gconstpointer d)
|
|
||||||
GMatchInfo *match_info;
|
|
||||||
gint count;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, 0, 0, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
|
|
||||||
g_assert (regex != NULL);
|
|
||||||
|
|
||||||
@@ -515,7 +515,7 @@ test_partial (gconstpointer d)
|
|
||||||
GRegex *regex;
|
|
||||||
GMatchInfo *match_info;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, 0, 0, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
|
|
||||||
g_assert (regex != NULL);
|
|
||||||
|
|
||||||
@@ -567,7 +567,7 @@ test_sub_pattern (gconstpointer d)
|
|
||||||
gchar *sub_expr;
|
|
||||||
gint start = UNTOUCHED, end = UNTOUCHED;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, 0, 0, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
|
|
||||||
g_assert (regex != NULL);
|
|
||||||
|
|
||||||
@@ -622,7 +622,7 @@ test_named_sub_pattern (gconstpointer d)
|
|
||||||
gint start = UNTOUCHED, end = UNTOUCHED;
|
|
||||||
gchar *sub_expr;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, data->flags, 0, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, data->flags, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
|
|
||||||
g_assert (regex != NULL);
|
|
||||||
|
|
||||||
@@ -694,7 +694,7 @@ test_fetch_all (gconstpointer d)
|
|
||||||
gint match_count;
|
|
||||||
gint i;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, 0, 0, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
|
|
||||||
g_assert (regex != NULL);
|
|
||||||
|
|
||||||
@@ -788,7 +788,8 @@ test_split_simple (gconstpointer d)
|
|
||||||
gint token_count;
|
|
||||||
gint i;
|
|
||||||
|
|
||||||
- tokens = g_regex_split_simple (data->pattern, data->string, 0, 0);
|
|
||||||
+ tokens = g_regex_split_simple (data->pattern, data->string,
|
|
||||||
+ G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
if (tokens)
|
|
||||||
token_count = g_strv_length (tokens);
|
|
||||||
else
|
|
||||||
@@ -867,7 +868,7 @@ test_split_full (gconstpointer d)
|
|
||||||
gint token_count;
|
|
||||||
gint i;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, 0, 0, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
|
|
||||||
g_assert (regex != NULL);
|
|
||||||
|
|
||||||
@@ -901,7 +902,7 @@ test_split (gconstpointer d)
|
|
||||||
gint token_count;
|
|
||||||
gint i;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, 0, 0, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
|
|
||||||
g_assert (regex != NULL);
|
|
||||||
|
|
||||||
@@ -1057,8 +1058,8 @@ test_expand (gconstpointer d)
|
|
||||||
|
|
||||||
if (data->pattern)
|
|
||||||
{
|
|
||||||
- regex = g_regex_new (data->pattern, data->raw ? G_REGEX_RAW : 0, 0,
|
|
||||||
- &error);
|
|
||||||
+ regex = g_regex_new (data->pattern, data->raw ? G_REGEX_RAW : 0,
|
|
||||||
+ G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
g_regex_match (regex, data->string, 0, &match_info);
|
|
||||||
}
|
|
||||||
@@ -1100,7 +1101,7 @@ test_replace (gconstpointer d)
|
|
||||||
GRegex *regex;
|
|
||||||
gchar *res;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, 0, 0, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
res = g_regex_replace (regex, data->string, -1, data->start_position, data->replacement, 0, NULL);
|
|
||||||
|
|
||||||
g_assert_cmpstr (res, ==, data->expected);
|
|
||||||
@@ -1130,7 +1131,7 @@ test_replace_lit (gconstpointer d)
|
|
||||||
GRegex *regex;
|
|
||||||
gchar *res;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, 0, 0, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
res = g_regex_replace_literal (regex, data->string, -1, data->start_position,
|
|
||||||
data->replacement, 0, NULL);
|
|
||||||
g_assert_cmpstr (res, ==, data->expected);
|
|
||||||
@@ -1166,7 +1167,7 @@ test_get_string_number (gconstpointer d)
|
|
||||||
GRegex *regex;
|
|
||||||
gint num;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, 0, 0, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
num = g_regex_get_string_number (regex, data->name);
|
|
||||||
|
|
||||||
g_assert_cmpint (num, ==, data->expected_num);
|
|
||||||
@@ -1260,7 +1261,7 @@ test_match_all_full (gconstpointer d)
|
|
||||||
gint match_count;
|
|
||||||
gint i;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, 0, 0, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
match_ok = g_regex_match_all_full (regex, data->string, data->string_len, data->start_position,
|
|
||||||
0, &match_info, NULL);
|
|
||||||
|
|
||||||
@@ -1305,7 +1306,7 @@ test_match_all (gconstpointer d)
|
|
||||||
gboolean match_ok;
|
|
||||||
guint i, match_count;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, 0, 0, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
match_ok = g_regex_match_all (regex, data->string, 0, &match_info);
|
|
||||||
|
|
||||||
if (g_slist_length (data->expected) == 0)
|
|
||||||
@@ -1502,7 +1503,7 @@ test_properties (void)
|
|
||||||
gchar *str;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("\\p{L}\\p{Ll}\\p{Lu}\\p{L&}\\p{N}\\p{Nd}", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("\\p{L}\\p{Ll}\\p{Lu}\\p{L&}\\p{N}\\p{Nd}", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
res = g_regex_match (regex, "ppPP01", 0, &match);
|
|
||||||
g_assert (res);
|
|
||||||
str = g_match_info_fetch (match, 0);
|
|
||||||
@@ -1523,7 +1524,7 @@ test_class (void)
|
|
||||||
gchar *str;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("[abc\\x{0B1E}\\p{Mn}\\x{0391}-\\x{03A9}]", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("[abc\\x{0B1E}\\p{Mn}\\x{0391}-\\x{03A9}]", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
res = g_regex_match (regex, "a:b:\340\254\236:\333\253:\316\240", 0, &match);
|
|
||||||
g_assert (res);
|
|
||||||
str = g_match_info_fetch (match, 0);
|
|
||||||
@@ -1569,7 +1570,7 @@ test_lookahead (void)
|
|
||||||
gint start, end;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("\\w+(?=;)", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("\\w+(?=;)", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "word1 word2: word3;", 0, &match);
|
|
||||||
@@ -1583,7 +1584,7 @@ test_lookahead (void)
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("foo(?!bar)", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("foo(?!bar)", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "foobar foobaz", 0, &match);
|
|
||||||
@@ -1598,7 +1599,7 @@ test_lookahead (void)
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("(?!bar)foo", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("(?!bar)foo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "foobar foobaz", 0, &match);
|
|
||||||
@@ -1631,7 +1632,7 @@ test_lookbehind (void)
|
|
||||||
gint start, end;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("(?<!foo)bar", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("(?<!foo)bar", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "foobar boobar", 0, &match);
|
|
||||||
@@ -1646,7 +1647,7 @@ test_lookbehind (void)
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("(?<=bullock|donkey) poo", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("(?<=bullock|donkey) poo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "don poo, and bullock poo", 0, &match);
|
|
||||||
@@ -1659,17 +1660,17 @@ test_lookbehind (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<!dogs?|cats?) x", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("(?<!dogs?|cats?) x", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex == NULL);
|
|
||||||
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND);
|
|
||||||
g_clear_error (&error);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<=ab(c|de)) foo", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("(?<=ab(c|de)) foo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex == NULL);
|
|
||||||
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND);
|
|
||||||
g_clear_error (&error);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<=abc|abde)foo", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("(?<=abc|abde)foo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "abfoo, abdfoo, abcfoo", 0, &match);
|
|
||||||
@@ -1681,7 +1682,7 @@ test_lookbehind (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^.*+(?<=abcd)", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("^.*+(?<=abcd)", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "abcabcabcabcabcabcabcabcabcd", 0, &match);
|
|
||||||
@@ -1690,7 +1691,7 @@ test_lookbehind (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<=\\d{3})(?<!999)foo", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("(?<=\\d{3})(?<!999)foo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "999foo 123abcfoo 123foo", 0, &match);
|
|
||||||
@@ -1702,7 +1703,7 @@ test_lookbehind (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<=\\d{3}...)(?<!999)foo", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("(?<=\\d{3}...)(?<!999)foo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "999foo 123abcfoo 123foo", 0, &match);
|
|
||||||
@@ -1714,7 +1715,7 @@ test_lookbehind (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<=\\d{3}(?!999)...)foo", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("(?<=\\d{3}(?!999)...)foo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "999foo 123abcfoo 123foo", 0, &match);
|
|
||||||
@@ -1726,7 +1727,7 @@ test_lookbehind (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<=(?<!foo)bar)baz", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("(?<=(?<!foo)bar)baz", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "foobarbaz barfoobaz barbarbaz", 0, &match);
|
|
||||||
@@ -1751,7 +1752,7 @@ test_subpattern (void)
|
|
||||||
gint start;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("cat(aract|erpillar|)", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("cat(aract|erpillar|)", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
g_assert_cmpint (g_regex_get_capture_count (regex), ==, 1);
|
|
||||||
@@ -1769,7 +1770,7 @@ test_subpattern (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("the ((red|white) (king|queen))", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("the ((red|white) (king|queen))", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
g_assert_cmpint (g_regex_get_capture_count (regex), ==, 3);
|
|
||||||
@@ -1793,7 +1794,7 @@ test_subpattern (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("the ((?:red|white) (king|queen))", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("the ((?:red|white) (king|queen))", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "the white queen", 0, &match);
|
|
||||||
@@ -1813,7 +1814,7 @@ test_subpattern (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?|(Sat)(ur)|(Sun))day (morning|afternoon)", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("(?|(Sat)(ur)|(Sun))day (morning|afternoon)", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
g_assert_cmpint (g_regex_get_capture_count (regex), ==, 3);
|
|
||||||
@@ -1833,7 +1834,7 @@ test_subpattern (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?|(abc)|(def))\\1", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("(?|(abc)|(def))\\1", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
g_assert_cmpint (g_regex_get_max_backref (regex), ==, 1);
|
|
||||||
@@ -1851,7 +1852,7 @@ test_subpattern (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?|(abc)|(def))(?1)", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("(?|(abc)|(def))(?1)", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "abcabc abcdef defabc defdef", 0, &match);
|
|
||||||
@@ -1868,7 +1869,7 @@ test_subpattern (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<DN>Mon|Fri|Sun)(?:day)?|(?<DN>Tue)(?:sday)?|(?<DN>Wed)(?:nesday)?|(?<DN>Thu)(?:rsday)?|(?<DN>Sat)(?:urday)?", G_REGEX_OPTIMIZE|G_REGEX_DUPNAMES, 0, &error);
|
|
||||||
+ regex = g_regex_new ("(?<DN>Mon|Fri|Sun)(?:day)?|(?<DN>Tue)(?:sday)?|(?<DN>Wed)(?:nesday)?|(?<DN>Thu)(?:rsday)?|(?<DN>Sat)(?:urday)?", G_REGEX_OPTIMIZE|G_REGEX_DUPNAMES, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "Mon Tuesday Wed Saturday", 0, &match);
|
|
||||||
@@ -1895,7 +1896,7 @@ test_subpattern (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^(a|b\\1)+$", G_REGEX_OPTIMIZE|G_REGEX_DUPNAMES, 0, &error);
|
|
||||||
+ regex = g_regex_new ("^(a|b\\1)+$", G_REGEX_OPTIMIZE|G_REGEX_DUPNAMES, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "aaaaaaaaaaaaaaaa", 0, &match);
|
|
||||||
@@ -1919,7 +1920,7 @@ test_condition (void)
|
|
||||||
gboolean res;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("^(a+)(\\()?[^()]+(?(-1)\\))(b+)$", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("^(a+)(\\()?[^()]+(?(-1)\\))(b+)$", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "a(zzzzzz)b", 0, &match);
|
|
||||||
@@ -1933,7 +1934,7 @@ test_condition (void)
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("^(a+)(?<OPEN>\\()?[^()]+(?(<OPEN>)\\))(b+)$", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("^(a+)(?<OPEN>\\()?[^()]+(?(<OPEN>)\\))(b+)$", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "a(zzzzzz)b", 0, &match);
|
|
||||||
@@ -1946,7 +1947,7 @@ test_condition (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^(a+)(?(+1)\\[|\\<)?[^()]+(\\])?(b+)$", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("^(a+)(?(+1)\\[|\\<)?[^()]+(\\])?(b+)$", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "a[zzzzzz]b", 0, &match);
|
|
||||||
@@ -2013,7 +2014,7 @@ test_recursion (void)
|
|
||||||
gint start;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("\\( ( [^()]++ | (?R) )* \\)", G_REGEX_OPTIMIZE|G_REGEX_EXTENDED, 0, &error);
|
|
||||||
+ regex = g_regex_new ("\\( ( [^()]++ | (?R) )* \\)", G_REGEX_OPTIMIZE|G_REGEX_EXTENDED, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "(middle)", 0, &match);
|
|
||||||
@@ -2030,7 +2031,7 @@ test_recursion (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^( \\( ( [^()]++ | (?1) )* \\) )$", G_REGEX_OPTIMIZE|G_REGEX_EXTENDED, 0, &error);
|
|
||||||
+ regex = g_regex_new ("^( \\( ( [^()]++ | (?1) )* \\) )$", G_REGEX_OPTIMIZE|G_REGEX_EXTENDED, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "((((((((((((((((middle))))))))))))))))", 0, &match);
|
|
||||||
@@ -2043,7 +2044,7 @@ test_recursion (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^(?<pn> \\( ( [^()]++ | (?&pn) )* \\) )$", G_REGEX_OPTIMIZE|G_REGEX_EXTENDED, 0, &error);
|
|
||||||
+ regex = g_regex_new ("^(?<pn> \\( ( [^()]++ | (?&pn) )* \\) )$", G_REGEX_OPTIMIZE|G_REGEX_EXTENDED, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
g_regex_match (regex, "(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()", 0, &match);
|
|
||||||
@@ -2052,7 +2053,7 @@ test_recursion (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", G_REGEX_OPTIMIZE|G_REGEX_EXTENDED, 0, &error);
|
|
||||||
+ regex = g_regex_new ("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", G_REGEX_OPTIMIZE|G_REGEX_EXTENDED, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "<ab<01<23<4>>>>", 0, &match);
|
|
||||||
@@ -2071,7 +2072,7 @@ test_recursion (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^((.)(?1)\\2|.)$", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("^((.)(?1)\\2|.)$", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "abcdcba", 0, &match);
|
|
||||||
@@ -2084,7 +2085,7 @@ test_recursion (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$", G_REGEX_OPTIMIZE, 0, &error);
|
|
||||||
+ regex = g_regex_new ("^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "abcdcba", 0, &match);
|
|
||||||
@@ -2097,7 +2098,7 @@ test_recursion (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$", G_REGEX_OPTIMIZE|G_REGEX_CASELESS, 0, &error);
|
|
||||||
+ regex = g_regex_new ("^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$", G_REGEX_OPTIMIZE|G_REGEX_CASELESS, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "abcdcba", 0, &match);
|
|
||||||
@@ -2124,7 +2125,7 @@ test_multiline (void)
|
|
||||||
|
|
||||||
g_test_bug ("https://bugzilla.gnome.org/show_bug.cgi?id=640489");
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^a$", G_REGEX_MULTILINE|G_REGEX_DOTALL, 0, NULL);
|
|
||||||
+ regex = g_regex_new ("^a$", G_REGEX_MULTILINE|G_REGEX_DOTALL, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
|
|
||||||
count = 0;
|
|
||||||
g_regex_match (regex, "a\nb\na", 0, &info);
|
|
||||||
@@ -2144,7 +2145,7 @@ test_explicit_crlf (void)
|
|
||||||
{
|
|
||||||
GRegex *regex;
|
|
||||||
|
|
||||||
- regex = g_regex_new ("[\r\n]a", 0, 0, NULL);
|
|
||||||
+ regex = g_regex_new ("[\r\n]a", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
g_assert_cmpint (g_regex_get_has_cr_or_lf (regex), ==, TRUE);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
}
|
|
||||||
@@ -2154,15 +2155,15 @@ test_max_lookbehind (void)
|
|
||||||
{
|
|
||||||
GRegex *regex;
|
|
||||||
|
|
||||||
- regex = g_regex_new ("abc", 0, 0, NULL);
|
|
||||||
+ regex = g_regex_new ("abc", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
g_assert_cmpint (g_regex_get_max_lookbehind (regex), ==, 0);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("\\babc", 0, 0, NULL);
|
|
||||||
+ regex = g_regex_new ("\\babc", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
g_assert_cmpint (g_regex_get_max_lookbehind (regex), ==, 1);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<=123)abc", 0, 0, NULL);
|
|
||||||
+ regex = g_regex_new ("(?<=123)abc", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
g_assert_cmpint (g_regex_get_max_lookbehind (regex), ==, 3);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
}
|
|
||||||
@@ -2205,25 +2206,25 @@ main (int argc, char *argv[])
|
|
||||||
|
|
||||||
/* TEST_NEW(pattern, compile_opts, match_opts) */
|
|
||||||
TEST_NEW("[A-Z]+", G_REGEX_CASELESS | G_REGEX_EXTENDED | G_REGEX_OPTIMIZE, G_REGEX_MATCH_NOTBOL | G_REGEX_MATCH_PARTIAL);
|
|
||||||
- TEST_NEW("", 0, 0);
|
|
||||||
- TEST_NEW(".*", 0, 0);
|
|
||||||
- TEST_NEW(".*", G_REGEX_OPTIMIZE, 0);
|
|
||||||
- TEST_NEW(".*", G_REGEX_MULTILINE, 0);
|
|
||||||
- TEST_NEW(".*", G_REGEX_DOTALL, 0);
|
|
||||||
+ TEST_NEW("", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
+ TEST_NEW(".*", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
+ TEST_NEW(".*", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT);
|
|
||||||
+ TEST_NEW(".*", G_REGEX_MULTILINE, G_REGEX_MATCH_DEFAULT);
|
|
||||||
+ TEST_NEW(".*", G_REGEX_DOTALL, G_REGEX_MATCH_DEFAULT);
|
|
||||||
TEST_NEW(".*", G_REGEX_DOTALL, G_REGEX_MATCH_NOTBOL);
|
|
||||||
- TEST_NEW("(123\\d*)[a-zA-Z]+(?P<hello>.*)", 0, 0);
|
|
||||||
- TEST_NEW("(123\\d*)[a-zA-Z]+(?P<hello>.*)", G_REGEX_CASELESS, 0);
|
|
||||||
- TEST_NEW("(123\\d*)[a-zA-Z]+(?P<hello>.*)", G_REGEX_CASELESS | G_REGEX_OPTIMIZE, 0);
|
|
||||||
- TEST_NEW("(?P<A>x)|(?P<A>y)", G_REGEX_DUPNAMES, 0);
|
|
||||||
- TEST_NEW("(?P<A>x)|(?P<A>y)", G_REGEX_DUPNAMES | G_REGEX_OPTIMIZE, 0);
|
|
||||||
+ TEST_NEW("(123\\d*)[a-zA-Z]+(?P<hello>.*)", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
+ TEST_NEW("(123\\d*)[a-zA-Z]+(?P<hello>.*)", G_REGEX_CASELESS, G_REGEX_MATCH_DEFAULT);
|
|
||||||
+ TEST_NEW("(123\\d*)[a-zA-Z]+(?P<hello>.*)", G_REGEX_CASELESS | G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT);
|
|
||||||
+ TEST_NEW("(?P<A>x)|(?P<A>y)", G_REGEX_DUPNAMES, G_REGEX_MATCH_DEFAULT);
|
|
||||||
+ TEST_NEW("(?P<A>x)|(?P<A>y)", G_REGEX_DUPNAMES | G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT);
|
|
||||||
/* This gives "internal error: code overflow" with pcre 6.0 */
|
|
||||||
- TEST_NEW("(?i)(?-i)", 0, 0);
|
|
||||||
- TEST_NEW ("(?i)a", 0, 0);
|
|
||||||
- TEST_NEW ("(?m)a", 0, 0);
|
|
||||||
- TEST_NEW ("(?s)a", 0, 0);
|
|
||||||
- TEST_NEW ("(?x)a", 0, 0);
|
|
||||||
- TEST_NEW ("(?J)a", 0, 0);
|
|
||||||
- TEST_NEW ("(?U)[a-z]+", 0, 0);
|
|
||||||
+ TEST_NEW("(?i)(?-i)", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
+ TEST_NEW ("(?i)a", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
+ TEST_NEW ("(?m)a", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
+ TEST_NEW ("(?s)a", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
+ TEST_NEW ("(?x)a", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
+ TEST_NEW ("(?J)a", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
+ TEST_NEW ("(?U)[a-z]+", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
|
|
||||||
/* TEST_NEW_CHECK_FLAGS(pattern, compile_opts, match_ops, real_compile_opts, real_match_opts) */
|
|
||||||
TEST_NEW_CHECK_FLAGS ("a", G_REGEX_OPTIMIZE, 0, G_REGEX_OPTIMIZE, 0);
|
|
||||||
diff --git a/gobject/tests/boxed.c b/gobject/tests/boxed.c
|
|
||||||
index c2d091c54a..dd45a80a34 100644
|
|
||||||
--- a/gobject/tests/boxed.c
|
|
||||||
+++ b/gobject/tests/boxed.c
|
|
||||||
@@ -281,7 +281,7 @@ test_boxed_regex (void)
|
|
||||||
g_value_init (&value, G_TYPE_REGEX);
|
|
||||||
g_assert (G_VALUE_HOLDS_BOXED (&value));
|
|
||||||
|
|
||||||
- v = g_regex_new ("a+b+", 0, 0, NULL);
|
|
||||||
+ v = g_regex_new ("a+b+", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
g_value_take_boxed (&value, v);
|
|
||||||
|
|
||||||
v2 = g_value_get_boxed (&value);
|
|
||||||
@@ -305,7 +305,7 @@ test_boxed_matchinfo (void)
|
|
||||||
g_value_init (&value, G_TYPE_MATCH_INFO);
|
|
||||||
g_assert (G_VALUE_HOLDS_BOXED (&value));
|
|
||||||
|
|
||||||
- r = g_regex_new ("ab", 0, 0, NULL);
|
|
||||||
+ r = g_regex_new ("ab", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
ret = g_regex_match (r, "blabla abab bla", 0, &info);
|
|
||||||
g_assert (ret);
|
|
||||||
g_value_take_boxed (&value, info);
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,57 +0,0 @@
|
|||||||
From a164b49532957359c781ab56c3e1690f65f40788 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Guido=20G=C3=BCnther?= <agx@sigxcpu.org>
|
|
||||||
Date: Fri, 23 Sep 2022 14:48:07 +0200
|
|
||||||
Subject: [PATCH] gregex: Allow G_REGEX_JAVASCRIPT_COMPAT in compile mask for
|
|
||||||
g_regex_new
|
|
||||||
|
|
||||||
The flag is still ignored but this way we properly deprecate
|
|
||||||
at compile time without raising an unexpected criticals at runtime:
|
|
||||||
|
|
||||||
g_regex_new: assertion '(compile_options & ~G_REGEX_COMPILE_MASK) == 0' failed
|
|
||||||
|
|
||||||
and then failing to create the regex completely.
|
|
||||||
|
|
||||||
Fixes 8d5a44dc8 ("replace pcre1 with pcre2")
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/a164b49532957359c781ab56c3e1690f65f40788
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/gregex.c | 5 ++++-
|
|
||||||
glib/tests/regex.c | 4 ++++
|
|
||||||
2 files changed, 8 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index 220a1a11ac..6b22f1f151 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -1684,7 +1684,10 @@ g_regex_new (const gchar *pattern,
|
|
||||||
|
|
||||||
g_return_val_if_fail (pattern != NULL, NULL);
|
|
||||||
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
|
|
||||||
- g_return_val_if_fail ((compile_options & ~G_REGEX_COMPILE_MASK) == 0, NULL);
|
|
||||||
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
||||||
+ g_return_val_if_fail ((compile_options & ~(G_REGEX_COMPILE_MASK |
|
|
||||||
+ G_REGEX_JAVASCRIPT_COMPAT)) == 0, NULL);
|
|
||||||
+G_GNUC_END_IGNORE_DEPRECATIONS
|
|
||||||
g_return_val_if_fail ((match_options & ~G_REGEX_MATCH_MASK) == 0, NULL);
|
|
||||||
|
|
||||||
if (g_once_init_enter (&initialised))
|
|
||||||
diff --git a/glib/tests/regex.c b/glib/tests/regex.c
|
|
||||||
index 9803d49659..f2e1a04ada 100644
|
|
||||||
--- a/glib/tests/regex.c
|
|
||||||
+++ b/glib/tests/regex.c
|
|
||||||
@@ -2542,6 +2542,10 @@ main (int argc, char *argv[])
|
|
||||||
TEST_NEW_CHECK_FLAGS ("(*BSR_ANYCRLF)a", 0, 0, G_REGEX_BSR_ANYCRLF, 0);
|
|
||||||
TEST_NEW_CHECK_FLAGS ("(*BSR_UNICODE)a", 0, 0, 0 /* this is the default in GRegex */, 0);
|
|
||||||
TEST_NEW_CHECK_FLAGS ("(*NO_START_OPT)a", 0, 0, 0 /* not exposed in GRegex */, 0);
|
|
||||||
+ /* Make sure we ignore deprecated G_REGEX_JAVASCRIPT_COMPAT */
|
|
||||||
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
||||||
+ TEST_NEW_CHECK_FLAGS ("a", G_REGEX_JAVASCRIPT_COMPAT, 0, 0, 0);
|
|
||||||
+G_GNUC_END_IGNORE_DEPRECATIONS
|
|
||||||
|
|
||||||
/* TEST_NEW_FAIL(pattern, compile_opts, expected_error) */
|
|
||||||
TEST_NEW_FAIL("(", 0, G_REGEX_ERROR_UNMATCHED_PARENTHESIS);
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,47 +0,0 @@
|
|||||||
From aee84cb45caf42e336dee5183d561b89eb44f8f3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Tue, 6 Sep 2022 18:56:39 +0200
|
|
||||||
Subject: [PATCH] gregex: Avoid re-allocating if we have no size change
|
|
||||||
|
|
||||||
This is handled by the syscall underneath, but we can just avoid a call
|
|
||||||
cheaply.
|
|
||||||
---
|
|
||||||
glib/gregex.c | 13 ++++++++++---
|
|
||||||
1 file changed, 10 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index 84c4245753..cf86f0fe0d 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -832,6 +832,7 @@ recalc_match_offsets (GMatchInfo *match_info,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
PCRE2_SIZE *ovector;
|
|
||||||
+ uint32_t pre_n_offset;
|
|
||||||
uint32_t i;
|
|
||||||
|
|
||||||
if (pcre2_get_ovector_count (match_info->match_data) > G_MAXUINT32 / 2)
|
|
||||||
@@ -842,11 +843,17 @@ recalc_match_offsets (GMatchInfo *match_info,
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ pre_n_offset = match_info->n_offsets;
|
|
||||||
match_info->n_offsets = pcre2_get_ovector_count (match_info->match_data) * 2;
|
|
||||||
ovector = pcre2_get_ovector_pointer (match_info->match_data);
|
|
||||||
- match_info->offsets = g_realloc_n (match_info->offsets,
|
|
||||||
- match_info->n_offsets,
|
|
||||||
- sizeof (gint));
|
|
||||||
+
|
|
||||||
+ if (match_info->n_offsets != pre_n_offset)
|
|
||||||
+ {
|
|
||||||
+ match_info->offsets = g_realloc_n (match_info->offsets,
|
|
||||||
+ match_info->n_offsets,
|
|
||||||
+ sizeof (gint));
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
for (i = 0; i < match_info->n_offsets; i++)
|
|
||||||
{
|
|
||||||
match_info->offsets[i] = (int) ovector[i];
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,56 +0,0 @@
|
|||||||
From 1f88976610d5bcc15ad58c9345848d736d64fd55 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Tue, 6 Sep 2022 17:16:07 +0200
|
|
||||||
Subject: [PATCH] gregex: Do not try access the undefined match offsets if we
|
|
||||||
have no match
|
|
||||||
|
|
||||||
In case we're getting NO-MATCH "errors", we were still recomputing the
|
|
||||||
match offsets and taking decisions based on that, that might lead to
|
|
||||||
undefined behavior.
|
|
||||||
|
|
||||||
Avoid this by just returning early a FALSE result (but with no error) in
|
|
||||||
case there's no result to proceed on.
|
|
||||||
|
|
||||||
Fixes: #2741
|
|
||||||
---
|
|
||||||
glib/gregex.c | 6 ++++++
|
|
||||||
glib/tests/regex.c | 6 ++++++
|
|
||||||
2 files changed, 12 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index 219d9cee34..f2a5b5fd1c 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -1073,6 +1073,12 @@ g_match_info_next (GMatchInfo *match_info,
|
|
||||||
match_info->regex->pattern, match_error (match_info->matches));
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
+ else if (match_info->matches == PCRE2_ERROR_NOMATCH)
|
|
||||||
+ {
|
|
||||||
+ /* We're done with this match info */
|
|
||||||
+ match_info->pos = -1;
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
else
|
|
||||||
if (!recalc_match_offsets (match_info, error))
|
|
||||||
return FALSE;
|
|
||||||
diff --git a/glib/tests/regex.c b/glib/tests/regex.c
|
|
||||||
index 10daa7814a..291c21b4c7 100644
|
|
||||||
--- a/glib/tests/regex.c
|
|
||||||
+++ b/glib/tests/regex.c
|
|
||||||
@@ -1669,6 +1669,12 @@ test_class (void)
|
|
||||||
res = g_match_info_next (match, NULL);
|
|
||||||
g_assert (!res);
|
|
||||||
|
|
||||||
+ /* Accessing match again should not crash */
|
|
||||||
+ g_test_expect_message ("GLib", G_LOG_LEVEL_CRITICAL,
|
|
||||||
+ "*match_info->pos >= 0*");
|
|
||||||
+ g_assert_false (g_match_info_next (match, NULL));
|
|
||||||
+ g_test_assert_expected_messages ();
|
|
||||||
+
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
}
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,40 +0,0 @@
|
|||||||
From 664ee9ca6afcc3e08c99f0918982e9d2e22f34a8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Guido=20G=C3=BCnther?= <agx@sigxcpu.org>
|
|
||||||
Date: Fri, 23 Sep 2022 15:27:49 +0200
|
|
||||||
Subject: [PATCH] gregex: Drop explanation G_REGEX_JAVASCRIPT_COMPAT
|
|
||||||
|
|
||||||
It's not supported as of glib 2.74
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/664ee9ca6afcc3e08c99f0918982e9d2e22f34a8
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/gregex.c | 12 ------------
|
|
||||||
1 file changed, 12 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index 6b22f1f151..50abeee89f 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -89,18 +89,6 @@
|
|
||||||
* unescaped "#" outside a character class is encountered. This indicates
|
|
||||||
* a comment that lasts until after the next newline.
|
|
||||||
*
|
|
||||||
- * When setting the %G_REGEX_JAVASCRIPT_COMPAT flag, pattern syntax and pattern
|
|
||||||
- * matching is changed to be compatible with the way that regular expressions
|
|
||||||
- * work in JavaScript. More precisely, a lonely ']' character in the pattern
|
|
||||||
- * is a syntax error; the '\x' escape only allows 0 to 2 hexadecimal digits, and
|
|
||||||
- * you must use the '\u' escape sequence with 4 hex digits to specify a unicode
|
|
||||||
- * codepoint instead of '\x' or 'x{....}'. If '\x' or '\u' are not followed by
|
|
||||||
- * the specified number of hex digits, they match 'x' and 'u' literally; also
|
|
||||||
- * '\U' always matches 'U' instead of being an error in the pattern. Finally,
|
|
||||||
- * pattern matching is modified so that back references to an unset subpattern
|
|
||||||
- * group produces a match with the empty string instead of an error. See
|
|
||||||
- * pcreapi(3) for more information.
|
|
||||||
- *
|
|
||||||
* Creating and manipulating the same #GRegex structure from different
|
|
||||||
* threads is not a problem as #GRegex does not modify its internal
|
|
||||||
* state between creation and destruction, on the other hand #GMatchInfo
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,50 +0,0 @@
|
|||||||
From 13ad4296ea8ba66f5620288b2fd06315852e73ae Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Tue, 6 Sep 2022 17:20:45 +0200
|
|
||||||
Subject: [PATCH] gregex: Fix a potential PCRE2 code leak on reallocation
|
|
||||||
failures
|
|
||||||
|
|
||||||
In case recalc_match_offsets() failed we were just returning, but in
|
|
||||||
such case, per the documentation we should still set the match_info (if
|
|
||||||
provided) and free the pcre2 code instance.
|
|
||||||
|
|
||||||
So let's just break the loop we're in it, as if we we've no matches set.
|
|
||||||
This also avoids re-allocating the offsets array and potentially
|
|
||||||
accessing to unset data.
|
|
||||||
---
|
|
||||||
glib/gregex.c | 12 +++++-------
|
|
||||||
1 file changed, 5 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index f2a5b5fd1c..6f3ee88122 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -2337,13 +2337,6 @@ g_regex_match_all_full (const GRegex *regex,
|
|
||||||
info->match_data,
|
|
||||||
info->match_context,
|
|
||||||
info->workspace, info->n_workspace);
|
|
||||||
-
|
|
||||||
- if (!recalc_match_offsets (info, error))
|
|
||||||
- {
|
|
||||||
- g_match_info_free (info);
|
|
||||||
- return FALSE;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
if (info->matches == PCRE2_ERROR_DFA_WSSIZE)
|
|
||||||
{
|
|
||||||
/* info->workspace is too small. */
|
|
||||||
@@ -2370,6 +2363,11 @@ g_regex_match_all_full (const GRegex *regex,
|
|
||||||
_("Error while matching regular expression %s: %s"),
|
|
||||||
regex->pattern, match_error (info->matches));
|
|
||||||
}
|
|
||||||
+ else if (info->matches > 0)
|
|
||||||
+ {
|
|
||||||
+ if (!recalc_match_offsets (info, error))
|
|
||||||
+ info->matches = PCRE2_ERROR_NOMATCH;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
pcre2_code_free (pcre_re);
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,36 +0,0 @@
|
|||||||
From 6c93ac876f71d7221a172e430ca450b6c0b8b699 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Marco Trevisan <mail@3v1n0.net>
|
|
||||||
Date: Wed, 20 Jul 2022 06:32:30 +0200
|
|
||||||
Subject: [PATCH] gregex: Free match info if offset matching recalc failed
|
|
||||||
|
|
||||||
It's not probably ever happening in practice, but coverity found it and
|
|
||||||
it's easy enough to fix it.
|
|
||||||
|
|
||||||
Coverity CID: #1490730
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/6c93ac876f71d7221a172e430ca450b6c0b8b699
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/gregex.c | 5 ++++-
|
|
||||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index 5fc7b16bc8..be03f0e094 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -2237,7 +2237,10 @@ g_regex_match_all_full (const GRegex *regex,
|
|
||||||
info->workspace, info->n_workspace);
|
|
||||||
|
|
||||||
if (!recalc_match_offsets (info, error))
|
|
||||||
- return FALSE;
|
|
||||||
+ {
|
|
||||||
+ g_match_info_free (info);
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (info->matches == PCRE2_ERROR_DFA_WSSIZE)
|
|
||||||
{
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,51 +0,0 @@
|
|||||||
From 11521972f4d345d9a3f68df719f5980085197e47 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Tue, 6 Sep 2022 18:26:12 +0200
|
|
||||||
Subject: [PATCH] gregex: Handle the case we need to re-allocate the match data
|
|
||||||
|
|
||||||
In case PCRE2 returns an empty match
|
|
||||||
|
|
||||||
This can be easily tested by initializing the initial match data to a
|
|
||||||
value that is less than the expected match values (e.g. by calling
|
|
||||||
pcre2_match_data_create (1, NULL)), but we can't do it in our tests
|
|
||||||
without bigger changes.
|
|
||||||
---
|
|
||||||
glib/gregex.c | 15 ++++++++++++++-
|
|
||||||
1 file changed, 14 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index b886b24e2a..84c4245753 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -1027,7 +1027,7 @@ g_match_info_next (GMatchInfo *match_info,
|
|
||||||
{
|
|
||||||
gint prev_match_start;
|
|
||||||
gint prev_match_end;
|
|
||||||
- gint opts;
|
|
||||||
+ uint32_t opts;
|
|
||||||
|
|
||||||
g_return_val_if_fail (match_info != NULL, FALSE);
|
|
||||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
|
||||||
@@ -1075,6 +1075,19 @@ g_match_info_next (GMatchInfo *match_info,
|
|
||||||
match_info->regex->pattern, match_error (match_info->matches));
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
+ else if (match_info->matches == 0)
|
|
||||||
+ {
|
|
||||||
+ /* info->offsets is too small. */
|
|
||||||
+ match_info->n_offsets *= 2;
|
|
||||||
+ match_info->offsets = g_realloc_n (match_info->offsets,
|
|
||||||
+ match_info->n_offsets,
|
|
||||||
+ sizeof (gint));
|
|
||||||
+
|
|
||||||
+ pcre2_match_data_free (match_info->match_data);
|
|
||||||
+ match_info->match_data = pcre2_match_data_create (match_info->n_offsets, NULL);
|
|
||||||
+
|
|
||||||
+ return g_match_info_next (match_info, error);
|
|
||||||
+ }
|
|
||||||
else if (match_info->matches == PCRE2_ERROR_NOMATCH)
|
|
||||||
{
|
|
||||||
/* We're done with this match info */
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,27 +0,0 @@
|
|||||||
From 1185a1304a88319b58359105f2c1038ae4d7edce Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Tue, 6 Sep 2022 16:46:13 +0200
|
|
||||||
Subject: [PATCH] gregex: Mark g_match_info_get_regex as transfer none
|
|
||||||
|
|
||||||
Since it had no explicit annotation, g-i was defaulting to transfer-full
|
|
||||||
while in this case the GRegex is owned by the GMatchInfo.
|
|
||||||
---
|
|
||||||
glib/gregex.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index 2eb9b858ea..219d9cee34 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -912,7 +912,7 @@ enable_jit_with_match_options (GRegex *regex,
|
|
||||||
* and must not be freed. Use g_regex_ref() if you need to keep it
|
|
||||||
* after you free @match_info object.
|
|
||||||
*
|
|
||||||
- * Returns: #GRegex object used in @match_info
|
|
||||||
+ * Returns: (transfer none): #GRegex object used in @match_info
|
|
||||||
*
|
|
||||||
* Since: 2.14
|
|
||||||
*/
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
From 4fca3bba8f38627ee13b99b0b5093b73a2052e77 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Philip Withnall <pwithnall@endlessos.org>
|
|
||||||
Date: Tue, 18 Oct 2022 15:05:30 +0100
|
|
||||||
Subject: [PATCH] gregex: Remove an unreachable return statement
|
|
||||||
|
|
||||||
Spotted by Coverity.
|
|
||||||
|
|
||||||
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
|
|
||||||
|
|
||||||
Coverity CID: #1497916
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/4fca3bba8f38627ee13b99b0b5093b73a2052e77
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/gregex.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index 41ad675a76..53eda2b19d 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -947,7 +947,7 @@ enable_jit_with_match_options (GRegex *regex,
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
- return regex->jit_status;
|
|
||||||
+ g_assert_not_reached ();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,187 +0,0 @@
|
|||||||
From 6caf952e48dbed40b5dcff01a94f57ba079b526c Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Tue, 20 Sep 2022 18:06:35 +0200
|
|
||||||
Subject: [PATCH] gregex: Use pcre2 error messages if we don't provide a
|
|
||||||
specific one
|
|
||||||
|
|
||||||
In case we got a compilation or match error we should try to provide
|
|
||||||
some useful error message, if possible, before returning a quite obscure
|
|
||||||
"internal error" or "unknown error" string.
|
|
||||||
|
|
||||||
So rely on PCRE2 strings even if they're not translated they can provide
|
|
||||||
better information than the ones we're currently giving.
|
|
||||||
|
|
||||||
Related to: https://gitlab.gnome.org/GNOME/glib/-/issues/2691
|
|
||||||
Related to: https://gitlab.gnome.org/GNOME/glib/-/issues/2760
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/6caf952e48dbed40b5dcff01a94f57ba079b526c
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/gregex.c | 64 ++++++++++++++++++++++++++++++++++++++++------
|
|
||||||
glib/tests/regex.c | 2 ++
|
|
||||||
2 files changed, 58 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index 220a1a11ac..fcc28d62f4 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -456,8 +456,25 @@ get_pcre2_bsr_match_options (GRegexMatchFlags match_flags)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static char *
|
|
||||||
+get_pcre2_error_string (int errcode)
|
|
||||||
+{
|
|
||||||
+ PCRE2_UCHAR8 error_msg[2048];
|
|
||||||
+ int err_length;
|
|
||||||
+
|
|
||||||
+ err_length = pcre2_get_error_message (errcode, error_msg,
|
|
||||||
+ G_N_ELEMENTS (error_msg));
|
|
||||||
+
|
|
||||||
+ if (err_length <= 0)
|
|
||||||
+ return NULL;
|
|
||||||
+
|
|
||||||
+ /* The array is always filled with a trailing zero */
|
|
||||||
+ g_assert ((size_t) err_length < G_N_ELEMENTS (error_msg));
|
|
||||||
+ return g_memdup2 (error_msg, err_length + 1);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static const gchar *
|
|
||||||
-match_error (gint errcode)
|
|
||||||
+translate_match_error (gint errcode)
|
|
||||||
{
|
|
||||||
switch (errcode)
|
|
||||||
{
|
|
||||||
@@ -511,7 +528,24 @@ match_error (gint errcode)
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
- return _("unknown error");
|
|
||||||
+ return NULL;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static char *
|
|
||||||
+get_match_error_message (int errcode)
|
|
||||||
+{
|
|
||||||
+ const char *msg = translate_match_error (errcode);
|
|
||||||
+ char *error_string;
|
|
||||||
+
|
|
||||||
+ if (msg)
|
|
||||||
+ return g_strdup (msg);
|
|
||||||
+
|
|
||||||
+ error_string = get_pcre2_error_string (errcode);
|
|
||||||
+
|
|
||||||
+ if (error_string)
|
|
||||||
+ return error_string;
|
|
||||||
+
|
|
||||||
+ return g_strdup (_("unknown error"));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -743,7 +777,6 @@ translate_compile_error (gint *errcode, const gchar **errmsg)
|
|
||||||
case PCRE2_ERROR_INTERNAL_BAD_CODE:
|
|
||||||
case PCRE2_ERROR_INTERNAL_BAD_CODE_IN_SKIP:
|
|
||||||
*errcode = G_REGEX_ERROR_INTERNAL;
|
|
||||||
- *errmsg = _("internal error");
|
|
||||||
break;
|
|
||||||
case PCRE2_ERROR_INVALID_SUBPATTERN_NAME:
|
|
||||||
case PCRE2_ERROR_CLASS_INVALID_RANGE:
|
|
||||||
@@ -772,12 +805,10 @@ translate_compile_error (gint *errcode, const gchar **errmsg)
|
|
||||||
case PCRE2_ERROR_BAD_LITERAL_OPTIONS:
|
|
||||||
default:
|
|
||||||
*errcode = G_REGEX_ERROR_COMPILE;
|
|
||||||
- *errmsg = _("internal error");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_assert (*errcode != -1);
|
|
||||||
- g_assert (*errmsg != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* GMatchInfo */
|
|
||||||
@@ -1096,9 +1127,12 @@ g_match_info_next (GMatchInfo *match_info,
|
|
||||||
|
|
||||||
if (IS_PCRE2_ERROR (match_info->matches))
|
|
||||||
{
|
|
||||||
+ gchar *error_msg = get_match_error_message (match_info->matches);
|
|
||||||
+
|
|
||||||
g_set_error (error, G_REGEX_ERROR, G_REGEX_ERROR_MATCH,
|
|
||||||
_("Error while matching regular expression %s: %s"),
|
|
||||||
- match_info->regex->pattern, match_error (match_info->matches));
|
|
||||||
+ match_info->regex->pattern, error_msg);
|
|
||||||
+ g_clear_pointer (&error_msg, g_free);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
else if (match_info->matches == 0)
|
|
||||||
@@ -1800,11 +1834,20 @@ regex_compile (const gchar *pattern,
|
|
||||||
{
|
|
||||||
GError *tmp_error;
|
|
||||||
gchar *offset_str;
|
|
||||||
+ gchar *pcre2_errmsg = NULL;
|
|
||||||
+ int original_errcode;
|
|
||||||
|
|
||||||
/* Translate the PCRE error code to GRegexError and use a translated
|
|
||||||
* error message if possible */
|
|
||||||
+ original_errcode = errcode;
|
|
||||||
translate_compile_error (&errcode, &errmsg);
|
|
||||||
|
|
||||||
+ if (!errmsg)
|
|
||||||
+ {
|
|
||||||
+ errmsg = _("unknown error");
|
|
||||||
+ pcre2_errmsg = get_pcre2_error_string (original_errcode);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* PCRE uses byte offsets but we want to show character offsets */
|
|
||||||
erroffset = g_utf8_pointer_to_offset (pattern, &pattern[erroffset]);
|
|
||||||
|
|
||||||
@@ -1812,9 +1855,11 @@ regex_compile (const gchar *pattern,
|
|
||||||
tmp_error = g_error_new (G_REGEX_ERROR, errcode,
|
|
||||||
_("Error while compiling regular expression ‘%s’ "
|
|
||||||
"at char %s: %s"),
|
|
||||||
- pattern, offset_str, errmsg);
|
|
||||||
+ pattern, offset_str,
|
|
||||||
+ pcre2_errmsg ? pcre2_errmsg : errmsg);
|
|
||||||
g_propagate_error (error, tmp_error);
|
|
||||||
g_free (offset_str);
|
|
||||||
+ g_clear_pointer (&pcre2_errmsg, g_free);
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
@@ -2402,9 +2447,12 @@ g_regex_match_all_full (const GRegex *regex,
|
|
||||||
}
|
|
||||||
else if (IS_PCRE2_ERROR (info->matches))
|
|
||||||
{
|
|
||||||
+ gchar *error_msg = get_match_error_message (info->matches);
|
|
||||||
+
|
|
||||||
g_set_error (error, G_REGEX_ERROR, G_REGEX_ERROR_MATCH,
|
|
||||||
_("Error while matching regular expression %s: %s"),
|
|
||||||
- regex->pattern, match_error (info->matches));
|
|
||||||
+ regex->pattern, error_msg);
|
|
||||||
+ g_clear_pointer (&error_msg, g_free);
|
|
||||||
}
|
|
||||||
else if (info->matches != PCRE2_ERROR_NOMATCH)
|
|
||||||
{
|
|
||||||
diff --git a/glib/tests/regex.c b/glib/tests/regex.c
|
|
||||||
index 9803d49659..52af212f29 100644
|
|
||||||
--- a/glib/tests/regex.c
|
|
||||||
+++ b/glib/tests/regex.c
|
|
||||||
@@ -2560,6 +2560,7 @@ main (int argc, char *argv[])
|
|
||||||
TEST_NEW_FAIL ("[a-z", 0, G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS);
|
|
||||||
TEST_NEW_FAIL ("[\\B]", 0, G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS);
|
|
||||||
TEST_NEW_FAIL ("[z-a]", 0, G_REGEX_ERROR_RANGE_OUT_OF_ORDER);
|
|
||||||
+ TEST_NEW_FAIL ("^[[:alnum:]-_.]+$", 0, G_REGEX_ERROR_COMPILE);
|
|
||||||
TEST_NEW_FAIL ("{2,4}", 0, G_REGEX_ERROR_NOTHING_TO_REPEAT);
|
|
||||||
TEST_NEW_FAIL ("a(?u)", 0, G_REGEX_ERROR_UNRECOGNIZED_CHARACTER);
|
|
||||||
TEST_NEW_FAIL ("a(?<$foo)bar", 0, G_REGEX_ERROR_MISSING_SUBPATTERN_NAME);
|
|
||||||
@@ -2636,6 +2637,7 @@ main (int argc, char *argv[])
|
|
||||||
TEST_MATCH_SIMPLE("a", "a", G_REGEX_CASELESS, 0, TRUE);
|
|
||||||
TEST_MATCH_SIMPLE("a", "A", G_REGEX_CASELESS, 0, TRUE);
|
|
||||||
TEST_MATCH_SIMPLE("\\C\\C", "ab", G_REGEX_OPTIMIZE | G_REGEX_RAW, 0, TRUE);
|
|
||||||
+ TEST_MATCH_SIMPLE("^[[:alnum:]\\-_.]+$", "admin-foo", 0, 0, TRUE);
|
|
||||||
/* These are needed to test extended properties. */
|
|
||||||
TEST_MATCH_SIMPLE(AGRAVE, AGRAVE, G_REGEX_CASELESS, 0, TRUE);
|
|
||||||
TEST_MATCH_SIMPLE(AGRAVE, AGRAVE_UPPER, G_REGEX_CASELESS, 0, TRUE);
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,27 +0,0 @@
|
|||||||
From a2b5b9e906256f43b0bac702424613ea0e7ddcb0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Aleksei Rybalkin <aleksei@rybalkin.org>
|
|
||||||
Date: Mon, 25 Jul 2022 16:57:06 +0200
|
|
||||||
Subject: [PATCH] gregex: add original test case for issue #2700
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/a2b5b9e906256f43b0bac702424613ea0e7ddcb0
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/tests/regex.c | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/glib/tests/regex.c b/glib/tests/regex.c
|
|
||||||
index 5839465fae..acb082b704 100644
|
|
||||||
--- a/glib/tests/regex.c
|
|
||||||
+++ b/glib/tests/regex.c
|
|
||||||
@@ -2495,6 +2495,7 @@ main (int argc, char *argv[])
|
|
||||||
|
|
||||||
/* see https://gitlab.gnome.org/GNOME/glib/-/issues/2700 */
|
|
||||||
TEST_MATCH("(\n.+)+", G_REGEX_DEFAULT, 0, "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n", -1, 0, 0, TRUE);
|
|
||||||
+ TEST_MATCH("\n([\\-\\.a-zA-Z]+[\\-\\.0-9]*) +connected ([^(\n ]*)[^\n]*((\n +[0-9]+x[0-9]+[^\n]+)+)", G_REGEX_DEFAULT, 0, "Screen 0: minimum 1 x 1, current 3840 x 1080, maximum 8192 x 8192\nVirtual1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 0mm x 0mm\n 1920x1080 60.00*+ 59.96 \n 3840x2400 59.97 \n 3840x2160 59.97 \n 2880x1800 59.95 \n 2560x1600 59.99 \n 2560x1440 59.95 \n 1920x1440 60.00 \n 1856x1392 60.00 \n 1792x1344 60.00 \n 1920x1200 59.88 \n 1600x1200 60.00 \n 1680x1050 59.95 \n 1400x1050 59.98 \n 1280x1024 60.02 \n 1440x900 59.89 \n 1280x960 60.00 \n 1360x768 60.02 \n 1280x800 59.81 \n 1152x864 75.00 \n 1280x768 59.87 \n 1280x720 59.86 \n 1024x768 60.00 \n 800x600 60.32 \n 640x480 59.94 \nVirtual2 connected 1920x1080+1920+0 (normal left inverted right x axis y axis) 0mm x 0mm\n 1920x1080 60.00*+ 59.96 \n 3840x2400 59.97 \n 3840x2160 59.97 \n 2880x1800 59.95 \n 2560x1600 59.99 \n 2560x1440 59.95 \n 1920x1440 60.00 \n 1856x1392 60.00 \n 1792x1344 60.00 \n 1920x1200 59.88 \n 1600x1200 60.00 \n 1680x1050 59.95 \n 1400x1050 59.98 \n 1280x1024 60.02 \n 1440x900 59.89 \n 1280x960 60.00 \n 1360x768 60.02 \n 1280x800 59.81 \n 1152x864 75.00 \n 1280x768 59.87 \n 1280x720 59.86 \n 1024x768 60.00 \n 800x600 60.32 \n 640x480 59.94 \nVirtual3 disconnected (normal left inverted right x axis y axis)\nVirtual4 disconnected (normal left inverted right x axis y axis)\nVirtual5 disconnected (normal left inverted right x axis y axis)\nVirtual6 disconnected (normal left inverted right x axis y axis)\nVirtual7 disconnected (normal left inverted right x axis y axis)\nVirtual8 disconnected (normal left inverted right x axis y axis)\n", -1, 0, 0, TRUE);
|
|
||||||
|
|
||||||
/* TEST_MATCH_NEXT#(pattern, string, string_len, start_position, ...) */
|
|
||||||
TEST_MATCH_NEXT0("a", "x", -1, 0);
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,49 +0,0 @@
|
|||||||
From 6535c77b00a444750148d9d658e4d47214bb4562 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Aleksei Rybalkin <aleksei@rybalkin.org>
|
|
||||||
Date: Mon, 25 Jul 2022 16:48:03 +0200
|
|
||||||
Subject: [PATCH] gregex: do not set match and recursion limits on match
|
|
||||||
context
|
|
||||||
|
|
||||||
These are not really necessary, and cause breakages (e.g. #2700).
|
|
||||||
pcre2_set_recursion_limit is also deprecated.
|
|
||||||
|
|
||||||
Fixes: #2700
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/6535c77b00a444750148d9d658e4d47214bb4562
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/gregex.c | 2 --
|
|
||||||
glib/tests/regex.c | 3 +++
|
|
||||||
2 files changed, 3 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index 6741d2479f..dd61dc4813 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -769,8 +769,6 @@ match_info_new (const GRegex *regex,
|
|
||||||
&match_info->n_subpatterns);
|
|
||||||
|
|
||||||
match_info->match_context = pcre2_match_context_create (NULL);
|
|
||||||
- pcre2_set_match_limit (match_info->match_context, 65536); /* should be plenty */
|
|
||||||
- pcre2_set_recursion_limit (match_info->match_context, 64); /* should be plenty */
|
|
||||||
|
|
||||||
if (is_dfa)
|
|
||||||
{
|
|
||||||
diff --git a/glib/tests/regex.c b/glib/tests/regex.c
|
|
||||||
index bb1a5ff762..5839465fae 100644
|
|
||||||
--- a/glib/tests/regex.c
|
|
||||||
+++ b/glib/tests/regex.c
|
|
||||||
@@ -2493,6 +2493,9 @@ main (int argc, char *argv[])
|
|
||||||
TEST_MATCH("[DŽ]", G_REGEX_CASELESS, 0, "dž", -1, 0, 0, TRUE);
|
|
||||||
TEST_MATCH("[DŽ]", G_REGEX_CASELESS, 0, "Dž", -1, 0, 0, TRUE);
|
|
||||||
|
|
||||||
+ /* see https://gitlab.gnome.org/GNOME/glib/-/issues/2700 */
|
|
||||||
+ TEST_MATCH("(\n.+)+", G_REGEX_DEFAULT, 0, "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n", -1, 0, 0, TRUE);
|
|
||||||
+
|
|
||||||
/* TEST_MATCH_NEXT#(pattern, string, string_len, start_position, ...) */
|
|
||||||
TEST_MATCH_NEXT0("a", "x", -1, 0);
|
|
||||||
TEST_MATCH_NEXT0("a", "ax", -1, 1);
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,85 +0,0 @@
|
|||||||
From c05d09044fb71bdea599c81bf0ae896a5503e76a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Marco Trevisan <mail@3v1n0.net>
|
|
||||||
Date: Fri, 15 Jul 2022 01:27:33 +0200
|
|
||||||
Subject: [PATCH] gregex: Ensure we translate the errcode without asserting on
|
|
||||||
G_REGEX_ERROR_COMPILE
|
|
||||||
|
|
||||||
Since commit 8d5a44dc in order to ensure that we were setting the errcode in
|
|
||||||
translate_compile_error(), we did an assert checking whether it was a
|
|
||||||
valid value, but we assumed that 0 was not a valid error, while it is as
|
|
||||||
it's the generic G_REGEX_ERROR_COMPILE.
|
|
||||||
|
|
||||||
So, set errcode and errmsg to invalid values before translating and
|
|
||||||
ensure we've change them.
|
|
||||||
|
|
||||||
Fixes: #2694
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/c05d09044fb71bdea599c81bf0ae896a5503e76a
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/gregex.c | 8 ++++++--
|
|
||||||
glib/tests/regex.c | 13 +++++++++++++
|
|
||||||
2 files changed, 19 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index 5fc7b16bc8..2a54929bf4 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -476,8 +476,12 @@ translate_compile_error (gint *errcode, const gchar **errmsg)
|
|
||||||
* Note that there can be more PCRE errors with the same GRegexError
|
|
||||||
* and that some PCRE errors are useless for us.
|
|
||||||
*/
|
|
||||||
+ gint original_errcode = *errcode;
|
|
||||||
|
|
||||||
- switch (*errcode)
|
|
||||||
+ *errcode = -1;
|
|
||||||
+ *errmsg = NULL;
|
|
||||||
+
|
|
||||||
+ switch (original_errcode)
|
|
||||||
{
|
|
||||||
case PCRE2_ERROR_END_BACKSLASH:
|
|
||||||
*errcode = G_REGEX_ERROR_STRAY_BACKSLASH;
|
|
||||||
@@ -725,7 +729,7 @@ translate_compile_error (gint *errcode, const gchar **errmsg)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
- g_assert (*errcode != 0);
|
|
||||||
+ g_assert (*errcode != -1);
|
|
||||||
g_assert (*errmsg != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/glib/tests/regex.c b/glib/tests/regex.c
|
|
||||||
index 3355f64e54..9a1977b248 100644
|
|
||||||
--- a/glib/tests/regex.c
|
|
||||||
+++ b/glib/tests/regex.c
|
|
||||||
@@ -2187,6 +2187,18 @@ pcre2_ge (guint64 major, guint64 minor)
|
|
||||||
return (pcre2_major > major) || (pcre2_major == major && pcre2_minor >= minor);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void
|
|
||||||
+test_compile_errors (void)
|
|
||||||
+{
|
|
||||||
+ GRegex *regex;
|
|
||||||
+ GError *error = NULL;
|
|
||||||
+
|
|
||||||
+ regex = g_regex_new ("\\o{999}", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ g_assert_null (regex);
|
|
||||||
+ g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_COMPILE);
|
|
||||||
+ g_clear_error (&error);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int
|
|
||||||
main (int argc, char *argv[])
|
|
||||||
{
|
|
||||||
@@ -2204,6 +2216,7 @@ main (int argc, char *argv[])
|
|
||||||
g_test_add_func ("/regex/multiline", test_multiline);
|
|
||||||
g_test_add_func ("/regex/explicit-crlf", test_explicit_crlf);
|
|
||||||
g_test_add_func ("/regex/max-lookbehind", test_max_lookbehind);
|
|
||||||
+ g_test_add_func ("/regex/compile-errors", test_compile_errors);
|
|
||||||
|
|
||||||
/* TEST_NEW(pattern, compile_opts, match_opts) */
|
|
||||||
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,44 +0,0 @@
|
|||||||
From 5cd94a0982e4a910ee33ec58f7678429ec067b6f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Aleksei Rybalkin <aleksei@rybalkin.org>
|
|
||||||
Date: Thu, 14 Jul 2022 13:14:31 +0000
|
|
||||||
Subject: [PATCH] gregex: use %s format specifier for localized error message
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/5cd94a0982e4a910ee33ec58f7678429ec067b6f
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/gregex.c | 9 ++++++---
|
|
||||||
1 file changed, 6 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index 55672249cb..5fc7b16bc8 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -1661,6 +1661,7 @@ regex_compile (const gchar *pattern,
|
|
||||||
if (re == NULL)
|
|
||||||
{
|
|
||||||
GError *tmp_error;
|
|
||||||
+ gchar *offset_str;
|
|
||||||
|
|
||||||
/* Translate the PCRE error code to GRegexError and use a translated
|
|
||||||
* error message if possible */
|
|
||||||
@@ -1669,11 +1670,13 @@ regex_compile (const gchar *pattern,
|
|
||||||
/* PCRE uses byte offsets but we want to show character offsets */
|
|
||||||
erroffset = g_utf8_pointer_to_offset (pattern, &pattern[erroffset]);
|
|
||||||
|
|
||||||
+ offset_str = g_strdup_printf ("%" G_GSIZE_FORMAT, erroffset);
|
|
||||||
tmp_error = g_error_new (G_REGEX_ERROR, errcode,
|
|
||||||
- _("Error while compiling regular "
|
|
||||||
- "expression %s at char %" G_GSIZE_FORMAT ": %s"),
|
|
||||||
- pattern, erroffset, errmsg);
|
|
||||||
+ _("Error while compiling regular expression ‘%s’ "
|
|
||||||
+ "at char %s: %s"),
|
|
||||||
+ pattern, offset_str, errmsg);
|
|
||||||
g_propagate_error (error, tmp_error);
|
|
||||||
+ g_free (offset_str);
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,678 +0,0 @@
|
|||||||
From bcd8cb3e142bf7f1c92583aa81c34fe8ff8521c0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Aleksei Rybalkin <aleksei@rybalkin.org>
|
|
||||||
Date: Wed, 20 Jul 2022 20:48:17 +0000
|
|
||||||
Subject: [PATCH] gregex: use G_REGEX_OPTIMIZE flag to enable JIT compilation
|
|
||||||
|
|
||||||
Since we ported gregex to pcre2, the JIT compiler is now available to be
|
|
||||||
used. Let's undeprecate G_REGEX_OPTIMIZE flag to control whether the JIT
|
|
||||||
compilation is requested, since using JIT is itself an optimization.
|
|
||||||
See [1] for details on its implementation in pcre2.
|
|
||||||
|
|
||||||
[1] http://pcre.org/current/doc/html/pcre2jit.html
|
|
||||||
|
|
||||||
Fixes: #566
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/bcd8cb3e142bf7f1c92583aa81c34fe8ff8521c0
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/gregex.c | 104 ++++++++++++++++++++++++++++++------
|
|
||||||
glib/gregex.h | 14 ++---
|
|
||||||
glib/tests/regex.c | 128 ++++++++++++++++++++++++---------------------
|
|
||||||
3 files changed, 164 insertions(+), 82 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index b0edacc0d3..cf9ce23e8d 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -144,7 +144,6 @@
|
|
||||||
PCRE2_NOTBOL | \
|
|
||||||
PCRE2_NOTEOL | \
|
|
||||||
PCRE2_NOTEMPTY | \
|
|
||||||
- PCRE2_PARTIAL_SOFT | \
|
|
||||||
PCRE2_NEWLINE_CR | \
|
|
||||||
PCRE2_NEWLINE_LF | \
|
|
||||||
PCRE2_NEWLINE_CRLF | \
|
|
||||||
@@ -195,6 +194,13 @@ struct _GMatchInfo
|
|
||||||
pcre2_match_data *match_data;
|
|
||||||
};
|
|
||||||
|
|
||||||
+typedef enum
|
|
||||||
+{
|
|
||||||
+ JIT_STATUS_DEFAULT,
|
|
||||||
+ JIT_STATUS_ENABLED,
|
|
||||||
+ JIT_STATUS_DISABLED
|
|
||||||
+} JITStatus;
|
|
||||||
+
|
|
||||||
struct _GRegex
|
|
||||||
{
|
|
||||||
gint ref_count; /* the ref count for the immutable part (atomic) */
|
|
||||||
@@ -203,6 +209,8 @@ struct _GRegex
|
|
||||||
GRegexCompileFlags compile_opts; /* options used at compile time on the pattern, pcre2 values */
|
|
||||||
GRegexCompileFlags orig_compile_opts; /* options used at compile time on the pattern, gregex values */
|
|
||||||
GRegexMatchFlags match_opts; /* options used at match time on the regex */
|
|
||||||
+ gint jit_options; /* options which were enabled for jit compiler */
|
|
||||||
+ JITStatus jit_status; /* indicates the status of jit compiler for this compiled regex */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* TRUE if ret is an error code, FALSE otherwise. */
|
|
||||||
@@ -262,10 +270,11 @@ map_to_pcre2_compile_flags (gint pcre1_flags)
|
|
||||||
if (pcre1_flags & G_REGEX_BSR_ANYCRLF)
|
|
||||||
pcre2_flags |= PCRE2_BSR_ANYCRLF;
|
|
||||||
|
|
||||||
- /* these are not available in pcre2 */
|
|
||||||
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
||||||
+ /* these are not available in pcre2, but we use G_REGEX_OPTIMIZE as a special
|
|
||||||
+ * case to request JIT compilation */
|
|
||||||
if (pcre1_flags & G_REGEX_OPTIMIZE)
|
|
||||||
pcre2_flags |= 0;
|
|
||||||
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
||||||
if (pcre1_flags & G_REGEX_JAVASCRIPT_COMPAT)
|
|
||||||
pcre2_flags |= 0;
|
|
||||||
G_GNUC_END_IGNORE_DEPRECATIONS
|
|
||||||
@@ -291,8 +300,6 @@ map_to_pcre2_match_flags (gint pcre1_flags)
|
|
||||||
pcre2_flags |= PCRE2_NOTEOL;
|
|
||||||
if (pcre1_flags & G_REGEX_MATCH_NOTEMPTY)
|
|
||||||
pcre2_flags |= PCRE2_NOTEMPTY;
|
|
||||||
- if (pcre1_flags & G_REGEX_MATCH_PARTIAL)
|
|
||||||
- pcre2_flags |= PCRE2_PARTIAL_SOFT;
|
|
||||||
if (pcre1_flags & G_REGEX_MATCH_NEWLINE_CR)
|
|
||||||
pcre2_flags |= PCRE2_NEWLINE_CR;
|
|
||||||
if (pcre1_flags & G_REGEX_MATCH_NEWLINE_LF)
|
|
||||||
@@ -385,8 +392,6 @@ map_to_pcre1_match_flags (gint pcre2_flags)
|
|
||||||
pcre1_flags |= G_REGEX_MATCH_NOTEOL;
|
|
||||||
if (pcre2_flags & PCRE2_NOTEMPTY)
|
|
||||||
pcre1_flags |= G_REGEX_MATCH_NOTEMPTY;
|
|
||||||
- if (pcre2_flags & PCRE2_PARTIAL_SOFT)
|
|
||||||
- pcre1_flags |= G_REGEX_MATCH_PARTIAL;
|
|
||||||
if (pcre2_flags & PCRE2_NEWLINE_CR)
|
|
||||||
pcre1_flags |= G_REGEX_MATCH_NEWLINE_CR;
|
|
||||||
if (pcre2_flags & PCRE2_NEWLINE_LF)
|
|
||||||
@@ -461,6 +466,9 @@ match_error (gint errcode)
|
|
||||||
return _("bad offset");
|
|
||||||
case PCRE2_ERROR_RECURSELOOP:
|
|
||||||
return _("recursion loop");
|
|
||||||
+ case PCRE2_ERROR_JIT_BADOPTION:
|
|
||||||
+ /* should not happen in GRegex since we check modes before each match */
|
|
||||||
+ return _("matching mode is requested that was not compiled for JIT");
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
@@ -817,6 +825,56 @@ recalc_match_offsets (GMatchInfo *match_info,
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void
|
|
||||||
+enable_jit_with_match_options (GRegex *regex,
|
|
||||||
+ GRegexMatchFlags match_options)
|
|
||||||
+{
|
|
||||||
+ gint old_jit_options, new_jit_options, retval;
|
|
||||||
+
|
|
||||||
+ if (!(regex->orig_compile_opts & G_REGEX_OPTIMIZE))
|
|
||||||
+ return;
|
|
||||||
+ if (regex->jit_status == JIT_STATUS_DISABLED)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ old_jit_options = regex->jit_options;
|
|
||||||
+ new_jit_options = old_jit_options | PCRE2_JIT_COMPLETE;
|
|
||||||
+ if (match_options & PCRE2_PARTIAL_HARD)
|
|
||||||
+ new_jit_options |= PCRE2_JIT_PARTIAL_HARD;
|
|
||||||
+ if (match_options & PCRE2_PARTIAL_SOFT)
|
|
||||||
+ new_jit_options |= PCRE2_JIT_PARTIAL_SOFT;
|
|
||||||
+
|
|
||||||
+ /* no new options enabled */
|
|
||||||
+ if (new_jit_options == old_jit_options)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ retval = pcre2_jit_compile (regex->pcre_re, new_jit_options);
|
|
||||||
+ switch (retval)
|
|
||||||
+ {
|
|
||||||
+ case 0: /* JIT enabled successfully */
|
|
||||||
+ regex->jit_status = JIT_STATUS_ENABLED;
|
|
||||||
+ regex->jit_options = new_jit_options;
|
|
||||||
+ break;
|
|
||||||
+ case PCRE2_ERROR_NOMEMORY:
|
|
||||||
+ g_warning ("JIT compilation was requested with G_REGEX_OPTIMIZE, "
|
|
||||||
+ "but JIT was unable to allocate executable memory for the "
|
|
||||||
+ "compiler. Falling back to interpretive code.");
|
|
||||||
+ regex->jit_status = JIT_STATUS_DISABLED;
|
|
||||||
+ break;
|
|
||||||
+ case PCRE2_ERROR_JIT_BADOPTION:
|
|
||||||
+ g_warning ("JIT compilation was requested with G_REGEX_OPTIMIZE, "
|
|
||||||
+ "but JIT support is not available. Falling back to "
|
|
||||||
+ "interpretive code.");
|
|
||||||
+ regex->jit_status = JIT_STATUS_DISABLED;
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ g_warning ("JIT compilation was requested with G_REGEX_OPTIMIZE, "
|
|
||||||
+ "but request for JIT support had unexpectedly failed. "
|
|
||||||
+ "Falling back to interpretive code.");
|
|
||||||
+ regex->jit_status = JIT_STATUS_DISABLED;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* g_match_info_get_regex:
|
|
||||||
* @match_info: a #GMatchInfo
|
|
||||||
@@ -956,13 +1014,28 @@ g_match_info_next (GMatchInfo *match_info,
|
|
||||||
}
|
|
||||||
|
|
||||||
opts = map_to_pcre2_match_flags (match_info->regex->match_opts | match_info->match_opts);
|
|
||||||
- match_info->matches = pcre2_match (match_info->regex->pcre_re,
|
|
||||||
- (PCRE2_SPTR8) match_info->string,
|
|
||||||
- match_info->string_len,
|
|
||||||
- match_info->pos,
|
|
||||||
- opts & ~G_REGEX_FLAGS_CONVERTED,
|
|
||||||
- match_info->match_data,
|
|
||||||
- match_info->match_context);
|
|
||||||
+
|
|
||||||
+ enable_jit_with_match_options (match_info->regex, opts);
|
|
||||||
+ if (match_info->regex->jit_status == JIT_STATUS_ENABLED)
|
|
||||||
+ {
|
|
||||||
+ match_info->matches = pcre2_jit_match (match_info->regex->pcre_re,
|
|
||||||
+ (PCRE2_SPTR8) match_info->string,
|
|
||||||
+ match_info->string_len,
|
|
||||||
+ match_info->pos,
|
|
||||||
+ opts & ~G_REGEX_FLAGS_CONVERTED,
|
|
||||||
+ match_info->match_data,
|
|
||||||
+ match_info->match_context);
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ match_info->matches = pcre2_match (match_info->regex->pcre_re,
|
|
||||||
+ (PCRE2_SPTR8) match_info->string,
|
|
||||||
+ match_info->string_len,
|
|
||||||
+ match_info->pos,
|
|
||||||
+ opts & ~G_REGEX_FLAGS_CONVERTED,
|
|
||||||
+ match_info->match_data,
|
|
||||||
+ match_info->match_context);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (IS_PCRE2_ERROR (match_info->matches))
|
|
||||||
{
|
|
||||||
@@ -1582,6 +1655,7 @@ g_regex_new (const gchar *pattern,
|
|
||||||
regex->compile_opts = compile_options;
|
|
||||||
regex->orig_compile_opts = orig_compile_opts;
|
|
||||||
regex->match_opts = match_options;
|
|
||||||
+ enable_jit_with_match_options (regex, regex->match_opts);
|
|
||||||
|
|
||||||
return regex;
|
|
||||||
}
|
|
||||||
@@ -1836,10 +1910,8 @@ g_regex_get_compile_flags (const GRegex *regex)
|
|
||||||
|
|
||||||
g_return_val_if_fail (regex != NULL, 0);
|
|
||||||
|
|
||||||
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
||||||
/* Preserve original G_REGEX_OPTIMIZE */
|
|
||||||
extra_flags = (regex->orig_compile_opts & G_REGEX_OPTIMIZE);
|
|
||||||
-G_GNUC_END_IGNORE_DEPRECATIONS
|
|
||||||
|
|
||||||
/* Also include the newline options */
|
|
||||||
pcre2_pattern_info (regex->pcre_re, PCRE2_INFO_NEWLINE, &info_value);
|
|
||||||
diff --git a/glib/gregex.h b/glib/gregex.h
|
|
||||||
index 7010d52ab8..30eb387073 100644
|
|
||||||
--- a/glib/gregex.h
|
|
||||||
+++ b/glib/gregex.h
|
|
||||||
@@ -262,11 +262,13 @@ GQuark g_regex_error_quark (void);
|
|
||||||
* followed by "?" behaves as if it were followed by "?:" but named
|
|
||||||
* parentheses can still be used for capturing (and they acquire numbers
|
|
||||||
* in the usual way).
|
|
||||||
- * @G_REGEX_OPTIMIZE: Optimize the regular expression. If the pattern will
|
|
||||||
- * be used many times, then it may be worth the effort to optimize it
|
|
||||||
- * to improve the speed of matches. Deprecated in GLib 2.74 which now uses
|
|
||||||
- * libpcre2, which doesn’t require separate optimization of queries. This
|
|
||||||
- * option is now a no-op. Deprecated: 2.74
|
|
||||||
+ * @G_REGEX_OPTIMIZE: Since 2.74 and the port to pcre2, requests JIT
|
|
||||||
+ * compilation, which, if the just-in-time compiler is available, further
|
|
||||||
+ * processes a compiled pattern into machine code that executes much
|
|
||||||
+ * faster. However, it comes at the cost of extra processing before the
|
|
||||||
+ * match is performed, so it is most beneficial to use this when the same
|
|
||||||
+ * compiled pattern is used for matching many times. Before 2.74 this
|
|
||||||
+ * option used the built-in non-JIT optimizations in pcre1.
|
|
||||||
* @G_REGEX_FIRSTLINE: Limits an unanchored pattern to match before (or at) the
|
|
||||||
* first newline. Since: 2.34
|
|
||||||
* @G_REGEX_DUPNAMES: Names used to identify capturing subpatterns need not
|
|
||||||
@@ -311,7 +313,7 @@ typedef enum
|
|
||||||
G_REGEX_UNGREEDY = 1 << 9,
|
|
||||||
G_REGEX_RAW = 1 << 11,
|
|
||||||
G_REGEX_NO_AUTO_CAPTURE = 1 << 12,
|
|
||||||
- G_REGEX_OPTIMIZE GLIB_DEPRECATED_ENUMERATOR_IN_2_74 = 1 << 13,
|
|
||||||
+ G_REGEX_OPTIMIZE = 1 << 13,
|
|
||||||
G_REGEX_FIRSTLINE = 1 << 18,
|
|
||||||
G_REGEX_DUPNAMES = 1 << 19,
|
|
||||||
G_REGEX_NEWLINE_CR = 1 << 20,
|
|
||||||
diff --git a/glib/tests/regex.c b/glib/tests/regex.c
|
|
||||||
index 9a1977b248..bb1a5ff762 100644
|
|
||||||
--- a/glib/tests/regex.c
|
|
||||||
+++ b/glib/tests/regex.c
|
|
||||||
@@ -516,7 +516,7 @@ test_partial (gconstpointer d)
|
|
||||||
GRegex *regex;
|
|
||||||
GMatchInfo *match_info;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, data->compile_opts, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
|
|
||||||
g_assert (regex != NULL);
|
|
||||||
|
|
||||||
@@ -534,12 +534,13 @@ test_partial (gconstpointer d)
|
|
||||||
g_regex_unref (regex);
|
|
||||||
}
|
|
||||||
|
|
||||||
-#define TEST_PARTIAL_FULL(_pattern, _string, _match_opts, _expected) { \
|
|
||||||
+#define TEST_PARTIAL_FULL(_pattern, _string, _compile_opts, _match_opts, _expected) { \
|
|
||||||
TestMatchData *data; \
|
|
||||||
gchar *path; \
|
|
||||||
data = g_new0 (TestMatchData, 1); \
|
|
||||||
data->pattern = _pattern; \
|
|
||||||
data->string = _string; \
|
|
||||||
+ data->compile_opts = _compile_opts; \
|
|
||||||
data->match_opts = _match_opts; \
|
|
||||||
data->expected = _expected; \
|
|
||||||
path = g_strdup_printf ("/regex/match/partial/%d", ++total); \
|
|
||||||
@@ -547,7 +548,7 @@ test_partial (gconstpointer d)
|
|
||||||
g_free (path); \
|
|
||||||
}
|
|
||||||
|
|
||||||
-#define TEST_PARTIAL(_pattern, _string, _expected) TEST_PARTIAL_FULL(_pattern, _string, G_REGEX_MATCH_PARTIAL, _expected)
|
|
||||||
+#define TEST_PARTIAL(_pattern, _string, _compile_opts, _expected) TEST_PARTIAL_FULL(_pattern, _string, _compile_opts, G_REGEX_MATCH_PARTIAL, _expected)
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
const gchar *pattern;
|
|
||||||
@@ -1504,7 +1505,7 @@ test_properties (void)
|
|
||||||
gchar *str;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("\\p{L}\\p{Ll}\\p{Lu}\\p{L&}\\p{N}\\p{Nd}", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("\\p{L}\\p{Ll}\\p{Lu}\\p{L&}\\p{N}\\p{Nd}", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
res = g_regex_match (regex, "ppPP01", 0, &match);
|
|
||||||
g_assert (res);
|
|
||||||
str = g_match_info_fetch (match, 0);
|
|
||||||
@@ -1525,7 +1526,7 @@ test_class (void)
|
|
||||||
gchar *str;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("[abc\\x{0B1E}\\p{Mn}\\x{0391}-\\x{03A9}]", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("[abc\\x{0B1E}\\p{Mn}\\x{0391}-\\x{03A9}]", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
res = g_regex_match (regex, "a:b:\340\254\236:\333\253:\316\240", 0, &match);
|
|
||||||
g_assert (res);
|
|
||||||
str = g_match_info_fetch (match, 0);
|
|
||||||
@@ -1571,7 +1572,7 @@ test_lookahead (void)
|
|
||||||
gint start, end;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("\\w+(?=;)", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("\\w+(?=;)", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "word1 word2: word3;", 0, &match);
|
|
||||||
@@ -1585,7 +1586,7 @@ test_lookahead (void)
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("foo(?!bar)", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("foo(?!bar)", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "foobar foobaz", 0, &match);
|
|
||||||
@@ -1600,7 +1601,7 @@ test_lookahead (void)
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("(?!bar)foo", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("(?!bar)foo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "foobar foobaz", 0, &match);
|
|
||||||
@@ -1633,7 +1634,7 @@ test_lookbehind (void)
|
|
||||||
gint start, end;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("(?<!foo)bar", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("(?<!foo)bar", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "foobar boobar", 0, &match);
|
|
||||||
@@ -1648,7 +1649,7 @@ test_lookbehind (void)
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("(?<=bullock|donkey) poo", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("(?<=bullock|donkey) poo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "don poo, and bullock poo", 0, &match);
|
|
||||||
@@ -1661,17 +1662,17 @@ test_lookbehind (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<!dogs?|cats?) x", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("(?<!dogs?|cats?) x", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex == NULL);
|
|
||||||
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND);
|
|
||||||
g_clear_error (&error);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<=ab(c|de)) foo", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("(?<=ab(c|de)) foo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex == NULL);
|
|
||||||
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND);
|
|
||||||
g_clear_error (&error);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<=abc|abde)foo", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("(?<=abc|abde)foo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "abfoo, abdfoo, abcfoo", 0, &match);
|
|
||||||
@@ -1683,7 +1684,7 @@ test_lookbehind (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^.*+(?<=abcd)", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("^.*+(?<=abcd)", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "abcabcabcabcabcabcabcabcabcd", 0, &match);
|
|
||||||
@@ -1692,7 +1693,7 @@ test_lookbehind (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<=\\d{3})(?<!999)foo", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("(?<=\\d{3})(?<!999)foo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "999foo 123abcfoo 123foo", 0, &match);
|
|
||||||
@@ -1704,7 +1705,7 @@ test_lookbehind (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<=\\d{3}...)(?<!999)foo", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("(?<=\\d{3}...)(?<!999)foo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "999foo 123abcfoo 123foo", 0, &match);
|
|
||||||
@@ -1716,7 +1717,7 @@ test_lookbehind (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<=\\d{3}(?!999)...)foo", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("(?<=\\d{3}(?!999)...)foo", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "999foo 123abcfoo 123foo", 0, &match);
|
|
||||||
@@ -1728,7 +1729,7 @@ test_lookbehind (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<=(?<!foo)bar)baz", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("(?<=(?<!foo)bar)baz", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "foobarbaz barfoobaz barbarbaz", 0, &match);
|
|
||||||
@@ -1753,7 +1754,7 @@ test_subpattern (void)
|
|
||||||
gint start;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("cat(aract|erpillar|)", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("cat(aract|erpillar|)", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
g_assert_cmpint (g_regex_get_capture_count (regex), ==, 1);
|
|
||||||
@@ -1771,7 +1772,7 @@ test_subpattern (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("the ((red|white) (king|queen))", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("the ((red|white) (king|queen))", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
g_assert_cmpint (g_regex_get_capture_count (regex), ==, 3);
|
|
||||||
@@ -1795,7 +1796,7 @@ test_subpattern (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("the ((?:red|white) (king|queen))", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("the ((?:red|white) (king|queen))", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "the white queen", 0, &match);
|
|
||||||
@@ -1815,7 +1816,7 @@ test_subpattern (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?|(Sat)(ur)|(Sun))day (morning|afternoon)", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("(?|(Sat)(ur)|(Sun))day (morning|afternoon)", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
g_assert_cmpint (g_regex_get_capture_count (regex), ==, 3);
|
|
||||||
@@ -1835,7 +1836,7 @@ test_subpattern (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?|(abc)|(def))\\1", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("(?|(abc)|(def))\\1", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
g_assert_cmpint (g_regex_get_max_backref (regex), ==, 1);
|
|
||||||
@@ -1853,7 +1854,7 @@ test_subpattern (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?|(abc)|(def))(?1)", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("(?|(abc)|(def))(?1)", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "abcabc abcdef defabc defdef", 0, &match);
|
|
||||||
@@ -1870,7 +1871,7 @@ test_subpattern (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("(?<DN>Mon|Fri|Sun)(?:day)?|(?<DN>Tue)(?:sday)?|(?<DN>Wed)(?:nesday)?|(?<DN>Thu)(?:rsday)?|(?<DN>Sat)(?:urday)?", G_REGEX_DUPNAMES, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("(?<DN>Mon|Fri|Sun)(?:day)?|(?<DN>Tue)(?:sday)?|(?<DN>Wed)(?:nesday)?|(?<DN>Thu)(?:rsday)?|(?<DN>Sat)(?:urday)?", G_REGEX_OPTIMIZE|G_REGEX_DUPNAMES, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "Mon Tuesday Wed Saturday", 0, &match);
|
|
||||||
@@ -1897,7 +1898,7 @@ test_subpattern (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^(a|b\\1)+$", G_REGEX_DUPNAMES, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("^(a|b\\1)+$", G_REGEX_OPTIMIZE|G_REGEX_DUPNAMES, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "aaaaaaaaaaaaaaaa", 0, &match);
|
|
||||||
@@ -1921,7 +1922,7 @@ test_condition (void)
|
|
||||||
gboolean res;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("^(a+)(\\()?[^()]+(?(-1)\\))(b+)$", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("^(a+)(\\()?[^()]+(?(-1)\\))(b+)$", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "a(zzzzzz)b", 0, &match);
|
|
||||||
@@ -1935,7 +1936,7 @@ test_condition (void)
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("^(a+)(?<OPEN>\\()?[^()]+(?(<OPEN>)\\))(b+)$", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("^(a+)(?<OPEN>\\()?[^()]+(?(<OPEN>)\\))(b+)$", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "a(zzzzzz)b", 0, &match);
|
|
||||||
@@ -1948,7 +1949,7 @@ test_condition (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^(a+)(?(+1)\\[|\\<)?[^()]+(\\])?(b+)$", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("^(a+)(?(+1)\\[|\\<)?[^()]+(\\])?(b+)$", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "a[zzzzzz]b", 0, &match);
|
|
||||||
@@ -1963,7 +1964,7 @@ test_condition (void)
|
|
||||||
|
|
||||||
regex = g_regex_new ("(?(DEFINE) (?<byte> 2[0-4]\\d | 25[0-5] | 1\\d\\d | [1-9]?\\d) )"
|
|
||||||
"\\b (?&byte) (\\.(?&byte)){3} \\b",
|
|
||||||
- G_REGEX_EXTENDED, 0, &error);
|
|
||||||
+ G_REGEX_OPTIMIZE|G_REGEX_EXTENDED, 0, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "128.0.0.1", 0, &match);
|
|
||||||
@@ -1982,7 +1983,7 @@ test_condition (void)
|
|
||||||
|
|
||||||
regex = g_regex_new ("^(?(?=[^a-z]*[a-z])"
|
|
||||||
"\\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} )$",
|
|
||||||
- G_REGEX_EXTENDED, 0, &error);
|
|
||||||
+ G_REGEX_OPTIMIZE|G_REGEX_EXTENDED, 0, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "01-abc-24", 0, &match);
|
|
||||||
@@ -2015,7 +2016,7 @@ test_recursion (void)
|
|
||||||
gint start;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
- regex = g_regex_new ("\\( ( [^()]++ | (?R) )* \\)", G_REGEX_EXTENDED, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("\\( ( [^()]++ | (?R) )* \\)", G_REGEX_OPTIMIZE|G_REGEX_EXTENDED, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "(middle)", 0, &match);
|
|
||||||
@@ -2032,7 +2033,7 @@ test_recursion (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^( \\( ( [^()]++ | (?1) )* \\) )$", G_REGEX_EXTENDED, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("^( \\( ( [^()]++ | (?1) )* \\) )$", G_REGEX_OPTIMIZE|G_REGEX_EXTENDED, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "((((((((((((((((middle))))))))))))))))", 0, &match);
|
|
||||||
@@ -2045,7 +2046,7 @@ test_recursion (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^(?<pn> \\( ( [^()]++ | (?&pn) )* \\) )$", G_REGEX_EXTENDED, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("^(?<pn> \\( ( [^()]++ | (?&pn) )* \\) )$", G_REGEX_OPTIMIZE|G_REGEX_EXTENDED, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
g_regex_match (regex, "(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()", 0, &match);
|
|
||||||
@@ -2054,7 +2055,7 @@ test_recursion (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", G_REGEX_EXTENDED, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >", G_REGEX_OPTIMIZE|G_REGEX_EXTENDED, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "<ab<01<23<4>>>>", 0, &match);
|
|
||||||
@@ -2073,7 +2074,7 @@ test_recursion (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^((.)(?1)\\2|.)$", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("^((.)(?1)\\2|.)$", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "abcdcba", 0, &match);
|
|
||||||
@@ -2086,7 +2087,7 @@ test_recursion (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "abcdcba", 0, &match);
|
|
||||||
@@ -2099,7 +2100,7 @@ test_recursion (void)
|
|
||||||
g_match_info_free (match);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
- regex = g_regex_new ("^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$", G_REGEX_CASELESS, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ regex = g_regex_new ("^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$", G_REGEX_OPTIMIZE|G_REGEX_CASELESS, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
g_assert (regex);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
res = g_regex_match (regex, "abcdcba", 0, &match);
|
|
||||||
@@ -2219,26 +2220,18 @@ main (int argc, char *argv[])
|
|
||||||
g_test_add_func ("/regex/compile-errors", test_compile_errors);
|
|
||||||
|
|
||||||
/* TEST_NEW(pattern, compile_opts, match_opts) */
|
|
||||||
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
||||||
TEST_NEW("[A-Z]+", G_REGEX_CASELESS | G_REGEX_EXTENDED | G_REGEX_OPTIMIZE, G_REGEX_MATCH_NOTBOL | G_REGEX_MATCH_PARTIAL);
|
|
||||||
-G_GNUC_END_IGNORE_DEPRECATIONS
|
|
||||||
TEST_NEW("", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
TEST_NEW(".*", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
||||||
TEST_NEW(".*", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT);
|
|
||||||
-G_GNUC_END_IGNORE_DEPRECATIONS
|
|
||||||
TEST_NEW(".*", G_REGEX_MULTILINE, G_REGEX_MATCH_DEFAULT);
|
|
||||||
TEST_NEW(".*", G_REGEX_DOTALL, G_REGEX_MATCH_DEFAULT);
|
|
||||||
TEST_NEW(".*", G_REGEX_DOTALL, G_REGEX_MATCH_NOTBOL);
|
|
||||||
TEST_NEW("(123\\d*)[a-zA-Z]+(?P<hello>.*)", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
TEST_NEW("(123\\d*)[a-zA-Z]+(?P<hello>.*)", G_REGEX_CASELESS, G_REGEX_MATCH_DEFAULT);
|
|
||||||
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
||||||
TEST_NEW("(123\\d*)[a-zA-Z]+(?P<hello>.*)", G_REGEX_CASELESS | G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT);
|
|
||||||
-G_GNUC_END_IGNORE_DEPRECATIONS
|
|
||||||
TEST_NEW("(?P<A>x)|(?P<A>y)", G_REGEX_DUPNAMES, G_REGEX_MATCH_DEFAULT);
|
|
||||||
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
||||||
TEST_NEW("(?P<A>x)|(?P<A>y)", G_REGEX_DUPNAMES | G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT);
|
|
||||||
-G_GNUC_END_IGNORE_DEPRECATIONS
|
|
||||||
/* This gives "internal error: code overflow" with pcre 6.0 */
|
|
||||||
TEST_NEW("(?i)(?-i)", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
TEST_NEW ("(?i)a", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
@@ -2249,9 +2242,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
|
|
||||||
TEST_NEW ("(?U)[a-z]+", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT);
|
|
||||||
|
|
||||||
/* TEST_NEW_CHECK_FLAGS(pattern, compile_opts, match_ops, real_compile_opts, real_match_opts) */
|
|
||||||
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
||||||
TEST_NEW_CHECK_FLAGS ("a", G_REGEX_OPTIMIZE, 0, G_REGEX_OPTIMIZE, 0);
|
|
||||||
-G_GNUC_END_IGNORE_DEPRECATIONS
|
|
||||||
TEST_NEW_CHECK_FLAGS ("a", G_REGEX_RAW, 0, G_REGEX_RAW, 0);
|
|
||||||
TEST_NEW_CHECK_FLAGS ("^.*", 0, 0, G_REGEX_ANCHORED, 0);
|
|
||||||
TEST_NEW_CHECK_FLAGS ("(*UTF8)a", 0, 0, 0 /* this is the default in GRegex */, 0);
|
|
||||||
@@ -2540,18 +2531,35 @@ G_GNUC_END_IGNORE_DEPRECATIONS
|
|
||||||
TEST_MATCH_COUNT("(a)?(b)", "b", 0, 0, 3);
|
|
||||||
TEST_MATCH_COUNT("(a)?(b)", "ab", 0, 0, 3);
|
|
||||||
|
|
||||||
- /* TEST_PARTIAL(pattern, string, expected) */
|
|
||||||
- TEST_PARTIAL("^ab", "a", TRUE);
|
|
||||||
- TEST_PARTIAL("^ab", "xa", FALSE);
|
|
||||||
- TEST_PARTIAL("ab", "xa", TRUE);
|
|
||||||
- TEST_PARTIAL("ab", "ab", FALSE); /* normal match. */
|
|
||||||
- TEST_PARTIAL("a+b", "aa", TRUE);
|
|
||||||
- TEST_PARTIAL("(a)+b", "aa", TRUE);
|
|
||||||
- TEST_PARTIAL("a?b", "a", TRUE);
|
|
||||||
-
|
|
||||||
- /* Test soft vs. hard partial matching */
|
|
||||||
- TEST_PARTIAL_FULL("cat(fish)?", "cat", G_REGEX_MATCH_PARTIAL_SOFT, FALSE);
|
|
||||||
- TEST_PARTIAL_FULL("cat(fish)?", "cat", G_REGEX_MATCH_PARTIAL_HARD, TRUE);
|
|
||||||
+ /* TEST_PARTIAL(pattern, string, expected), no JIT */
|
|
||||||
+ TEST_PARTIAL("^ab", "a", G_REGEX_DEFAULT, TRUE);
|
|
||||||
+ TEST_PARTIAL("^ab", "xa", G_REGEX_DEFAULT, FALSE);
|
|
||||||
+ TEST_PARTIAL("ab", "xa", G_REGEX_DEFAULT, TRUE);
|
|
||||||
+ TEST_PARTIAL("ab", "ab", G_REGEX_DEFAULT, FALSE); /* normal match. */
|
|
||||||
+ TEST_PARTIAL("a+b", "aa", G_REGEX_DEFAULT, TRUE);
|
|
||||||
+ TEST_PARTIAL("(a)+b", "aa", G_REGEX_DEFAULT, TRUE);
|
|
||||||
+ TEST_PARTIAL("a?b", "a", G_REGEX_DEFAULT, TRUE);
|
|
||||||
+
|
|
||||||
+ /* TEST_PARTIAL(pattern, string, expected) with JIT */
|
|
||||||
+ TEST_PARTIAL("^ab", "a", G_REGEX_OPTIMIZE, TRUE);
|
|
||||||
+ TEST_PARTIAL("^ab", "xa", G_REGEX_OPTIMIZE, FALSE);
|
|
||||||
+ TEST_PARTIAL("ab", "xa", G_REGEX_OPTIMIZE, TRUE);
|
|
||||||
+ TEST_PARTIAL("ab", "ab", G_REGEX_OPTIMIZE, FALSE); /* normal match. */
|
|
||||||
+ TEST_PARTIAL("a+b", "aa", G_REGEX_OPTIMIZE, TRUE);
|
|
||||||
+ TEST_PARTIAL("(a)+b", "aa", G_REGEX_OPTIMIZE, TRUE);
|
|
||||||
+ TEST_PARTIAL("a?b", "a", G_REGEX_OPTIMIZE, TRUE);
|
|
||||||
+
|
|
||||||
+ /* Test soft vs. hard partial matching, no JIT */
|
|
||||||
+ TEST_PARTIAL_FULL("cat(fish)?", "cat", G_REGEX_DEFAULT, G_REGEX_MATCH_PARTIAL_SOFT, FALSE);
|
|
||||||
+ TEST_PARTIAL_FULL("cat(fish)?", "cat", G_REGEX_DEFAULT, G_REGEX_MATCH_PARTIAL_HARD, TRUE);
|
|
||||||
+ TEST_PARTIAL_FULL("ab+", "ab", G_REGEX_DEFAULT, G_REGEX_MATCH_PARTIAL_SOFT, FALSE);
|
|
||||||
+ TEST_PARTIAL_FULL("ab+", "ab", G_REGEX_DEFAULT, G_REGEX_MATCH_PARTIAL_HARD, TRUE);
|
|
||||||
+
|
|
||||||
+ /* Test soft vs. hard partial matching with JIT */
|
|
||||||
+ TEST_PARTIAL_FULL("cat(fish)?", "cat", G_REGEX_OPTIMIZE, G_REGEX_MATCH_PARTIAL_SOFT, FALSE);
|
|
||||||
+ TEST_PARTIAL_FULL("cat(fish)?", "cat", G_REGEX_OPTIMIZE, G_REGEX_MATCH_PARTIAL_HARD, TRUE);
|
|
||||||
+ TEST_PARTIAL_FULL("ab+", "ab", G_REGEX_OPTIMIZE, G_REGEX_MATCH_PARTIAL_SOFT, FALSE);
|
|
||||||
+ TEST_PARTIAL_FULL("ab+", "ab", G_REGEX_OPTIMIZE, G_REGEX_MATCH_PARTIAL_HARD, TRUE);
|
|
||||||
|
|
||||||
/* TEST_SUB_PATTERN(pattern, string, start_position, sub_n, expected_sub,
|
|
||||||
* expected_start, expected_end) */
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,35 +0,0 @@
|
|||||||
From 710ccee65c010e4548ded487cdc191658f6a1f35 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mamoru TASAKA <mtasaka@fedoraproject.org>
|
|
||||||
Date: Tue, 26 Jul 2022 21:51:45 +0900
|
|
||||||
Subject: [PATCH] gregex: use correct size for pcre2_pattern_info
|
|
||||||
|
|
||||||
man pcre2_pattern_info says that the 3rd argument must
|
|
||||||
point to uint32_t variable (except for some 2nd argument value),
|
|
||||||
so correctly use it. Especially using wrong size can cause
|
|
||||||
unexpected result on big endian.
|
|
||||||
|
|
||||||
closes: #2699
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/710ccee65c010e4548ded487cdc191658f6a1f35
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/gregex.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index dd61dc4813..08c43ef4b5 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -1701,7 +1701,7 @@ regex_compile (const gchar *pattern,
|
|
||||||
PCRE2_SIZE erroffset;
|
|
||||||
gint errcode;
|
|
||||||
GRegexCompileFlags nonpcre_compile_options;
|
|
||||||
- unsigned long int pcre_compile_options;
|
|
||||||
+ uint32_t pcre_compile_options;
|
|
||||||
|
|
||||||
nonpcre_compile_options = compile_options & G_REGEX_COMPILE_NONPCRE_MASK;
|
|
||||||
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,55 +0,0 @@
|
|||||||
From 2c2e059cd354a9020ce9188e58e3ab0683008d08 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Aleksei Rybalkin <aleksei@rybalkin.org>
|
|
||||||
Date: Fri, 22 Jul 2022 20:27:04 +0200
|
|
||||||
Subject: [PATCH] gregex: use g_debug instead of g_warning in case JIT is not
|
|
||||||
available
|
|
||||||
|
|
||||||
In case JIT is not available in pcre2 we printed warning about it. This
|
|
||||||
warning broke tests on systems which don't have JIT support in pcre2
|
|
||||||
(e.g. macos).
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/2c2e059cd354a9020ce9188e58e3ab0683008d08
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/gregex.c | 18 +++++++++---------
|
|
||||||
1 file changed, 9 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index cf9ce23e8d..6741d2479f 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -855,21 +855,21 @@ enable_jit_with_match_options (GRegex *regex,
|
|
||||||
regex->jit_options = new_jit_options;
|
|
||||||
break;
|
|
||||||
case PCRE2_ERROR_NOMEMORY:
|
|
||||||
- g_warning ("JIT compilation was requested with G_REGEX_OPTIMIZE, "
|
|
||||||
- "but JIT was unable to allocate executable memory for the "
|
|
||||||
- "compiler. Falling back to interpretive code.");
|
|
||||||
+ g_debug ("JIT compilation was requested with G_REGEX_OPTIMIZE, "
|
|
||||||
+ "but JIT was unable to allocate executable memory for the "
|
|
||||||
+ "compiler. Falling back to interpretive code.");
|
|
||||||
regex->jit_status = JIT_STATUS_DISABLED;
|
|
||||||
break;
|
|
||||||
case PCRE2_ERROR_JIT_BADOPTION:
|
|
||||||
- g_warning ("JIT compilation was requested with G_REGEX_OPTIMIZE, "
|
|
||||||
- "but JIT support is not available. Falling back to "
|
|
||||||
- "interpretive code.");
|
|
||||||
+ g_debug ("JIT compilation was requested with G_REGEX_OPTIMIZE, "
|
|
||||||
+ "but JIT support is not available. Falling back to "
|
|
||||||
+ "interpretive code.");
|
|
||||||
regex->jit_status = JIT_STATUS_DISABLED;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
- g_warning ("JIT compilation was requested with G_REGEX_OPTIMIZE, "
|
|
||||||
- "but request for JIT support had unexpectedly failed. "
|
|
||||||
- "Falling back to interpretive code.");
|
|
||||||
+ g_debug ("JIT compilation was requested with G_REGEX_OPTIMIZE, "
|
|
||||||
+ "but request for JIT support had unexpectedly failed. "
|
|
||||||
+ "Falling back to interpretive code.");
|
|
||||||
regex->jit_status = JIT_STATUS_DISABLED;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,211 +0,0 @@
|
|||||||
From 7045260c226e409530e4f961f613f8c7d6f6725a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon McVittie <smcv@collabora.com>
|
|
||||||
Date: Thu, 23 Jun 2022 09:41:21 +0100
|
|
||||||
Subject: [PATCH] gsignal: Add G_CONNECT_DEFAULT
|
|
||||||
|
|
||||||
This makes calls to g_signal_connect_data() and g_signal_connect_object()
|
|
||||||
with default flags more self-documenting.
|
|
||||||
|
|
||||||
Signed-off-by: Simon McVittie <smcv@collabora.com>
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/7045260c226e409530e4f961f613f8c7d6f6725a
|
|
||||||
|
|
||||||
---
|
|
||||||
gio/gcancellable.c | 2 +-
|
|
||||||
gio/gdbusobjectmanagerclient.c | 4 ++--
|
|
||||||
gio/gdbusserver.c | 2 +-
|
|
||||||
gio/glocalfilemonitor.c | 5 +++--
|
|
||||||
gio/gsubprocess.c | 4 +++-
|
|
||||||
gio/gtask.c | 3 ++-
|
|
||||||
gobject/gobject.c | 8 ++++----
|
|
||||||
gobject/gsignal.h | 11 ++++++++---
|
|
||||||
gobject/tests/signals.c | 6 ++++--
|
|
||||||
9 files changed, 28 insertions(+), 17 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gio/gcancellable.c b/gio/gcancellable.c
|
|
||||||
index 64755206be..fe3cbeb7f7 100644
|
|
||||||
--- a/gio/gcancellable.c
|
|
||||||
+++ b/gio/gcancellable.c
|
|
||||||
@@ -589,7 +589,7 @@ g_cancellable_connect (GCancellable *cancellable,
|
|
||||||
id = g_signal_connect_data (cancellable, "cancelled",
|
|
||||||
callback, data,
|
|
||||||
(GClosureNotify) data_destroy_func,
|
|
||||||
- 0);
|
|
||||||
+ G_CONNECT_DEFAULT);
|
|
||||||
|
|
||||||
g_mutex_unlock (&cancellable_mutex);
|
|
||||||
}
|
|
||||||
diff --git a/gio/gdbusobjectmanagerclient.c b/gio/gdbusobjectmanagerclient.c
|
|
||||||
index bfb73b5308..fa5e73041e 100644
|
|
||||||
--- a/gio/gdbusobjectmanagerclient.c
|
|
||||||
+++ b/gio/gdbusobjectmanagerclient.c
|
|
||||||
@@ -1456,7 +1456,7 @@ initable_init (GInitable *initable,
|
|
||||||
G_CALLBACK (on_notify_g_name_owner),
|
|
||||||
weak_ref_new (G_OBJECT (manager)),
|
|
||||||
(GClosureNotify) weak_ref_free,
|
|
||||||
- 0 /* flags */);
|
|
||||||
+ G_CONNECT_DEFAULT);
|
|
||||||
|
|
||||||
manager->priv->signal_signal_id =
|
|
||||||
g_signal_connect_data (manager->priv->control_proxy,
|
|
||||||
@@ -1464,7 +1464,7 @@ initable_init (GInitable *initable,
|
|
||||||
G_CALLBACK (on_control_proxy_g_signal),
|
|
||||||
weak_ref_new (G_OBJECT (manager)),
|
|
||||||
(GClosureNotify) weak_ref_free,
|
|
||||||
- 0 /* flags */);
|
|
||||||
+ G_CONNECT_DEFAULT);
|
|
||||||
|
|
||||||
manager->priv->name_owner = g_dbus_proxy_get_name_owner (manager->priv->control_proxy);
|
|
||||||
if (manager->priv->name_owner == NULL && manager->priv->name != NULL)
|
|
||||||
diff --git a/gio/gdbusserver.c b/gio/gdbusserver.c
|
|
||||||
index fe5b23ed4d..f144d129ae 100644
|
|
||||||
--- a/gio/gdbusserver.c
|
|
||||||
+++ b/gio/gdbusserver.c
|
|
||||||
@@ -630,7 +630,7 @@ g_dbus_server_start (GDBusServer *server)
|
|
||||||
G_CALLBACK (on_run),
|
|
||||||
g_object_ref (server),
|
|
||||||
(GClosureNotify) g_object_unref,
|
|
||||||
- 0 /* flags */);
|
|
||||||
+ G_CONNECT_DEFAULT);
|
|
||||||
g_socket_service_start (G_SOCKET_SERVICE (server->listener));
|
|
||||||
server->active = TRUE;
|
|
||||||
g_object_notify (G_OBJECT (server), "active");
|
|
||||||
diff --git a/gio/glocalfilemonitor.c b/gio/glocalfilemonitor.c
|
|
||||||
index fde52193a9..8de4079394 100644
|
|
||||||
--- a/gio/glocalfilemonitor.c
|
|
||||||
+++ b/gio/glocalfilemonitor.c
|
|
||||||
@@ -809,7 +809,8 @@ g_local_file_monitor_start (GLocalFileMonitor *local_monitor,
|
|
||||||
|
|
||||||
local_monitor->mount_monitor = g_unix_mount_monitor_get ();
|
|
||||||
g_signal_connect_object (local_monitor->mount_monitor, "mounts-changed",
|
|
||||||
- G_CALLBACK (g_local_file_monitor_mounts_changed), local_monitor, 0);
|
|
||||||
+ G_CALLBACK (g_local_file_monitor_mounts_changed), local_monitor,
|
|
||||||
+ G_CONNECT_DEFAULT);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -924,7 +925,7 @@ g_local_file_monitor_new_in_worker (const gchar *pathname,
|
|
||||||
{
|
|
||||||
if (callback)
|
|
||||||
g_signal_connect_data (monitor, "changed", G_CALLBACK (callback),
|
|
||||||
- user_data, destroy_user_data, 0 /* flags */);
|
|
||||||
+ user_data, destroy_user_data, G_CONNECT_DEFAULT);
|
|
||||||
|
|
||||||
g_local_file_monitor_start (monitor, pathname, is_directory, flags, GLIB_PRIVATE_CALL(g_get_worker_context) ());
|
|
||||||
}
|
|
||||||
diff --git a/gio/gsubprocess.c b/gio/gsubprocess.c
|
|
||||||
index bb157197fc..c4747a1481 100644
|
|
||||||
--- a/gio/gsubprocess.c
|
|
||||||
+++ b/gio/gsubprocess.c
|
|
||||||
@@ -756,7 +756,9 @@ g_subprocess_wait_async (GSubprocess *subprocess,
|
|
||||||
* see the cancellation in the _finish().
|
|
||||||
*/
|
|
||||||
if (cancellable)
|
|
||||||
- g_signal_connect_object (cancellable, "cancelled", G_CALLBACK (g_subprocess_wait_cancelled), task, 0);
|
|
||||||
+ g_signal_connect_object (cancellable, "cancelled",
|
|
||||||
+ G_CALLBACK (g_subprocess_wait_cancelled),
|
|
||||||
+ task, G_CONNECT_DEFAULT);
|
|
||||||
|
|
||||||
subprocess->pending_waits = g_slist_prepend (subprocess->pending_waits, task);
|
|
||||||
task = NULL;
|
|
||||||
diff --git a/gio/gtask.c b/gio/gtask.c
|
|
||||||
index d0f8b4e33a..774cba793a 100644
|
|
||||||
--- a/gio/gtask.c
|
|
||||||
+++ b/gio/gtask.c
|
|
||||||
@@ -1530,7 +1530,8 @@ g_task_start_task_thread (GTask *task,
|
|
||||||
g_signal_connect_data (task->cancellable, "cancelled",
|
|
||||||
G_CALLBACK (task_thread_cancelled),
|
|
||||||
g_object_ref (task),
|
|
||||||
- task_thread_cancelled_disconnect_notify, 0);
|
|
||||||
+ task_thread_cancelled_disconnect_notify,
|
|
||||||
+ G_CONNECT_DEFAULT);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g_private_get (&task_private))
|
|
||||||
diff --git a/gobject/gobject.c b/gobject/gobject.c
|
|
||||||
index df908984b7..5ba8fd017b 100644
|
|
||||||
--- a/gobject/gobject.c
|
|
||||||
+++ b/gobject/gobject.c
|
|
||||||
@@ -3093,8 +3093,8 @@ g_object_get_property (GObject *object,
|
|
||||||
*
|
|
||||||
* The signal specs expected by this function have the form
|
|
||||||
* "modifier::signal_name", where modifier can be one of the following:
|
|
||||||
- * - signal: equivalent to g_signal_connect_data (..., NULL, 0)
|
|
||||||
- * - object-signal, object_signal: equivalent to g_signal_connect_object (..., 0)
|
|
||||||
+ * - signal: equivalent to g_signal_connect_data (..., NULL, G_CONNECT_DEFAULT)
|
|
||||||
+ * - object-signal, object_signal: equivalent to g_signal_connect_object (..., G_CONNECT_DEFAULT)
|
|
||||||
* - swapped-signal, swapped_signal: equivalent to g_signal_connect_data (..., NULL, G_CONNECT_SWAPPED)
|
|
||||||
* - swapped_object_signal, swapped-object-signal: equivalent to g_signal_connect_object (..., G_CONNECT_SWAPPED)
|
|
||||||
* - signal_after, signal-after: equivalent to g_signal_connect_data (..., NULL, G_CONNECT_AFTER)
|
|
||||||
@@ -3135,12 +3135,12 @@ g_object_connect (gpointer _object,
|
|
||||||
if (strncmp (signal_spec, "signal::", 8) == 0)
|
|
||||||
g_signal_connect_data (object, signal_spec + 8,
|
|
||||||
callback, data, NULL,
|
|
||||||
- 0);
|
|
||||||
+ G_CONNECT_DEFAULT);
|
|
||||||
else if (strncmp (signal_spec, "object_signal::", 15) == 0 ||
|
|
||||||
strncmp (signal_spec, "object-signal::", 15) == 0)
|
|
||||||
g_signal_connect_object (object, signal_spec + 15,
|
|
||||||
callback, data,
|
|
||||||
- 0);
|
|
||||||
+ G_CONNECT_DEFAULT);
|
|
||||||
else if (strncmp (signal_spec, "swapped_signal::", 16) == 0 ||
|
|
||||||
strncmp (signal_spec, "swapped-signal::", 16) == 0)
|
|
||||||
g_signal_connect_data (object, signal_spec + 16,
|
|
||||||
diff --git a/gobject/gsignal.h b/gobject/gsignal.h
|
|
||||||
index 7b3974a8c4..53da2a6eab 100644
|
|
||||||
--- a/gobject/gsignal.h
|
|
||||||
+++ b/gobject/gsignal.h
|
|
||||||
@@ -155,9 +155,11 @@ typedef enum
|
|
||||||
#define G_SIGNAL_FLAGS_MASK 0x1ff
|
|
||||||
/**
|
|
||||||
* GConnectFlags:
|
|
||||||
- * @G_CONNECT_AFTER: whether the handler should be called before or after the
|
|
||||||
- * default handler of the signal.
|
|
||||||
- * @G_CONNECT_SWAPPED: whether the instance and data should be swapped when
|
|
||||||
+ * @G_CONNECT_DEFAULT: Default behaviour (no special flags). Since: 2.74
|
|
||||||
+ * @G_CONNECT_AFTER: If set, the handler should be called after the
|
|
||||||
+ * default handler of the signal. Normally, the handler is called before
|
|
||||||
+ * the default handler.
|
|
||||||
+ * @G_CONNECT_SWAPPED: If set, the instance and data should be swapped when
|
|
||||||
* calling the handler; see g_signal_connect_swapped() for an example.
|
|
||||||
*
|
|
||||||
* The connection flags are used to specify the behaviour of a signal's
|
|
||||||
@@ -165,6 +167,7 @@ typedef enum
|
|
||||||
*/
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
+ G_CONNECT_DEFAULT GLIB_AVAILABLE_ENUMERATOR_IN_2_74 = 0,
|
|
||||||
G_CONNECT_AFTER = 1 << 0,
|
|
||||||
G_CONNECT_SWAPPED = 1 << 1
|
|
||||||
} GConnectFlags;
|
|
||||||
@@ -504,6 +507,8 @@ void g_signal_chain_from_overridden_handler (gpointer instance,
|
|
||||||
*
|
|
||||||
* Returns: the handler ID, of type #gulong (always greater than 0 for successful connections)
|
|
||||||
*/
|
|
||||||
+/* Intentionally not using G_CONNECT_DEFAULT here to avoid deprecation
|
|
||||||
+ * warnings with older GLIB_VERSION_MAX_ALLOWED */
|
|
||||||
#define g_signal_connect(instance, detailed_signal, c_handler, data) \
|
|
||||||
g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
|
|
||||||
/**
|
|
||||||
diff --git a/gobject/tests/signals.c b/gobject/tests/signals.c
|
|
||||||
index ea9a778bf8..e4be41575f 100644
|
|
||||||
--- a/gobject/tests/signals.c
|
|
||||||
+++ b/gobject/tests/signals.c
|
|
||||||
@@ -1109,8 +1109,10 @@ test_destroy_target_object (void)
|
|
||||||
sender = g_object_new (test_get_type (), NULL);
|
|
||||||
target1 = g_object_new (test_get_type (), NULL);
|
|
||||||
target2 = g_object_new (test_get_type (), NULL);
|
|
||||||
- g_signal_connect_object (sender, "simple", G_CALLBACK (simple_handler1), target1, 0);
|
|
||||||
- g_signal_connect_object (sender, "simple", G_CALLBACK (simple_handler2), target2, 0);
|
|
||||||
+ g_signal_connect_object (sender, "simple", G_CALLBACK (simple_handler1),
|
|
||||||
+ target1, G_CONNECT_DEFAULT);
|
|
||||||
+ g_signal_connect_object (sender, "simple", G_CALLBACK (simple_handler2),
|
|
||||||
+ target2, G_CONNECT_DEFAULT);
|
|
||||||
g_signal_emit_by_name (sender, "simple");
|
|
||||||
g_object_unref (sender);
|
|
||||||
}
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,117 +0,0 @@
|
|||||||
From 56d371942e43c52bc6131067e2dc2a35f6cd5a3d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Philip Withnall <pwithnall@endlessos.org>
|
|
||||||
Date: Mon, 13 Jun 2022 13:06:06 +0100
|
|
||||||
Subject: [PATCH] gsocketclient: Fix still-reachable references to cancellables
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
`GSocketClient` chains its internal `GCancellable` objects to ones
|
|
||||||
provided by the caller in two places using `g_cancellable_connect()`.
|
|
||||||
However, it never calls `g_cancellable_disconnect()`, instead relying
|
|
||||||
(incorrectly) on the `GCancellable` provided by the caller being
|
|
||||||
short-lived.
|
|
||||||
|
|
||||||
In the (valid) situation where a caller reuses one `GCancellable` for
|
|
||||||
multiple socket client calls, or for calls across multiple socket
|
|
||||||
clients, this will cause the internal `GCancellable` objects from those
|
|
||||||
`GSocketClient`s to accumulate, with one reference left each (which is
|
|
||||||
the reference from the `g_cancellable_connect()` closure).
|
|
||||||
|
|
||||||
These `GCancellable` instances aren't technically leaked, as they will
|
|
||||||
all be freed when the caller's `GCancellable` is disposed, but they are
|
|
||||||
no longer useful and there is no bound on the number of them which will
|
|
||||||
hang around.
|
|
||||||
|
|
||||||
For a program doing a lot of socket operations, this still-reachable
|
|
||||||
memory usage can become significant.
|
|
||||||
|
|
||||||
Fix the problem by adding paired `g_cancellable_disconnect()` calls.
|
|
||||||
It's not possible to add a unit test as we can't measure still-reachable
|
|
||||||
memory growth before the end of a unit test when everything has to be
|
|
||||||
freed.
|
|
||||||
|
|
||||||
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
|
|
||||||
|
|
||||||
Fixes: #2670
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/56d371942e43c52bc6131067e2dc2a35f6cd5a3d
|
|
||||||
|
|
||||||
---
|
|
||||||
gio/gsocketclient.c | 23 +++++++++++++++++++----
|
|
||||||
1 file changed, 19 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gio/gsocketclient.c b/gio/gsocketclient.c
|
|
||||||
index ae80f5203c..127915b722 100644
|
|
||||||
--- a/gio/gsocketclient.c
|
|
||||||
+++ b/gio/gsocketclient.c
|
|
||||||
@@ -1466,6 +1466,8 @@ typedef struct
|
|
||||||
GSocketConnectable *connectable;
|
|
||||||
GSocketAddressEnumerator *enumerator;
|
|
||||||
GCancellable *enumeration_cancellable;
|
|
||||||
+ GCancellable *enumeration_parent_cancellable; /* (nullable) (owned) */
|
|
||||||
+ gulong enumeration_cancelled_id;
|
|
||||||
|
|
||||||
GSList *connection_attempts;
|
|
||||||
GSList *successful_connections;
|
|
||||||
@@ -1485,7 +1487,12 @@ g_socket_client_async_connect_data_free (GSocketClientAsyncConnectData *data)
|
|
||||||
data->task = NULL;
|
|
||||||
g_clear_object (&data->connectable);
|
|
||||||
g_clear_object (&data->enumerator);
|
|
||||||
+
|
|
||||||
+ g_cancellable_disconnect (data->enumeration_parent_cancellable, data->enumeration_cancelled_id);
|
|
||||||
+ g_clear_object (&data->enumeration_parent_cancellable);
|
|
||||||
+ data->enumeration_cancelled_id = 0;
|
|
||||||
g_clear_object (&data->enumeration_cancellable);
|
|
||||||
+
|
|
||||||
g_slist_free_full (data->connection_attempts, connection_attempt_unref);
|
|
||||||
g_slist_free_full (data->successful_connections, connection_attempt_unref);
|
|
||||||
|
|
||||||
@@ -1503,6 +1510,7 @@ typedef struct
|
|
||||||
GSocketClientAsyncConnectData *data; /* unowned */
|
|
||||||
GSource *timeout_source;
|
|
||||||
GCancellable *cancellable;
|
|
||||||
+ gulong cancelled_id;
|
|
||||||
grefcount ref;
|
|
||||||
} ConnectionAttempt;
|
|
||||||
|
|
||||||
@@ -1530,6 +1538,8 @@ connection_attempt_unref (gpointer pointer)
|
|
||||||
g_clear_object (&attempt->address);
|
|
||||||
g_clear_object (&attempt->socket);
|
|
||||||
g_clear_object (&attempt->connection);
|
|
||||||
+ g_cancellable_disconnect (g_task_get_cancellable (attempt->data->task), attempt->cancelled_id);
|
|
||||||
+ attempt->cancelled_id = 0;
|
|
||||||
g_clear_object (&attempt->cancellable);
|
|
||||||
g_clear_object (&attempt->proxy_addr);
|
|
||||||
if (attempt->timeout_source)
|
|
||||||
@@ -2023,8 +2033,9 @@ g_socket_client_enumerator_callback (GObject *object,
|
|
||||||
data->connection_attempts = g_slist_append (data->connection_attempts, attempt);
|
|
||||||
|
|
||||||
if (g_task_get_cancellable (data->task))
|
|
||||||
- g_cancellable_connect (g_task_get_cancellable (data->task), G_CALLBACK (on_connection_cancelled),
|
|
||||||
- g_object_ref (attempt->cancellable), g_object_unref);
|
|
||||||
+ attempt->cancelled_id =
|
|
||||||
+ g_cancellable_connect (g_task_get_cancellable (data->task), G_CALLBACK (on_connection_cancelled),
|
|
||||||
+ g_object_ref (attempt->cancellable), g_object_unref);
|
|
||||||
|
|
||||||
g_socket_connection_set_cached_remote_address ((GSocketConnection *)attempt->connection, address);
|
|
||||||
g_debug ("GSocketClient: Starting TCP connection attempt");
|
|
||||||
@@ -2129,8 +2140,12 @@ g_socket_client_connect_async (GSocketClient *client,
|
|
||||||
|
|
||||||
data->enumeration_cancellable = g_cancellable_new ();
|
|
||||||
if (cancellable)
|
|
||||||
- g_cancellable_connect (cancellable, G_CALLBACK (on_connection_cancelled),
|
|
||||||
- g_object_ref (data->enumeration_cancellable), g_object_unref);
|
|
||||||
+ {
|
|
||||||
+ data->enumeration_parent_cancellable = g_object_ref (cancellable);
|
|
||||||
+ data->enumeration_cancelled_id =
|
|
||||||
+ g_cancellable_connect (cancellable, G_CALLBACK (on_connection_cancelled),
|
|
||||||
+ g_object_ref (data->enumeration_cancellable), g_object_unref);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
enumerator_next_async (data, FALSE);
|
|
||||||
}
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,64 +0,0 @@
|
|||||||
From 5e164c661537f6b6ef5adcf0fac949959ef9ffd5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon McVittie <smcv@collabora.com>
|
|
||||||
Date: Thu, 31 Mar 2022 13:58:36 +0100
|
|
||||||
Subject: [PATCH] gtype: Add G_TYPE_FLAG_NONE
|
|
||||||
|
|
||||||
This makes code that sets no flags a bit more self-documenting:
|
|
||||||
using G_TYPE_FLAG_NONE makes it clearer that no special behaviour is
|
|
||||||
required than literal 0, and clearer that there is no weird casting
|
|
||||||
between types than (GTypeFlags) 0.
|
|
||||||
|
|
||||||
GTypeFlags and GTypeFundamentalFlags occupy the same namespace and the
|
|
||||||
same bitfield, so I intentionally haven't added
|
|
||||||
G_TYPE_FUNDAMENTAL_FLAGS_NONE.
|
|
||||||
|
|
||||||
Signed-off-by: Simon McVittie <smcv@collabora.com>
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/5e164c661537f6b6ef5adcf0fac949959ef9ffd5
|
|
||||||
|
|
||||||
---
|
|
||||||
gobject/gtype.h | 6 ++++++
|
|
||||||
1 file changed, 6 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/gobject/gtype.h b/gobject/gtype.h
|
|
||||||
index 66cac1fc58..73d665626b 100644
|
|
||||||
--- a/gobject/gtype.h
|
|
||||||
+++ b/gobject/gtype.h
|
|
||||||
@@ -1030,6 +1030,8 @@ typedef void (*GTypeInterfaceCheckFunc) (gpointer check_data,
|
|
||||||
*/
|
|
||||||
typedef enum /*< skip >*/
|
|
||||||
{
|
|
||||||
+ /* There is no G_TYPE_FUNDAMENTAL_FLAGS_NONE: this is implemented to use
|
|
||||||
+ * the same bits as GTypeFlags */
|
|
||||||
G_TYPE_FLAG_CLASSED = (1 << 0),
|
|
||||||
G_TYPE_FLAG_INSTANTIATABLE = (1 << 1),
|
|
||||||
G_TYPE_FLAG_DERIVABLE = (1 << 2),
|
|
||||||
@@ -1037,6 +1039,7 @@ typedef enum /*< skip >*/
|
|
||||||
} GTypeFundamentalFlags;
|
|
||||||
/**
|
|
||||||
* GTypeFlags:
|
|
||||||
+ * @G_TYPE_FLAG_NONE: No special flags. Since: 2.74
|
|
||||||
* @G_TYPE_FLAG_ABSTRACT: Indicates an abstract type. No instances can be
|
|
||||||
* created for an abstract type
|
|
||||||
* @G_TYPE_FLAG_VALUE_ABSTRACT: Indicates an abstract value type, i.e. a type
|
|
||||||
@@ -1049,6 +1052,7 @@ typedef enum /*< skip >*/
|
|
||||||
*/
|
|
||||||
typedef enum /*< skip >*/
|
|
||||||
{
|
|
||||||
+ G_TYPE_FLAG_NONE GLIB_AVAILABLE_ENUMERATOR_IN_2_74 = 0,
|
|
||||||
G_TYPE_FLAG_ABSTRACT = (1 << 4),
|
|
||||||
G_TYPE_FLAG_VALUE_ABSTRACT = (1 << 5),
|
|
||||||
G_TYPE_FLAG_FINAL GLIB_AVAILABLE_ENUMERATOR_IN_2_70 = (1 << 6)
|
|
||||||
@@ -2180,6 +2184,8 @@ type_name##_get_type_once (void) \
|
|
||||||
_G_DEFINE_TYPE_EXTENDED_BEGIN_PRE(TypeName, type_name, TYPE_PARENT) \
|
|
||||||
_G_DEFINE_TYPE_EXTENDED_BEGIN_REGISTER(TypeName, type_name, TYPE_PARENT, flags) \
|
|
||||||
|
|
||||||
+/* Intentionally using (GTypeFlags) 0 instead of G_TYPE_FLAG_NONE here,
|
|
||||||
+ * to avoid deprecation warnings with older GLIB_VERSION_MAX_ALLOWED */
|
|
||||||
#define _G_DEFINE_INTERFACE_EXTENDED_BEGIN(TypeName, type_name, TYPE_PREREQ) \
|
|
||||||
\
|
|
||||||
static void type_name##_default_init (TypeName##Interface *klass); \
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,25 +0,0 @@
|
|||||||
From d4966911e6b35d8923bc6cd58e7cb8a1b0e09d4a Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Tue, 6 Sep 2022 21:44:12 +0200
|
|
||||||
Subject: [PATCH] tests/regex: Actually check for match options changes
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/tests/regex.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/glib/tests/regex.c b/glib/tests/regex.c
|
|
||||||
index 567b6e2202..abf27e619e 100644
|
|
||||||
--- a/glib/tests/regex.c
|
|
||||||
+++ b/glib/tests/regex.c
|
|
||||||
@@ -105,7 +105,7 @@ test_new (gconstpointer d)
|
|
||||||
data = g_new0 (TestNewData, 1); \
|
|
||||||
data->pattern = _pattern; \
|
|
||||||
data->compile_opts = _compile_opts; \
|
|
||||||
- data->match_opts = 0; \
|
|
||||||
+ data->match_opts = _match_opts; \
|
|
||||||
data->expected_error = 0; \
|
|
||||||
data->check_flags = TRUE; \
|
|
||||||
data->real_compile_opts = _real_compile_opts; \
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,193 +0,0 @@
|
|||||||
From 23c1b401d8c78c2c66d55b94d7d833210d518853 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Tue, 6 Sep 2022 14:21:27 +0200
|
|
||||||
Subject: [PATCH] tests/regex: Add debug strings for compile and match option
|
|
||||||
flags
|
|
||||||
|
|
||||||
In case of failures they give a better info.
|
|
||||||
---
|
|
||||||
glib/tests/regex.c | 132 +++++++++++++++++++++++++++++++++++++++++----
|
|
||||||
1 file changed, 122 insertions(+), 10 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/tests/regex.c b/glib/tests/regex.c
|
|
||||||
index acb082b704..567b6e2202 100644
|
|
||||||
--- a/glib/tests/regex.c
|
|
||||||
+++ b/glib/tests/regex.c
|
|
||||||
@@ -184,6 +184,108 @@ test_match_simple (gconstpointer d)
|
|
||||||
#define TEST_MATCH_NOTEMPTY_ATSTART(_pattern, _string, _expected) \
|
|
||||||
TEST_MATCH_SIMPLE_NAMED("notempty-atstart", _pattern, _string, 0, G_REGEX_MATCH_NOTEMPTY_ATSTART, _expected)
|
|
||||||
|
|
||||||
+static char *
|
|
||||||
+compile_options_to_string (GRegexCompileFlags compile_flags)
|
|
||||||
+{
|
|
||||||
+ GStrvBuilder *builder = g_strv_builder_new();
|
|
||||||
+ GStrv strv;
|
|
||||||
+ char *ret;
|
|
||||||
+
|
|
||||||
+ if (compile_flags & G_REGEX_DEFAULT)
|
|
||||||
+ g_strv_builder_add (builder, "default");
|
|
||||||
+ if (compile_flags & G_REGEX_CASELESS)
|
|
||||||
+ g_strv_builder_add (builder, "caseless");
|
|
||||||
+ if (compile_flags & G_REGEX_MULTILINE)
|
|
||||||
+ g_strv_builder_add (builder, "multiline");
|
|
||||||
+ if (compile_flags & G_REGEX_DOTALL)
|
|
||||||
+ g_strv_builder_add (builder, "dotall");
|
|
||||||
+ if (compile_flags & G_REGEX_EXTENDED)
|
|
||||||
+ g_strv_builder_add (builder, "extended");
|
|
||||||
+ if (compile_flags & G_REGEX_ANCHORED)
|
|
||||||
+ g_strv_builder_add (builder, "anchored");
|
|
||||||
+ if (compile_flags & G_REGEX_DOLLAR_ENDONLY)
|
|
||||||
+ g_strv_builder_add (builder, "dollar-endonly");
|
|
||||||
+ if (compile_flags & G_REGEX_UNGREEDY)
|
|
||||||
+ g_strv_builder_add (builder, "ungreedy");
|
|
||||||
+ if (compile_flags & G_REGEX_RAW)
|
|
||||||
+ g_strv_builder_add (builder, "raw");
|
|
||||||
+ if (compile_flags & G_REGEX_NO_AUTO_CAPTURE)
|
|
||||||
+ g_strv_builder_add (builder, "no-auto-capture");
|
|
||||||
+ if (compile_flags & G_REGEX_OPTIMIZE)
|
|
||||||
+ g_strv_builder_add (builder, "optimize");
|
|
||||||
+ if (compile_flags & G_REGEX_FIRSTLINE)
|
|
||||||
+ g_strv_builder_add (builder, "firstline");
|
|
||||||
+ if (compile_flags & G_REGEX_DUPNAMES)
|
|
||||||
+ g_strv_builder_add (builder, "dupnames");
|
|
||||||
+ if (compile_flags & G_REGEX_NEWLINE_CR)
|
|
||||||
+ g_strv_builder_add (builder, "newline-cr");
|
|
||||||
+ if (compile_flags & G_REGEX_NEWLINE_LF)
|
|
||||||
+ g_strv_builder_add (builder, "newline-lf");
|
|
||||||
+ if (compile_flags & G_REGEX_NEWLINE_CRLF)
|
|
||||||
+ g_strv_builder_add (builder, "newline-crlf");
|
|
||||||
+ if (compile_flags & G_REGEX_NEWLINE_ANYCRLF)
|
|
||||||
+ g_strv_builder_add (builder, "newline-anycrlf");
|
|
||||||
+ if (compile_flags & G_REGEX_BSR_ANYCRLF)
|
|
||||||
+ g_strv_builder_add (builder, "bsr-anycrlf");
|
|
||||||
+
|
|
||||||
+ strv = g_strv_builder_end (builder);
|
|
||||||
+ ret = g_strjoinv ("|", strv);
|
|
||||||
+
|
|
||||||
+ g_strfreev (strv);
|
|
||||||
+ g_strv_builder_unref (builder);
|
|
||||||
+
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static char *
|
|
||||||
+match_options_to_string (GRegexMatchFlags match_flags)
|
|
||||||
+{
|
|
||||||
+ GStrvBuilder *builder = g_strv_builder_new();
|
|
||||||
+ GStrv strv;
|
|
||||||
+ char *ret;
|
|
||||||
+
|
|
||||||
+ if (match_flags & G_REGEX_MATCH_DEFAULT)
|
|
||||||
+ g_strv_builder_add (builder, "default");
|
|
||||||
+ if (match_flags & G_REGEX_MATCH_ANCHORED)
|
|
||||||
+ g_strv_builder_add (builder, "anchored");
|
|
||||||
+ if (match_flags & G_REGEX_MATCH_NOTBOL)
|
|
||||||
+ g_strv_builder_add (builder, "notbol");
|
|
||||||
+ if (match_flags & G_REGEX_MATCH_NOTEOL)
|
|
||||||
+ g_strv_builder_add (builder, "noteol");
|
|
||||||
+ if (match_flags & G_REGEX_MATCH_NOTEMPTY)
|
|
||||||
+ g_strv_builder_add (builder, "notempty");
|
|
||||||
+ if (match_flags & G_REGEX_MATCH_PARTIAL)
|
|
||||||
+ g_strv_builder_add (builder, "partial");
|
|
||||||
+ if (match_flags & G_REGEX_MATCH_NEWLINE_CR)
|
|
||||||
+ g_strv_builder_add (builder, "newline-cr");
|
|
||||||
+ if (match_flags & G_REGEX_MATCH_NEWLINE_LF)
|
|
||||||
+ g_strv_builder_add (builder, "newline-lf");
|
|
||||||
+ if (match_flags & G_REGEX_MATCH_NEWLINE_CRLF)
|
|
||||||
+ g_strv_builder_add (builder, "newline-crlf");
|
|
||||||
+ if (match_flags & G_REGEX_MATCH_NEWLINE_ANY)
|
|
||||||
+ g_strv_builder_add (builder, "newline-any");
|
|
||||||
+ if (match_flags & G_REGEX_MATCH_NEWLINE_ANYCRLF)
|
|
||||||
+ g_strv_builder_add (builder, "newline-anycrlf");
|
|
||||||
+ if (match_flags & G_REGEX_MATCH_BSR_ANYCRLF)
|
|
||||||
+ g_strv_builder_add (builder, "bsr-anycrlf");
|
|
||||||
+ if (match_flags & G_REGEX_MATCH_BSR_ANY)
|
|
||||||
+ g_strv_builder_add (builder, "bsr-any");
|
|
||||||
+ if (match_flags & G_REGEX_MATCH_PARTIAL_SOFT)
|
|
||||||
+ g_strv_builder_add (builder, "partial-soft");
|
|
||||||
+ if (match_flags & G_REGEX_MATCH_PARTIAL_HARD)
|
|
||||||
+ g_strv_builder_add (builder, "partial-hard");
|
|
||||||
+ if (match_flags & G_REGEX_MATCH_NOTEMPTY_ATSTART)
|
|
||||||
+ g_strv_builder_add (builder, "notempty-atstart");
|
|
||||||
+
|
|
||||||
+ strv = g_strv_builder_end (builder);
|
|
||||||
+ ret = g_strjoinv ("|", strv);
|
|
||||||
+
|
|
||||||
+ g_strfreev (strv);
|
|
||||||
+ g_strv_builder_unref (builder);
|
|
||||||
+
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
test_match (gconstpointer d)
|
|
||||||
{
|
|
||||||
@@ -191,6 +293,9 @@ test_match (gconstpointer d)
|
|
||||||
GRegex *regex;
|
|
||||||
gboolean match;
|
|
||||||
GError *error = NULL;
|
|
||||||
+ gchar *compile_opts_str;
|
|
||||||
+ gchar *match_opts_str;
|
|
||||||
+ gchar *match_opts2_str;
|
|
||||||
|
|
||||||
regex = g_regex_new (data->pattern, data->compile_opts, data->match_opts, &error);
|
|
||||||
g_assert (regex != NULL);
|
|
||||||
@@ -199,31 +304,35 @@ test_match (gconstpointer d)
|
|
||||||
match = g_regex_match_full (regex, data->string, data->string_len,
|
|
||||||
data->start_position, data->match_opts2, NULL, NULL);
|
|
||||||
|
|
||||||
+ compile_opts_str = compile_options_to_string (data->compile_opts);
|
|
||||||
+ match_opts_str = match_options_to_string (data->match_opts);
|
|
||||||
+ match_opts2_str = match_options_to_string (data->match_opts2);
|
|
||||||
+
|
|
||||||
if (data->expected)
|
|
||||||
{
|
|
||||||
if (!match)
|
|
||||||
- g_error ("Regex '%s' (with compile options %u and "
|
|
||||||
- "match options %u) should have matched '%.*s' "
|
|
||||||
- "(of length %d, at position %d, with match options %u) but did not",
|
|
||||||
- data->pattern, data->compile_opts, data->match_opts,
|
|
||||||
+ g_error ("Regex '%s' (with compile options '%s' and "
|
|
||||||
+ "match options '%s') should have matched '%.*s' "
|
|
||||||
+ "(of length %d, at position %d, with match options '%s') but did not",
|
|
||||||
+ data->pattern, compile_opts_str, match_opts_str,
|
|
||||||
data->string_len == -1 ? (int) strlen (data->string) :
|
|
||||||
(int) data->string_len,
|
|
||||||
data->string, (int) data->string_len,
|
|
||||||
- data->start_position, data->match_opts2);
|
|
||||||
+ data->start_position, match_opts2_str);
|
|
||||||
|
|
||||||
g_assert_cmpint (match, ==, TRUE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (match)
|
|
||||||
- g_error ("Regex '%s' (with compile options %u and "
|
|
||||||
- "match options %u) should not have matched '%.*s' "
|
|
||||||
- "(of length %d, at position %d, with match options %u) but did",
|
|
||||||
- data->pattern, data->compile_opts, data->match_opts,
|
|
||||||
+ g_error ("Regex '%s' (with compile options '%s' and "
|
|
||||||
+ "match options '%s') should not have matched '%.*s' "
|
|
||||||
+ "(of length %d, at position %d, with match options '%s') but did",
|
|
||||||
+ data->pattern, compile_opts_str, match_opts_str,
|
|
||||||
data->string_len == -1 ? (int) strlen (data->string) :
|
|
||||||
(int) data->string_len,
|
|
||||||
data->string, (int) data->string_len,
|
|
||||||
- data->start_position, data->match_opts2);
|
|
||||||
+ data->start_position, match_opts2_str);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data->string_len == -1 && data->start_position == 0)
|
|
||||||
@@ -232,6 +341,9 @@ test_match (gconstpointer d)
|
|
||||||
g_assert_cmpint (match, ==, data->expected);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ g_free (compile_opts_str);
|
|
||||||
+ g_free (match_opts_str);
|
|
||||||
+ g_free (match_opts2_str);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
From df66951b96fdb800c0b6bd11292bb23fbcd6ed85 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Aleksei Rybalkin <aleksei@rybalkin.org>
|
|
||||||
Date: Thu, 1 Sep 2022 18:19:11 +0200
|
|
||||||
Subject: [PATCH] tests/regex: Add test for gtksourceview regression
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/tests/regex.c | 10 ++++++++++
|
|
||||||
1 file changed, 10 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/glib/tests/regex.c b/glib/tests/regex.c
|
|
||||||
index ce946d0592..10daa7814a 100644
|
|
||||||
--- a/glib/tests/regex.c
|
|
||||||
+++ b/glib/tests/regex.c
|
|
||||||
@@ -2434,6 +2434,16 @@ main (int argc, char *argv[])
|
|
||||||
TEST_NEW_FAIL ("\\k", 0, G_REGEX_ERROR_MISSING_NAME);
|
|
||||||
TEST_NEW_FAIL ("a[\\NB]c", 0, G_REGEX_ERROR_NOT_SUPPORTED_IN_CLASS);
|
|
||||||
TEST_NEW_FAIL ("(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEFG)XX", 0, G_REGEX_ERROR_NAME_TOO_LONG);
|
|
||||||
+ /* See https://gitlab.gnome.org/GNOME/gtksourceview/-/issues/278 */
|
|
||||||
+ TEST_NEW_FAIL ("(?i-x)((?:(?i-x)[^\\x00\\t\\n\\f\\r \"'/<=>\\x{007F}-\\x{009F}" \
|
|
||||||
+ "\\x{FDD0}-\\x{FDEF}\\x{FFFE}\\x{FFFF}\\x{1FFFE}\\x{1FFFF}" \
|
|
||||||
+ "\\x{2FFFE}\\x{2FFFF}\\x{3FFFE}\\x{3FFFF}\\x{4FFFE}\\x{4FFFF}" \
|
|
||||||
+ "\\x{5FFFE}\\x{5FFFF}\\x{6FFFE}\\x{6FFFF}\\x{7FFFE}\\x{7FFFF}" \
|
|
||||||
+ "\\x{8FFFE}\\x{8FFFF}\\x{9FFFE}\\x{9FFFF}\\x{AFFFE}\\x{AFFFF}" \
|
|
||||||
+ "\\x{BFFFE}\\x{BFFFF}\\x{CFFFE}\\x{CFFFF}\\x{DFFFE}\\x{DFFFF}" \
|
|
||||||
+ "\\x{EFFFE}\\x{EFFFF}\\x{FFFFE}\\x{FFFFF}\\x{10FFFE}\\x{10FFFF}]+)" \
|
|
||||||
+ "\\s*=\\s*)(\\\")",
|
|
||||||
+ G_REGEX_RAW, G_REGEX_ERROR_HEX_CODE_TOO_LARGE);
|
|
||||||
|
|
||||||
/* These errors can't really be tested easily:
|
|
||||||
* G_REGEX_ERROR_EXPRESSION_TOO_LARGE
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,38 +0,0 @@
|
|||||||
From fe1c2628d52ca67ffe59420a0b4d371893795e62 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Tue, 6 Sep 2022 19:19:03 +0200
|
|
||||||
Subject: [PATCH] regex: Avoid allocating offsets until we've a match
|
|
||||||
|
|
||||||
There's no much point of pre-allocating offsets given that we're doing
|
|
||||||
this when needed if only have matches to store.
|
|
||||||
|
|
||||||
So let's just allocate the spaces for the dummy offset we depend on,
|
|
||||||
while allocate the others on demand.
|
|
||||||
---
|
|
||||||
glib/gregex.c | 6 +-----
|
|
||||||
1 file changed, 1 insertion(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index 8a3be9076b..7d403ad53d 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -806,15 +806,11 @@ match_info_new (const GRegex *regex,
|
|
||||||
{
|
|
||||||
/* These values should be enough for most cases, if they are not
|
|
||||||
* enough g_regex_match_all_full() will expand them. */
|
|
||||||
- match_info->n_offsets = 24;
|
|
||||||
match_info->n_workspace = 100;
|
|
||||||
match_info->workspace = g_new (gint, match_info->n_workspace);
|
|
||||||
}
|
|
||||||
- else
|
|
||||||
- {
|
|
||||||
- match_info->n_offsets = (match_info->n_subpatterns + 1) * 3;
|
|
||||||
- }
|
|
||||||
|
|
||||||
+ match_info->n_offsets = 2;
|
|
||||||
match_info->offsets = g_new0 (gint, match_info->n_offsets);
|
|
||||||
/* Set an invalid position for the previous match. */
|
|
||||||
match_info->offsets[0] = -1;
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,59 +0,0 @@
|
|||||||
From e8628a7ed59e54b5a5e498de0375f101a4e76e64 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Tue, 6 Sep 2022 19:05:24 +0200
|
|
||||||
Subject: [PATCH] regex: Compute the offsets size based on match results
|
|
||||||
|
|
||||||
While the ovector count would include all the allocated space, we only
|
|
||||||
care about the actual match values, so avoid wasting allocations and
|
|
||||||
just use the ones we need to hold the offsets.
|
|
||||||
---
|
|
||||||
glib/gregex.c | 16 +++++++++++++---
|
|
||||||
1 file changed, 13 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index cf86f0fe0d..8a3be9076b 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -832,10 +832,20 @@ recalc_match_offsets (GMatchInfo *match_info,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
PCRE2_SIZE *ovector;
|
|
||||||
+ uint32_t ovector_size = 0;
|
|
||||||
uint32_t pre_n_offset;
|
|
||||||
uint32_t i;
|
|
||||||
|
|
||||||
- if (pcre2_get_ovector_count (match_info->match_data) > G_MAXUINT32 / 2)
|
|
||||||
+ g_assert (!IS_PCRE2_ERROR (match_info->matches));
|
|
||||||
+
|
|
||||||
+ if (match_info->matches == PCRE2_ERROR_PARTIAL)
|
|
||||||
+ ovector_size = 1;
|
|
||||||
+ else if (match_info->matches > 0)
|
|
||||||
+ ovector_size = match_info->matches;
|
|
||||||
+
|
|
||||||
+ g_assert (ovector_size != 0);
|
|
||||||
+
|
|
||||||
+ if (pcre2_get_ovector_count (match_info->match_data) < ovector_size)
|
|
||||||
{
|
|
||||||
g_set_error (error, G_REGEX_ERROR, G_REGEX_ERROR_MATCH,
|
|
||||||
_("Error while matching regular expression %s: %s"),
|
|
||||||
@@ -844,7 +854,7 @@ recalc_match_offsets (GMatchInfo *match_info,
|
|
||||||
}
|
|
||||||
|
|
||||||
pre_n_offset = match_info->n_offsets;
|
|
||||||
- match_info->n_offsets = pcre2_get_ovector_count (match_info->match_data) * 2;
|
|
||||||
+ match_info->n_offsets = ovector_size * 2;
|
|
||||||
ovector = pcre2_get_ovector_pointer (match_info->match_data);
|
|
||||||
|
|
||||||
if (match_info->n_offsets != pre_n_offset)
|
|
||||||
@@ -2387,7 +2397,7 @@ g_regex_match_all_full (const GRegex *regex,
|
|
||||||
_("Error while matching regular expression %s: %s"),
|
|
||||||
regex->pattern, match_error (info->matches));
|
|
||||||
}
|
|
||||||
- else if (info->matches > 0)
|
|
||||||
+ else if (info->matches != PCRE2_ERROR_NOMATCH)
|
|
||||||
{
|
|
||||||
if (!recalc_match_offsets (info, error))
|
|
||||||
info->matches = PCRE2_ERROR_NOMATCH;
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,241 +0,0 @@
|
|||||||
From bec68b2d74853de5e23ee40c890433fa336ffbc5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Fri, 9 Sep 2022 18:30:15 +0200
|
|
||||||
Subject: [PATCH] glib/regex: Do not use JIT when using unsupported match
|
|
||||||
options
|
|
||||||
|
|
||||||
Do not store jit status for regex unless during initial compilation.
|
|
||||||
After that, decide whether to use it depending on matching options.
|
|
||||||
|
|
||||||
In fact there are some matching options that are incompatible with JIT,
|
|
||||||
as the PCRE2 docs states:
|
|
||||||
|
|
||||||
Setting PCRE2_ANCHORED or PCRE2_ENDANCHORED at match time is not
|
|
||||||
supported by the just-in-time (JIT) compiler. If it is set, JIT
|
|
||||||
matching is disabled and the interpretive code in pcre2_match() is
|
|
||||||
run. Apart from PCRE2_NO_JIT (obviously), the remaining options are
|
|
||||||
supported for JIT matching.
|
|
||||||
|
|
||||||
Fixes: GNOME/gtksourceview#283
|
|
||||||
---
|
|
||||||
glib/gregex.c | 38 ++++++++++++++++---------
|
|
||||||
glib/tests/regex.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
2 files changed, 94 insertions(+), 13 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index fe7473e628..220a1a11ac 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -201,6 +201,13 @@
|
|
||||||
PCRE2_NEWLINE_CRLF | \
|
|
||||||
PCRE2_NEWLINE_ANYCRLF)
|
|
||||||
|
|
||||||
+/* Some match options are not supported when using JIT as stated in the
|
|
||||||
+ * pcre2jit man page under the 芦UNSUPPORTED OPTIONS AND PATTERN ITEMS禄 section:
|
|
||||||
+ * https://www.pcre.org/current/doc/html/pcre2jit.html#SEC5
|
|
||||||
+ */
|
|
||||||
+#define G_REGEX_PCRE2_JIT_UNSUPPORTED_OPTIONS (PCRE2_ANCHORED | \
|
|
||||||
+ PCRE2_ENDANCHORED)
|
|
||||||
+
|
|
||||||
#define G_REGEX_COMPILE_NEWLINE_MASK (G_REGEX_NEWLINE_CR | \
|
|
||||||
G_REGEX_NEWLINE_LF | \
|
|
||||||
G_REGEX_NEWLINE_CRLF | \
|
|
||||||
@@ -869,7 +876,7 @@ recalc_match_offsets (GMatchInfo *match_info,
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void
|
|
||||||
+static JITStatus
|
|
||||||
enable_jit_with_match_options (GRegex *regex,
|
|
||||||
uint32_t match_options)
|
|
||||||
{
|
|
||||||
@@ -877,9 +884,13 @@ enable_jit_with_match_options (GRegex *regex,
|
|
||||||
uint32_t old_jit_options, new_jit_options;
|
|
||||||
|
|
||||||
if (!(regex->orig_compile_opts & G_REGEX_OPTIMIZE))
|
|
||||||
- return;
|
|
||||||
+ return JIT_STATUS_DISABLED;
|
|
||||||
+
|
|
||||||
if (regex->jit_status == JIT_STATUS_DISABLED)
|
|
||||||
- return;
|
|
||||||
+ return JIT_STATUS_DISABLED;
|
|
||||||
+
|
|
||||||
+ if (match_options & G_REGEX_PCRE2_JIT_UNSUPPORTED_OPTIONS)
|
|
||||||
+ return JIT_STATUS_DISABLED;
|
|
||||||
|
|
||||||
old_jit_options = regex->jit_options;
|
|
||||||
new_jit_options = old_jit_options | PCRE2_JIT_COMPLETE;
|
|
||||||
@@ -890,34 +901,34 @@ enable_jit_with_match_options (GRegex *regex,
|
|
||||||
|
|
||||||
/* no new options enabled */
|
|
||||||
if (new_jit_options == old_jit_options)
|
|
||||||
- return;
|
|
||||||
+ return regex->jit_status;
|
|
||||||
|
|
||||||
retval = pcre2_jit_compile (regex->pcre_re, new_jit_options);
|
|
||||||
switch (retval)
|
|
||||||
{
|
|
||||||
case 0: /* JIT enabled successfully */
|
|
||||||
- regex->jit_status = JIT_STATUS_ENABLED;
|
|
||||||
regex->jit_options = new_jit_options;
|
|
||||||
- break;
|
|
||||||
+ return JIT_STATUS_ENABLED;
|
|
||||||
case PCRE2_ERROR_NOMEMORY:
|
|
||||||
g_debug ("JIT compilation was requested with G_REGEX_OPTIMIZE, "
|
|
||||||
"but JIT was unable to allocate executable memory for the "
|
|
||||||
"compiler. Falling back to interpretive code.");
|
|
||||||
- regex->jit_status = JIT_STATUS_DISABLED;
|
|
||||||
- break;
|
|
||||||
+ return JIT_STATUS_DISABLED;
|
|
||||||
case PCRE2_ERROR_JIT_BADOPTION:
|
|
||||||
g_debug ("JIT compilation was requested with G_REGEX_OPTIMIZE, "
|
|
||||||
"but JIT support is not available. Falling back to "
|
|
||||||
"interpretive code.");
|
|
||||||
- regex->jit_status = JIT_STATUS_DISABLED;
|
|
||||||
+ return JIT_STATUS_DISABLED;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
g_debug ("JIT compilation was requested with G_REGEX_OPTIMIZE, "
|
|
||||||
"but request for JIT support had unexpectedly failed (error %d). "
|
|
||||||
"Falling back to interpretive code.", retval);
|
|
||||||
- regex->jit_status = JIT_STATUS_DISABLED;
|
|
||||||
+ return JIT_STATUS_DISABLED;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ return regex->jit_status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@@ -1039,6 +1050,7 @@ gboolean
|
|
||||||
g_match_info_next (GMatchInfo *match_info,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
+ JITStatus jit_status;
|
|
||||||
gint prev_match_start;
|
|
||||||
gint prev_match_end;
|
|
||||||
uint32_t opts;
|
|
||||||
@@ -1060,8 +1072,8 @@ g_match_info_next (GMatchInfo *match_info,
|
|
||||||
|
|
||||||
opts = match_info->regex->match_opts | match_info->match_opts;
|
|
||||||
|
|
||||||
- enable_jit_with_match_options (match_info->regex, opts);
|
|
||||||
- if (match_info->regex->jit_status == JIT_STATUS_ENABLED)
|
|
||||||
+ jit_status = enable_jit_with_match_options (match_info->regex, opts);
|
|
||||||
+ if (jit_status == JIT_STATUS_ENABLED)
|
|
||||||
{
|
|
||||||
match_info->matches = pcre2_jit_match (match_info->regex->pcre_re,
|
|
||||||
(PCRE2_SPTR8) match_info->string,
|
|
||||||
@@ -1727,7 +1739,7 @@ g_regex_new (const gchar *pattern,
|
|
||||||
regex->orig_compile_opts = compile_options;
|
|
||||||
regex->match_opts = pcre_match_options;
|
|
||||||
regex->orig_match_opts = match_options;
|
|
||||||
- enable_jit_with_match_options (regex, regex->match_opts);
|
|
||||||
+ regex->jit_status = enable_jit_with_match_options (regex, regex->match_opts);
|
|
||||||
|
|
||||||
return regex;
|
|
||||||
}
|
|
||||||
diff --git a/glib/tests/regex.c b/glib/tests/regex.c
|
|
||||||
index 26844d63a7..2052ba0204 100644
|
|
||||||
--- a/glib/tests/regex.c
|
|
||||||
+++ b/glib/tests/regex.c
|
|
||||||
@@ -2334,6 +2334,67 @@ test_compile_errors (void)
|
|
||||||
g_clear_error (&error);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void
|
|
||||||
+test_jit_unsupported_matching_options (void)
|
|
||||||
+{
|
|
||||||
+ GRegex *regex;
|
|
||||||
+ GMatchInfo *info;
|
|
||||||
+ gchar *substring;
|
|
||||||
+
|
|
||||||
+ regex = g_regex_new ("(\\w+)#(\\w+)", G_REGEX_OPTIMIZE, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
+
|
|
||||||
+ g_assert_true (g_regex_match (regex, "aa#bb cc#dd", G_REGEX_MATCH_DEFAULT, &info));
|
|
||||||
+ g_assert_cmpint (g_match_info_get_match_count (info), ==, 3);
|
|
||||||
+ substring = g_match_info_fetch (info, 1);
|
|
||||||
+ g_assert_cmpstr (substring, ==, "aa");
|
|
||||||
+ g_clear_pointer (&substring, g_free);
|
|
||||||
+ substring = g_match_info_fetch (info, 2);
|
|
||||||
+ g_assert_cmpstr (substring, ==, "bb");
|
|
||||||
+ g_clear_pointer (&substring, g_free);
|
|
||||||
+ g_assert_true (g_match_info_next (info, NULL));
|
|
||||||
+ g_assert_cmpint (g_match_info_get_match_count (info), ==, 3);
|
|
||||||
+ substring = g_match_info_fetch (info, 1);
|
|
||||||
+ g_assert_cmpstr (substring, ==, "cc");
|
|
||||||
+ g_clear_pointer (&substring, g_free);
|
|
||||||
+ substring = g_match_info_fetch (info, 2);
|
|
||||||
+ g_assert_cmpstr (substring, ==, "dd");
|
|
||||||
+ g_clear_pointer (&substring, g_free);
|
|
||||||
+ g_assert_false (g_match_info_next (info, NULL));
|
|
||||||
+ g_match_info_free (info);
|
|
||||||
+
|
|
||||||
+ g_assert_true (g_regex_match (regex, "aa#bb cc#dd", G_REGEX_MATCH_ANCHORED, &info));
|
|
||||||
+ g_assert_cmpint (g_match_info_get_match_count (info), ==, 3);
|
|
||||||
+ substring = g_match_info_fetch (info, 1);
|
|
||||||
+ g_assert_cmpstr (substring, ==, "aa");
|
|
||||||
+ g_clear_pointer (&substring, g_free);
|
|
||||||
+ substring = g_match_info_fetch (info, 2);
|
|
||||||
+ g_assert_cmpstr (substring, ==, "bb");
|
|
||||||
+ g_clear_pointer (&substring, g_free);
|
|
||||||
+ g_assert_false (g_match_info_next (info, NULL));
|
|
||||||
+ g_match_info_free (info);
|
|
||||||
+
|
|
||||||
+ g_assert_true (g_regex_match (regex, "aa#bb cc#dd", G_REGEX_MATCH_DEFAULT, &info));
|
|
||||||
+ g_assert_cmpint (g_match_info_get_match_count (info), ==, 3);
|
|
||||||
+ substring = g_match_info_fetch (info, 1);
|
|
||||||
+ g_assert_cmpstr (substring, ==, "aa");
|
|
||||||
+ g_clear_pointer (&substring, g_free);
|
|
||||||
+ substring = g_match_info_fetch (info, 2);
|
|
||||||
+ g_assert_cmpstr (substring, ==, "bb");
|
|
||||||
+ g_clear_pointer (&substring, g_free);
|
|
||||||
+ g_assert_true (g_match_info_next (info, NULL));
|
|
||||||
+ g_assert_cmpint (g_match_info_get_match_count (info), ==, 3);
|
|
||||||
+ substring = g_match_info_fetch (info, 1);
|
|
||||||
+ g_assert_cmpstr (substring, ==, "cc");
|
|
||||||
+ g_clear_pointer (&substring, g_free);
|
|
||||||
+ substring = g_match_info_fetch (info, 2);
|
|
||||||
+ g_assert_cmpstr (substring, ==, "dd");
|
|
||||||
+ g_clear_pointer (&substring, g_free);
|
|
||||||
+ g_assert_false (g_match_info_next (info, NULL));
|
|
||||||
+ g_match_info_free (info);
|
|
||||||
+
|
|
||||||
+ g_regex_unref (regex);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int
|
|
||||||
main (int argc, char *argv[])
|
|
||||||
{
|
|
||||||
@@ -2352,6 +2413,7 @@ main (int argc, char *argv[])
|
|
||||||
g_test_add_func ("/regex/explicit-crlf", test_explicit_crlf);
|
|
||||||
g_test_add_func ("/regex/max-lookbehind", test_max_lookbehind);
|
|
||||||
g_test_add_func ("/regex/compile-errors", test_compile_errors);
|
|
||||||
+ g_test_add_func ("/regex/jit-unsupported-matching", test_jit_unsupported_matching_options);
|
|
||||||
|
|
||||||
/* TEST_NEW(pattern, compile_opts, match_opts) */
|
|
||||||
TEST_NEW("[A-Z]+", G_REGEX_CASELESS | G_REGEX_EXTENDED | G_REGEX_OPTIMIZE, G_REGEX_MATCH_NOTBOL | G_REGEX_MATCH_PARTIAL);
|
|
||||||
@@ -2488,6 +2550,7 @@ main (int argc, char *argv[])
|
|
||||||
TEST_MATCH_SIMPLE("a", "ab", 0, G_REGEX_MATCH_ANCHORED, TRUE);
|
|
||||||
TEST_MATCH_SIMPLE("a", "a", G_REGEX_CASELESS, 0, TRUE);
|
|
||||||
TEST_MATCH_SIMPLE("a", "A", G_REGEX_CASELESS, 0, TRUE);
|
|
||||||
+ TEST_MATCH_SIMPLE("\\C\\C", "ab", G_REGEX_OPTIMIZE | G_REGEX_RAW, 0, TRUE);
|
|
||||||
/* These are needed to test extended properties. */
|
|
||||||
TEST_MATCH_SIMPLE(AGRAVE, AGRAVE, G_REGEX_CASELESS, 0, TRUE);
|
|
||||||
TEST_MATCH_SIMPLE(AGRAVE, AGRAVE_UPPER, G_REGEX_CASELESS, 0, TRUE);
|
|
||||||
@@ -2947,6 +3010,12 @@ main (int argc, char *argv[])
|
|
||||||
TEST_REPLACE("\\S+", "hello world", 0, "\\U-\\0-", "-HELLO- -WORLD-");
|
|
||||||
TEST_REPLACE(".", "a", 0, "\\A", NULL);
|
|
||||||
TEST_REPLACE(".", "a", 0, "\\g", NULL);
|
|
||||||
+ TEST_REPLACE_OPTIONS("(\\w+)#(\\w+)", "aa#bb cc#dd", 0, "\\2#\\1", "bb#aa dd#cc",
|
|
||||||
+ G_REGEX_OPTIMIZE|G_REGEX_MULTILINE|G_REGEX_CASELESS,
|
|
||||||
+ 0);
|
|
||||||
+ TEST_REPLACE_OPTIONS("(\\w+)#(\\w+)", "aa#bb cc#dd", 0, "\\2#\\1", "bb#aa cc#dd",
|
|
||||||
+ G_REGEX_OPTIMIZE|G_REGEX_MULTILINE|G_REGEX_CASELESS,
|
|
||||||
+ G_REGEX_MATCH_ANCHORED);
|
|
||||||
|
|
||||||
/* TEST_REPLACE_LIT(pattern, string, start_position, replacement, expected) */
|
|
||||||
TEST_REPLACE_LIT("a", "ababa", 0, "A", "AbAbA");
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,35 +0,0 @@
|
|||||||
From 5e76cde5ffeac79b939cf84202024859cda5e753 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Wed, 7 Sep 2022 14:18:14 +0200
|
|
||||||
Subject: [PATCH] regex: Handle JIT errors more explicitly
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/gregex.c | 5 +++--
|
|
||||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index 7d403ad53d..fe7473e628 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -471,6 +471,7 @@ match_error (gint errcode)
|
|
||||||
/* not used by pcre2_match() */
|
|
||||||
break;
|
|
||||||
case PCRE2_ERROR_MATCHLIMIT:
|
|
||||||
+ case PCRE2_ERROR_JIT_STACKLIMIT:
|
|
||||||
return _("backtracking limit reached");
|
|
||||||
case PCRE2_ERROR_CALLOUT:
|
|
||||||
/* callouts are not implemented */
|
|
||||||
@@ -912,8 +913,8 @@ enable_jit_with_match_options (GRegex *regex,
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
g_debug ("JIT compilation was requested with G_REGEX_OPTIMIZE, "
|
|
||||||
- "but request for JIT support had unexpectedly failed. "
|
|
||||||
- "Falling back to interpretive code.");
|
|
||||||
+ "but request for JIT support had unexpectedly failed (error %d). "
|
|
||||||
+ "Falling back to interpretive code.", retval);
|
|
||||||
regex->jit_status = JIT_STATUS_DISABLED;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,71 +0,0 @@
|
|||||||
From 0831393dd08d5f9dcf2e0517dbb4ea546ff7156b Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Wed, 7 Sep 2022 15:21:52 +0200
|
|
||||||
Subject: [PATCH] tests/regex: Make possible to test replacements with options
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/tests/regex.c | 21 ++++++++++++++++++---
|
|
||||||
1 file changed, 18 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/tests/regex.c b/glib/tests/regex.c
|
|
||||||
index 291c21b4c7..26844d63a7 100644
|
|
||||||
--- a/glib/tests/regex.c
|
|
||||||
+++ b/glib/tests/regex.c
|
|
||||||
@@ -1207,6 +1207,8 @@ typedef struct {
|
|
||||||
gint start_position;
|
|
||||||
const gchar *replacement;
|
|
||||||
const gchar *expected;
|
|
||||||
+ GRegexCompileFlags compile_flags;
|
|
||||||
+ GRegexMatchFlags match_flags;
|
|
||||||
} TestReplaceData;
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -1215,17 +1217,25 @@ test_replace (gconstpointer d)
|
|
||||||
const TestReplaceData *data = d;
|
|
||||||
GRegex *regex;
|
|
||||||
gchar *res;
|
|
||||||
+ GError *error = NULL;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
- res = g_regex_replace (regex, data->string, -1, data->start_position, data->replacement, 0, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, data->compile_flags, G_REGEX_MATCH_DEFAULT, &error);
|
|
||||||
+ g_assert_no_error (error);
|
|
||||||
+
|
|
||||||
+ res = g_regex_replace (regex, data->string, -1, data->start_position,
|
|
||||||
+ data->replacement, data->match_flags, &error);
|
|
||||||
|
|
||||||
g_assert_cmpstr (res, ==, data->expected);
|
|
||||||
|
|
||||||
+ if (data->expected)
|
|
||||||
+ g_assert_no_error (error);
|
|
||||||
+
|
|
||||||
g_free (res);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
+ g_clear_error (&error);
|
|
||||||
}
|
|
||||||
|
|
||||||
-#define TEST_REPLACE(_pattern, _string, _start_position, _replacement, _expected) { \
|
|
||||||
+#define TEST_REPLACE_OPTIONS(_pattern, _string, _start_position, _replacement, _expected, _compile_flags, _match_flags) { \
|
|
||||||
TestReplaceData *data; \
|
|
||||||
gchar *path; \
|
|
||||||
data = g_new0 (TestReplaceData, 1); \
|
|
||||||
@@ -1234,11 +1244,16 @@ test_replace (gconstpointer d)
|
|
||||||
data->start_position = _start_position; \
|
|
||||||
data->replacement = _replacement; \
|
|
||||||
data->expected = _expected; \
|
|
||||||
+ data->compile_flags = _compile_flags; \
|
|
||||||
+ data->match_flags = _match_flags; \
|
|
||||||
path = g_strdup_printf ("/regex/replace/%d", ++total); \
|
|
||||||
g_test_add_data_func_full (path, data, test_replace, g_free); \
|
|
||||||
g_free (path); \
|
|
||||||
}
|
|
||||||
|
|
||||||
+#define TEST_REPLACE(_pattern, _string, _start_position, _replacement, _expected) \
|
|
||||||
+ TEST_REPLACE_OPTIONS (_pattern, _string, _start_position, _replacement, _expected, 0, 0)
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
test_replace_lit (gconstpointer d)
|
|
||||||
{
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,188 +0,0 @@
|
|||||||
From 653f8eb0203485c7ffb0eeae81e6e30437d18529 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Fri, 9 Sep 2022 18:43:47 +0200
|
|
||||||
Subject: [PATCH] tests/regex: Perform more tests both with and without
|
|
||||||
optimizations
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/tests/regex.c | 101 +++++++++++++++++++++++++++++++++++++++++----
|
|
||||||
1 file changed, 93 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/tests/regex.c b/glib/tests/regex.c
|
|
||||||
index 2052ba0204..9803d49659 100644
|
|
||||||
--- a/glib/tests/regex.c
|
|
||||||
+++ b/glib/tests/regex.c
|
|
||||||
@@ -173,7 +173,24 @@ test_match_simple (gconstpointer d)
|
|
||||||
data->compile_opts = _compile_opts; \
|
|
||||||
data->match_opts = _match_opts; \
|
|
||||||
data->expected = _expected; \
|
|
||||||
- path = g_strdup_printf ("/regex/match-%s/%d", _name, ++total); \
|
|
||||||
+ total++; \
|
|
||||||
+ if (data->compile_opts & G_REGEX_OPTIMIZE) \
|
|
||||||
+ path = g_strdup_printf ("/regex/match-%s-optimized/%d", _name, total); \
|
|
||||||
+ else \
|
|
||||||
+ path = g_strdup_printf ("/regex/match-%s/%d", _name, total); \
|
|
||||||
+ g_test_add_data_func_full (path, data, test_match_simple, g_free); \
|
|
||||||
+ g_free (path); \
|
|
||||||
+ data = g_memdup2 (data, sizeof (TestMatchData)); \
|
|
||||||
+ if (data->compile_opts & G_REGEX_OPTIMIZE) \
|
|
||||||
+ { \
|
|
||||||
+ data->compile_opts &= ~G_REGEX_OPTIMIZE; \
|
|
||||||
+ path = g_strdup_printf ("/regex/match-%s/%d", _name, total); \
|
|
||||||
+ } \
|
|
||||||
+ else \
|
|
||||||
+ { \
|
|
||||||
+ data->compile_opts |= G_REGEX_OPTIMIZE; \
|
|
||||||
+ path = g_strdup_printf ("/regex/match-%s-optimized/%d", _name, total); \
|
|
||||||
+ } \
|
|
||||||
g_test_add_data_func_full (path, data, test_match_simple, g_free); \
|
|
||||||
g_free (path); \
|
|
||||||
}
|
|
||||||
@@ -361,7 +378,24 @@ test_match (gconstpointer d)
|
|
||||||
data->start_position = _start_position; \
|
|
||||||
data->match_opts2 = _match_opts2; \
|
|
||||||
data->expected = _expected; \
|
|
||||||
- path = g_strdup_printf ("/regex/match/%d", ++total); \
|
|
||||||
+ total++; \
|
|
||||||
+ if (data->compile_opts & G_REGEX_OPTIMIZE) \
|
|
||||||
+ path = g_strdup_printf ("/regex/match-optimized/%d", total); \
|
|
||||||
+ else \
|
|
||||||
+ path = g_strdup_printf ("/regex/match/%d", total); \
|
|
||||||
+ g_test_add_data_func_full (path, data, test_match, g_free); \
|
|
||||||
+ g_free (path); \
|
|
||||||
+ data = g_memdup2 (data, sizeof (TestMatchData)); \
|
|
||||||
+ if (data->compile_opts & G_REGEX_OPTIMIZE) \
|
|
||||||
+ { \
|
|
||||||
+ data->compile_opts &= ~G_REGEX_OPTIMIZE; \
|
|
||||||
+ path = g_strdup_printf ("/regex/match/%d", total); \
|
|
||||||
+ } \
|
|
||||||
+ else \
|
|
||||||
+ { \
|
|
||||||
+ data->compile_opts |= G_REGEX_OPTIMIZE; \
|
|
||||||
+ path = g_strdup_printf ("/regex/match-optimized/%d", total); \
|
|
||||||
+ } \
|
|
||||||
g_test_add_data_func_full (path, data, test_match, g_free); \
|
|
||||||
g_free (path); \
|
|
||||||
}
|
|
||||||
@@ -580,6 +614,7 @@ typedef struct {
|
|
||||||
const gchar *pattern;
|
|
||||||
const gchar *string;
|
|
||||||
gint start_position;
|
|
||||||
+ GRegexCompileFlags compile_flags;
|
|
||||||
GRegexMatchFlags match_opts;
|
|
||||||
gint expected_count;
|
|
||||||
} TestMatchCountData;
|
|
||||||
@@ -592,7 +627,8 @@ test_match_count (gconstpointer d)
|
|
||||||
GMatchInfo *match_info;
|
|
||||||
gint count;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, data->compile_flags,
|
|
||||||
+ G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
|
|
||||||
g_assert (regex != NULL);
|
|
||||||
|
|
||||||
@@ -617,7 +653,14 @@ test_match_count (gconstpointer d)
|
|
||||||
data->start_position = _start_position; \
|
|
||||||
data->match_opts = _match_opts; \
|
|
||||||
data->expected_count = _expected_count; \
|
|
||||||
- path = g_strdup_printf ("/regex/match/count/%d", ++total); \
|
|
||||||
+ data->compile_flags = G_REGEX_DEFAULT; \
|
|
||||||
+ total++; \
|
|
||||||
+ path = g_strdup_printf ("/regex/match/count/%d", total); \
|
|
||||||
+ g_test_add_data_func_full (path, data, test_match_count, g_free); \
|
|
||||||
+ g_free (path); \
|
|
||||||
+ data = g_memdup2 (data, sizeof (TestMatchCountData)); \
|
|
||||||
+ data->compile_flags |= G_REGEX_OPTIMIZE; \
|
|
||||||
+ path = g_strdup_printf ("/regex/match/count-optimized/%d", total); \
|
|
||||||
g_test_add_data_func_full (path, data, test_match_count, g_free); \
|
|
||||||
g_free (path); \
|
|
||||||
}
|
|
||||||
@@ -656,7 +699,24 @@ test_partial (gconstpointer d)
|
|
||||||
data->compile_opts = _compile_opts; \
|
|
||||||
data->match_opts = _match_opts; \
|
|
||||||
data->expected = _expected; \
|
|
||||||
- path = g_strdup_printf ("/regex/match/partial/%d", ++total); \
|
|
||||||
+ total++; \
|
|
||||||
+ if (data->compile_opts & G_REGEX_OPTIMIZE) \
|
|
||||||
+ path = g_strdup_printf ("/regex/match/partial-optimized/%d", total); \
|
|
||||||
+ else \
|
|
||||||
+ path = g_strdup_printf ("/regex/match/partial%d", total); \
|
|
||||||
+ g_test_add_data_func_full (path, data, test_partial, g_free); \
|
|
||||||
+ g_free (path); \
|
|
||||||
+ data = g_memdup2 (data, sizeof (TestMatchData)); \
|
|
||||||
+ if (data->compile_opts & G_REGEX_OPTIMIZE) \
|
|
||||||
+ { \
|
|
||||||
+ data->compile_opts &= ~G_REGEX_OPTIMIZE; \
|
|
||||||
+ path = g_strdup_printf ("/regex/match/partial%d", total); \
|
|
||||||
+ } \
|
|
||||||
+ else \
|
|
||||||
+ { \
|
|
||||||
+ data->compile_opts |= G_REGEX_OPTIMIZE; \
|
|
||||||
+ path = g_strdup_printf ("/regex/match/partial-optimized/%d", total); \
|
|
||||||
+ } \
|
|
||||||
g_test_add_data_func_full (path, data, test_partial, g_free); \
|
|
||||||
g_free (path); \
|
|
||||||
}
|
|
||||||
@@ -666,6 +726,7 @@ test_partial (gconstpointer d)
|
|
||||||
typedef struct {
|
|
||||||
const gchar *pattern;
|
|
||||||
const gchar *string;
|
|
||||||
+ GRegexCompileFlags compile_flags;
|
|
||||||
gint start_position;
|
|
||||||
gint sub_n;
|
|
||||||
const gchar *expected_sub;
|
|
||||||
@@ -682,7 +743,7 @@ test_sub_pattern (gconstpointer d)
|
|
||||||
gchar *sub_expr;
|
|
||||||
gint start = UNTOUCHED, end = UNTOUCHED;
|
|
||||||
|
|
||||||
- regex = g_regex_new (data->pattern, G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
+ regex = g_regex_new (data->pattern, data->compile_flags, G_REGEX_MATCH_DEFAULT, NULL);
|
|
||||||
|
|
||||||
g_assert (regex != NULL);
|
|
||||||
|
|
||||||
@@ -712,7 +773,14 @@ test_sub_pattern (gconstpointer d)
|
|
||||||
data->expected_sub = _expected_sub; \
|
|
||||||
data->expected_start = _expected_start; \
|
|
||||||
data->expected_end = _expected_end; \
|
|
||||||
- path = g_strdup_printf ("/regex/match/subpattern/%d", ++total); \
|
|
||||||
+ data->compile_flags = G_REGEX_DEFAULT; \
|
|
||||||
+ total++; \
|
|
||||||
+ path = g_strdup_printf ("/regex/match/subpattern/%d", total); \
|
|
||||||
+ g_test_add_data_func_full (path, data, test_sub_pattern, g_free); \
|
|
||||||
+ g_free (path); \
|
|
||||||
+ data = g_memdup2 (data, sizeof (TestSubData)); \
|
|
||||||
+ data->compile_flags = G_REGEX_OPTIMIZE; \
|
|
||||||
+ path = g_strdup_printf ("/regex/match/subpattern-optimized/%d", total); \
|
|
||||||
g_test_add_data_func_full (path, data, test_sub_pattern, g_free); \
|
|
||||||
g_free (path); \
|
|
||||||
}
|
|
||||||
@@ -1246,7 +1314,24 @@ test_replace (gconstpointer d)
|
|
||||||
data->expected = _expected; \
|
|
||||||
data->compile_flags = _compile_flags; \
|
|
||||||
data->match_flags = _match_flags; \
|
|
||||||
- path = g_strdup_printf ("/regex/replace/%d", ++total); \
|
|
||||||
+ total++; \
|
|
||||||
+ if (data->compile_flags & G_REGEX_OPTIMIZE) \
|
|
||||||
+ path = g_strdup_printf ("/regex/replace-optimized/%d", total); \
|
|
||||||
+ else \
|
|
||||||
+ path = g_strdup_printf ("/regex/replace/%d", total); \
|
|
||||||
+ g_test_add_data_func_full (path, data, test_replace, g_free); \
|
|
||||||
+ g_free (path); \
|
|
||||||
+ data = g_memdup2 (data, sizeof (TestReplaceData)); \
|
|
||||||
+ if (data->compile_flags & G_REGEX_OPTIMIZE) \
|
|
||||||
+ { \
|
|
||||||
+ data->compile_flags &= ~G_REGEX_OPTIMIZE; \
|
|
||||||
+ path = g_strdup_printf ("/regex/replace/%d", total); \
|
|
||||||
+ } \
|
|
||||||
+ else \
|
|
||||||
+ { \
|
|
||||||
+ data->compile_flags |= G_REGEX_OPTIMIZE; \
|
|
||||||
+ path = g_strdup_printf ("/regex/replace-optimized/%d", total); \
|
|
||||||
+ } \
|
|
||||||
g_test_add_data_func_full (path, data, test_replace, g_free); \
|
|
||||||
g_free (path); \
|
|
||||||
}
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
From 0f869ec5c6bc6cd37a6803cc2299a5845199e758 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Wed, 21 Sep 2022 11:33:14 +0200
|
|
||||||
Subject: [PATCH] regex: Use critical messages if an unexpected NULL parameter
|
|
||||||
is provided
|
|
||||||
|
|
||||||
As programmer error we should be consistent in using criticals.
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/06caf952e48dbed40b5dcff01a94f57ba079b526c
|
|
||||||
|
|
||||||
---
|
|
||||||
glib/gregex.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index fcc28d62f4..1baa4e2f18 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -483,7 +483,7 @@ translate_match_error (gint errcode)
|
|
||||||
break;
|
|
||||||
case PCRE2_ERROR_NULL:
|
|
||||||
/* NULL argument, this should not happen in GRegex */
|
|
||||||
- g_warning ("A NULL argument was passed to PCRE");
|
|
||||||
+ g_critical ("A NULL argument was passed to PCRE");
|
|
||||||
break;
|
|
||||||
case PCRE2_ERROR_BADOPTION:
|
|
||||||
return "bad options";
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,148 +0,0 @@
|
|||||||
From 1d628dac92283d75f7c751ddad72c28f4a7afe39 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Tue, 6 Sep 2022 18:21:52 +0200
|
|
||||||
Subject: [PATCH] regex: Use size types more in line with PCRE2 returned values
|
|
||||||
|
|
||||||
We're using int for every size value while PCRE uses uint_32t or
|
|
||||||
PCRE2_SIZE (size_t in most platforms), let's use the same types to avoid
|
|
||||||
using different signs.
|
|
||||||
---
|
|
||||||
glib/gregex.c | 34 +++++++++++++++++++---------------
|
|
||||||
1 file changed, 19 insertions(+), 15 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glib/gregex.c b/glib/gregex.c
|
|
||||||
index 6f3ee88122..b886b24e2a 100644
|
|
||||||
--- a/glib/gregex.c
|
|
||||||
+++ b/glib/gregex.c
|
|
||||||
@@ -23,6 +23,7 @@
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
+#include <stdint.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#define PCRE2_CODE_UNIT_WIDTH 8
|
|
||||||
@@ -226,12 +227,12 @@ struct _GMatchInfo
|
|
||||||
GRegex *regex; /* the regex */
|
|
||||||
uint32_t match_opts; /* pcre match options used at match time on the regex */
|
|
||||||
gint matches; /* number of matching sub patterns, guaranteed to be <= (n_subpatterns + 1) if doing a single match (rather than matching all) */
|
|
||||||
- gint n_subpatterns; /* total number of sub patterns in the regex */
|
|
||||||
+ uint32_t n_subpatterns; /* total number of sub patterns in the regex */
|
|
||||||
gint pos; /* position in the string where last match left off */
|
|
||||||
- gint n_offsets; /* number of offsets */
|
|
||||||
+ uint32_t n_offsets; /* number of offsets */
|
|
||||||
gint *offsets; /* array of offsets paired 0,1 ; 2,3 ; 3,4 etc */
|
|
||||||
gint *workspace; /* workspace for pcre2_dfa_match() */
|
|
||||||
- gint n_workspace; /* number of workspace elements */
|
|
||||||
+ PCRE2_SIZE n_workspace; /* number of workspace elements */
|
|
||||||
const gchar *string; /* string passed to the match function */
|
|
||||||
gssize string_len; /* length of string, in bytes */
|
|
||||||
pcre2_match_context *match_context;
|
|
||||||
@@ -254,7 +255,7 @@ struct _GRegex
|
|
||||||
GRegexCompileFlags orig_compile_opts; /* options used at compile time on the pattern, gregex values */
|
|
||||||
uint32_t match_opts; /* pcre2 options used at match time on the regex */
|
|
||||||
GRegexMatchFlags orig_match_opts; /* options used as default match options, gregex values */
|
|
||||||
- gint jit_options; /* options which were enabled for jit compiler */
|
|
||||||
+ uint32_t jit_options; /* options which were enabled for jit compiler */
|
|
||||||
JITStatus jit_status; /* indicates the status of jit compiler for this compiled regex */
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -831,9 +832,9 @@ recalc_match_offsets (GMatchInfo *match_info,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
PCRE2_SIZE *ovector;
|
|
||||||
- gint i;
|
|
||||||
+ uint32_t i;
|
|
||||||
|
|
||||||
- if (pcre2_get_ovector_count (match_info->match_data) > G_MAXINT / 2)
|
|
||||||
+ if (pcre2_get_ovector_count (match_info->match_data) > G_MAXUINT32 / 2)
|
|
||||||
{
|
|
||||||
g_set_error (error, G_REGEX_ERROR, G_REGEX_ERROR_MATCH,
|
|
||||||
_("Error while matching regular expression %s: %s"),
|
|
||||||
@@ -858,7 +859,8 @@ static void
|
|
||||||
enable_jit_with_match_options (GRegex *regex,
|
|
||||||
uint32_t match_options)
|
|
||||||
{
|
|
||||||
- gint old_jit_options, new_jit_options, retval;
|
|
||||||
+ gint retval;
|
|
||||||
+ uint32_t old_jit_options, new_jit_options;
|
|
||||||
|
|
||||||
if (!(regex->orig_compile_opts & G_REGEX_OPTIMIZE))
|
|
||||||
return;
|
|
||||||
@@ -1104,7 +1106,8 @@ g_match_info_next (GMatchInfo *match_info,
|
|
||||||
match_info->pos = match_info->offsets[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
- g_assert (match_info->matches <= match_info->n_subpatterns + 1);
|
|
||||||
+ g_assert (match_info->matches < 0 ||
|
|
||||||
+ (uint32_t) match_info->matches <= match_info->n_subpatterns + 1);
|
|
||||||
|
|
||||||
/* it's possible to get two identical matches when we are matching
|
|
||||||
* empty strings, for instance if the pattern is "(?=[A-Z0-9])" and
|
|
||||||
@@ -1387,7 +1390,7 @@ g_match_info_fetch_pos (const GMatchInfo *match_info,
|
|
||||||
/* make sure the sub expression number they're requesting is less than
|
|
||||||
* the total number of sub expressions in the regex. When matching all
|
|
||||||
* (g_regex_match_all()), also compare against the number of matches */
|
|
||||||
- if (match_num >= MAX (match_info->n_subpatterns + 1, match_info->matches))
|
|
||||||
+ if ((uint32_t) match_num >= MAX (match_info->n_subpatterns + 1, (uint32_t) match_info->matches))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if (start_pos != NULL)
|
|
||||||
@@ -1797,7 +1800,7 @@ get_pcre2_inline_compile_options (pcre2_code *re,
|
|
||||||
|
|
||||||
if (!(compile_options & PCRE2_DUPNAMES))
|
|
||||||
{
|
|
||||||
- gboolean jchanged = FALSE;
|
|
||||||
+ uint32_t jchanged = 0;
|
|
||||||
pcre2_pattern_info (re, PCRE2_INFO_JCHANGED, &jchanged);
|
|
||||||
if (jchanged)
|
|
||||||
compile_options |= PCRE2_DUPNAMES;
|
|
||||||
@@ -1840,7 +1843,7 @@ g_regex_get_pattern (const GRegex *regex)
|
|
||||||
gint
|
|
||||||
g_regex_get_max_backref (const GRegex *regex)
|
|
||||||
{
|
|
||||||
- gint value;
|
|
||||||
+ uint32_t value;
|
|
||||||
|
|
||||||
pcre2_pattern_info (regex->pcre_re, PCRE2_INFO_BACKREFMAX, &value);
|
|
||||||
|
|
||||||
@@ -1860,7 +1863,7 @@ g_regex_get_max_backref (const GRegex *regex)
|
|
||||||
gint
|
|
||||||
g_regex_get_capture_count (const GRegex *regex)
|
|
||||||
{
|
|
||||||
- gint value;
|
|
||||||
+ uint32_t value;
|
|
||||||
|
|
||||||
pcre2_pattern_info (regex->pcre_re, PCRE2_INFO_CAPTURECOUNT, &value);
|
|
||||||
|
|
||||||
@@ -1880,7 +1883,7 @@ g_regex_get_capture_count (const GRegex *regex)
|
|
||||||
gboolean
|
|
||||||
g_regex_get_has_cr_or_lf (const GRegex *regex)
|
|
||||||
{
|
|
||||||
- gint value;
|
|
||||||
+ uint32_t value;
|
|
||||||
|
|
||||||
pcre2_pattern_info (regex->pcre_re, PCRE2_INFO_HASCRORLF, &value);
|
|
||||||
|
|
||||||
@@ -1902,7 +1905,7 @@ g_regex_get_has_cr_or_lf (const GRegex *regex)
|
|
||||||
gint
|
|
||||||
g_regex_get_max_lookbehind (const GRegex *regex)
|
|
||||||
{
|
|
||||||
- gint max_lookbehind;
|
|
||||||
+ uint32_t max_lookbehind;
|
|
||||||
|
|
||||||
pcre2_pattern_info (regex->pcre_re, PCRE2_INFO_MAXLOOKBEHIND,
|
|
||||||
&max_lookbehind);
|
|
||||||
@@ -1927,7 +1930,8 @@ g_regex_get_max_lookbehind (const GRegex *regex)
|
|
||||||
GRegexCompileFlags
|
|
||||||
g_regex_get_compile_flags (const GRegex *regex)
|
|
||||||
{
|
|
||||||
- gint extra_flags, info_value;
|
|
||||||
+ GRegexCompileFlags extra_flags;
|
|
||||||
+ uint32_t info_value;
|
|
||||||
|
|
||||||
g_return_val_if_fail (regex != NULL, 0);
|
|
||||||
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,119 +0,0 @@
|
|||||||
From 511627b7356af527c85c049e2020a36694d7de54 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
||||||
Date: Fri, 2 Sep 2022 18:56:35 +0200
|
|
||||||
Subject: [PATCH] tests/dbus-appinfo: Add test case for flatpak opening an
|
|
||||||
invalid file
|
|
||||||
|
|
||||||
We were testing the case in which we were opening an actual file, and so
|
|
||||||
potentially using a fd-list, however we were missing the case in which a file
|
|
||||||
was not existent.
|
|
||||||
|
|
||||||
And in such case we are incidentally hitting a leak now.
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/511627b7356af527c85c049e2020a36694d7de54
|
|
||||||
|
|
||||||
---
|
|
||||||
gio/tests/dbus-appinfo.c | 79 ++++++++++++++++++++++++++++++++++++++++
|
|
||||||
1 file changed, 79 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/gio/tests/dbus-appinfo.c b/gio/tests/dbus-appinfo.c
|
|
||||||
index 2017e02df2..91e76403c6 100644
|
|
||||||
--- a/gio/tests/dbus-appinfo.c
|
|
||||||
+++ b/gio/tests/dbus-appinfo.c
|
|
||||||
@@ -360,6 +360,84 @@ test_flatpak_doc_export (void)
|
|
||||||
g_object_unref (flatpak_appinfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void
|
|
||||||
+on_flatpak_launch_invalid_uri_finish (GObject *object,
|
|
||||||
+ GAsyncResult *result,
|
|
||||||
+ gpointer user_data)
|
|
||||||
+{
|
|
||||||
+ GApplication *app = user_data;
|
|
||||||
+ GError *error = NULL;
|
|
||||||
+
|
|
||||||
+ g_app_info_launch_uris_finish (G_APP_INFO (object), result, &error);
|
|
||||||
+ g_assert_no_error (error);
|
|
||||||
+
|
|
||||||
+ g_application_release (app);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+on_flatpak_activate_invalid_uri (GApplication *app,
|
|
||||||
+ gpointer user_data)
|
|
||||||
+{
|
|
||||||
+ GDesktopAppInfo *flatpak_appinfo = user_data;
|
|
||||||
+ GList *uris;
|
|
||||||
+
|
|
||||||
+ /* The app will be released in on_flatpak_launch_uris_finish */
|
|
||||||
+ g_application_hold (app);
|
|
||||||
+
|
|
||||||
+ uris = g_list_prepend (NULL, "file:///hopefully/an/invalid/path.desktop");
|
|
||||||
+ g_app_info_launch_uris_async (G_APP_INFO (flatpak_appinfo), uris, NULL,
|
|
||||||
+ NULL, on_flatpak_launch_invalid_uri_finish, app);
|
|
||||||
+ g_list_free (uris);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+on_flatpak_open_invalid_uri (GApplication *app,
|
|
||||||
+ GFile **files,
|
|
||||||
+ gint n_files,
|
|
||||||
+ const char *hint)
|
|
||||||
+{
|
|
||||||
+ GFile *f;
|
|
||||||
+
|
|
||||||
+ g_assert_cmpint (n_files, ==, 1);
|
|
||||||
+ g_test_message ("on_flatpak_open received file '%s'", g_file_peek_path (files[0]));
|
|
||||||
+
|
|
||||||
+ /* The file has been exported via the document portal */
|
|
||||||
+ f = g_file_new_for_uri ("file:///hopefully/an/invalid/path.desktop");
|
|
||||||
+ g_assert_true (g_file_equal (files[0], f));
|
|
||||||
+ g_object_unref (f);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+test_flatpak_missing_doc_export (void)
|
|
||||||
+{
|
|
||||||
+ const gchar *argv[] = { "myapp", NULL };
|
|
||||||
+ gchar *desktop_file = NULL;
|
|
||||||
+ GDesktopAppInfo *flatpak_appinfo;
|
|
||||||
+ GApplication *app;
|
|
||||||
+ int status;
|
|
||||||
+
|
|
||||||
+ g_test_summary ("Test that files launched via Flatpak apps are made available via the document portal.");
|
|
||||||
+
|
|
||||||
+ desktop_file = g_test_build_filename (G_TEST_DIST,
|
|
||||||
+ "org.gtk.test.dbusappinfo.flatpak.desktop",
|
|
||||||
+ NULL);
|
|
||||||
+ flatpak_appinfo = g_desktop_app_info_new_from_filename (desktop_file);
|
|
||||||
+ g_assert_nonnull (flatpak_appinfo);
|
|
||||||
+
|
|
||||||
+ app = g_application_new ("org.gtk.test.dbusappinfo.flatpak",
|
|
||||||
+ G_APPLICATION_HANDLES_OPEN);
|
|
||||||
+ g_signal_connect (app, "activate", G_CALLBACK (on_flatpak_activate_invalid_uri),
|
|
||||||
+ flatpak_appinfo);
|
|
||||||
+ g_signal_connect (app, "open", G_CALLBACK (on_flatpak_open_invalid_uri), NULL);
|
|
||||||
+
|
|
||||||
+ status = g_application_run (app, 1, (gchar **) argv);
|
|
||||||
+ g_assert_cmpint (status, ==, 0);
|
|
||||||
+
|
|
||||||
+ g_object_unref (app);
|
|
||||||
+ g_object_unref (flatpak_appinfo);
|
|
||||||
+ g_free (desktop_file);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int
|
|
||||||
main (int argc, char **argv)
|
|
||||||
{
|
|
||||||
@@ -367,6 +445,7 @@ main (int argc, char **argv)
|
|
||||||
|
|
||||||
g_test_add_func ("/appinfo/dbusappinfo", test_dbus_appinfo);
|
|
||||||
g_test_add_func ("/appinfo/flatpak-doc-export", test_flatpak_doc_export);
|
|
||||||
+ g_test_add_func ("/appinfo/flatpak-missing-doc-export", test_flatpak_missing_doc_export);
|
|
||||||
|
|
||||||
return session_bus_run ();
|
|
||||||
}
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
@ -1,36 +0,0 @@
|
|||||||
From f95ca6cb713383548f16f9a8ba2f6c51a4d25e25 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Michael Catanzaro <mcatanzaro@redhat.com>
|
|
||||||
Date: Fri, 17 Jun 2022 08:48:10 -0500
|
|
||||||
Subject: [PATCH] xdgmime: fix double free
|
|
||||||
|
|
||||||
We free xdg_dirs[i] twice, but fail to free xdg_dirs itself.
|
|
||||||
|
|
||||||
Also, since free() is NULL-safe, there is no need for the second check
|
|
||||||
here.
|
|
||||||
|
|
||||||
Discovered in: https://gitlab.freedesktop.org/xdg/xdgmime/-/merge_requests/16#note_1432025
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/f95ca6cb713383548f16f9a8ba2f6c51a4d25e25
|
|
||||||
|
|
||||||
---
|
|
||||||
gio/xdgmime/xdgmime.c | 3 +--
|
|
||||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gio/xdgmime/xdgmime.c b/gio/xdgmime/xdgmime.c
|
|
||||||
index 9ab6760486..c3c11625e8 100644
|
|
||||||
--- a/gio/xdgmime/xdgmime.c
|
|
||||||
+++ b/gio/xdgmime/xdgmime.c
|
|
||||||
@@ -350,8 +350,7 @@ xdg_mime_set_dirs (const char * const *dirs)
|
|
||||||
|
|
||||||
for (i = 0; xdg_dirs != NULL && xdg_dirs[i] != NULL; i++)
|
|
||||||
free (xdg_dirs[i]);
|
|
||||||
- if (xdg_dirs != NULL)
|
|
||||||
- free (xdg_dirs[i]);
|
|
||||||
+ free (xdg_dirs);
|
|
||||||
xdg_dirs = NULL;
|
|
||||||
|
|
||||||
if (dirs != NULL)
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
Binary file not shown.
BIN
glib-2.74.4.tar.xz
Normal file
BIN
glib-2.74.4.tar.xz
Normal file
Binary file not shown.
88
glib2.spec
88
glib2.spec
@ -1,62 +1,10 @@
|
|||||||
Name: glib2
|
Name: glib2
|
||||||
Version: 2.72.2
|
Version: 2.74.4
|
||||||
Release: 7
|
Release: 1
|
||||||
Summary: The core library that forms the basis for projects such as GTK+ and GNOME
|
Summary: The core library that forms the basis for projects such as GTK+ and GNOME
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
URL: http://www.gtk.org
|
URL: https://www.gtk.org
|
||||||
Source0: https://download.gnome.org/sources/glib/2.71/glib-%{version}.tar.xz
|
Source0: https://download.gnome.org/sources/glib/2.74/glib-%{version}.tar.xz
|
||||||
|
|
||||||
Patch6000: backport-add-version-macros-for-GLib-2.74.patch
|
|
||||||
Patch6001: backport-gtype-Add-G_TYPE_FLAG_NONE.patch
|
|
||||||
Patch6002: backport-gioenums-Add-G_TLS_CERTIFICATE_FLAGS_NONE.patch
|
|
||||||
Patch6003: backport-gtestutils-Add-G_TEST_SUBPROCESS_DEFAULT.patch
|
|
||||||
Patch6004: backport-gsignal-Add-G_CONNECT_DEFAULT.patch
|
|
||||||
Patch6005: backport-giomodule-test-Dont-pass-a-magic-number-to-g_test_trap_subprocess.patch
|
|
||||||
Patch6006: backport-giochannel-Add-G_IO_FLAG_NONE.patch
|
|
||||||
Patch6007: backport-gmarkup-Add-G_MARKUP_PARSE_FLAGS_NONE.patch
|
|
||||||
Patch6008: backport-gregex-Add-G_REGEX_DEFAULT-G_REGEX_MATCH_DEFAULT.patch
|
|
||||||
Patch6009: backport-replace-pcre1-with-pcre2.patch
|
|
||||||
Patch6010: backport-gregex-format-specifier-for-localized-error-message.patch
|
|
||||||
Patch6011: backport-gregex-ensure-we-translate-the-errcode.patch
|
|
||||||
Patch6012: backport-gregex-Free-match-info-if-offset-matching-recalc-failed.patch
|
|
||||||
Patch6013: backport-gregex-use-G_REGEX_OPTIMIZE-flag-to-enable-JIT-compilation.patch
|
|
||||||
Patch6014: backport-gregex-use-g_debug-instead-of-g_warning-in-case-JIT-is-not-available.patch
|
|
||||||
Patch6015: backport-gregex-do-not-set-match-and-recursion-limits-on-match-context.patch
|
|
||||||
Patch6016: backport-gregex-add-original-test-case.patch
|
|
||||||
Patch6017: backport-gregex-use-correct-size-for-pcre2_pattern_info.patch
|
|
||||||
Patch6018: backport-regex-Add-debug-strings-for-compile-and-match-option-flags.patch
|
|
||||||
Patch6019: backport-regex-Actually-check-for-match-options-changes.patch
|
|
||||||
Patch6020: backport-regex-Do-not-mix-PCRE2-Compile-Match-Newline-and-BSR-flags.patch
|
|
||||||
Patch6021: backport-regex-Add-test-for-gtksourceview-regression.patch
|
|
||||||
Patch6022: backport-gregex-Mark-g_match_info_get_regex-as-transfer-none.patch
|
|
||||||
Patch6023: backport-gregex-Do-not-try-access-the-undefined-match-offsets.patch
|
|
||||||
Patch6024: backport-gregex-Fix-a-potential-PCRE2-code-leak-on-reallocation-failures.patch
|
|
||||||
Patch6025: backport-regex-Use-size-types-more-in-line-with-PCRE2-returned-values.patch
|
|
||||||
Patch6026: backport-gregex-Handle-the-case-we-need-to-re-allocate-the-match-data.patch
|
|
||||||
Patch6027: backport-gregex-Avoid-re-allocating-if-we-have-no-size-change.patch
|
|
||||||
Patch6028: backport-regex-Compute-the-offsets-size-based-on-match-results.patch
|
|
||||||
Patch6029: backport-regex-Avoid-allocating-offsets-until-we-ve-a-match.patch
|
|
||||||
Patch6030: backport-regex-Handle-JIT-errors-more-explicitly.patch
|
|
||||||
Patch6031: backport-regex-Make-possible-to-test-replacements-with-options.patch
|
|
||||||
Patch6032: backport-regex-Do-not-use-JIT-when-using-unsupported-match-options.patch
|
|
||||||
Patch6033: backport-regex-Perform-more-tests-both-with-and-without-optimizations.patch
|
|
||||||
Patch6034: backport-gsocketclient-Fix-still-reachable-references-to-cancellables.patch
|
|
||||||
Patch6035: backport-Add-lock-in-_g_get_unix_mount_points-around-fsent-functions.patch
|
|
||||||
Patch6036: backport-g_get_unix_mount_points-reduce-syscalls-inside-loop.patch
|
|
||||||
Patch6037: backport-xdgmime-fix-double-free.patch
|
|
||||||
Patch6038: backport-Implement-GFileIface.set_display_name-for-resource-files.patch
|
|
||||||
Patch6039: backport-tests-dbus-appinfo-Add-test-case-for-flatpak-opening-an-invalid-file.patch
|
|
||||||
Patch6040: backport-documentportal-Fix-small-leak-in-add_documents-with-empty-URI-list.patch
|
|
||||||
Patch6041: backport-gio-tests-gdbus-proxy-threads-Unref-GVariant-s-that-we-own.patch
|
|
||||||
Patch6042: backport-gio-tests-gdbus-peer-Unref-cached-property-GVariant-value.patch
|
|
||||||
Patch6043: backport-gdesktopappinfo-Unref-the-GDBus-call-results.patch
|
|
||||||
Patch6044: backport-Handling-collision-between-standard-i-o-file-descriptors-and-newly-created-ones.patch
|
|
||||||
Patch6045: backport-glocalfileoutputstream-Do-not-double-close-an-fd-on-unlink-error.patch
|
|
||||||
Patch6046: backport-gregex-Use-pcre2-error-messages-if-we-dont-provide-a-specific-one.patch
|
|
||||||
Patch6047: backport-regex-Use-critical-messages-if-an-unexpected-NULL-parameter-is-provided.patch
|
|
||||||
Patch6048: backport-gregex-Allow-G_REGEX_JAVASCRIPT_COMPAT-in-compile-mask-for-g_regex_new.patch
|
|
||||||
Patch6049: backport-gregex-Drop-explanation-G_REGEX_JAVASCRIPT_COMPAT.patch
|
|
||||||
Patch6050: backport-gregex-Remove-an-unreachable-return-statement.patch
|
|
||||||
|
|
||||||
BuildRequires: chrpath gcc gcc-c++ gettext perl-interpreter
|
BuildRequires: chrpath gcc gcc-c++ gettext perl-interpreter
|
||||||
BUildRequires: glibc-devel libattr-devel libselinux-devel meson
|
BUildRequires: glibc-devel libattr-devel libselinux-devel meson
|
||||||
@ -64,22 +12,22 @@ BuildRequires: systemtap-sdt-devel pkgconfig(libelf) pkgconfig(libffi)
|
|||||||
BuildRequires: pkgconfig(libpcre2-8) pkgconfig(mount) pkgconfig(zlib)
|
BuildRequires: pkgconfig(libpcre2-8) pkgconfig(mount) pkgconfig(zlib)
|
||||||
BuildRequires: python3-devel
|
BuildRequires: python3-devel
|
||||||
%ifnarch i686
|
%ifnarch i686
|
||||||
BuildRequires: desktop-file-utils shared-mime-info gtk-doc
|
BuildRequires: desktop-file-utils shared-mime-info gtk-doc
|
||||||
%if %{?openEuler:1}0
|
%if %{?openEuler:1}0
|
||||||
BuildRequires: pkgconfig(sysprof-capture-4)
|
BuildRequires: pkgconfig(sysprof-capture-4)
|
||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
Provides: %{name}-fam = %{version}-%{release}
|
Provides: %{name}-fam = %{version}-%{release}
|
||||||
Obsoletes: %{name}-fam < %{version}-%{release}
|
Obsoletes: %{name}-fam < %{version}-%{release}
|
||||||
|
|
||||||
Recommends: shared-mime-info
|
Recommends: shared-mime-info
|
||||||
Conflicts: gcr < 3.28.1
|
Conflicts: gcr < 3.28.1
|
||||||
|
|
||||||
Provides: bundled(gnulib)
|
Provides: bundled(gnulib)
|
||||||
Provides: bundled(gvdb)
|
Provides: bundled(gvdb)
|
||||||
Provides: bundled(libcharset)
|
Provides: bundled(libcharset)
|
||||||
Provides: bundled(xdgmime)
|
Provides: bundled(xdgmime)
|
||||||
|
|
||||||
%description
|
%description
|
||||||
GLib is a bundle of three (formerly five) low-level system libraries
|
GLib is a bundle of three (formerly five) low-level system libraries
|
||||||
@ -88,12 +36,12 @@ from GTK, so it can be used by software other than GNOME and has been
|
|||||||
developed in parallel ever since.
|
developed in parallel ever since.
|
||||||
|
|
||||||
%package devel
|
%package devel
|
||||||
Summary: Development for the GLib library
|
Summary: Development files for the GLib library
|
||||||
Requires: %{name} = %{version}-%{release}
|
Requires: %{name} = %{version}-%{release}
|
||||||
Requires: gdb-headless
|
Requires: gdb-headless
|
||||||
|
|
||||||
%description devel
|
%description devel
|
||||||
Development for the GLib library.
|
Development files for the GLib library.
|
||||||
|
|
||||||
%package static
|
%package static
|
||||||
Summary: glib static
|
Summary: glib static
|
||||||
@ -133,8 +81,7 @@ help document for the glib2 package.
|
|||||||
%autosetup -n glib-%{version} -p1
|
%autosetup -n glib-%{version} -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
%meson --default-library=both -Ddtrace=true \
|
||||||
%meson --default-library=both -Ddtrace=true \
|
|
||||||
%ifnarch i686
|
%ifnarch i686
|
||||||
%if %{?openEuler:1}0
|
%if %{?openEuler:1}0
|
||||||
-Dsysprof=enabled \
|
-Dsysprof=enabled \
|
||||||
@ -190,7 +137,7 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
|
|||||||
|
|
||||||
%files -f glib20.lang
|
%files -f glib20.lang
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
%doc AUTHORS NEWS README
|
%doc NEWS
|
||||||
%license COPYING
|
%license COPYING
|
||||||
%{_libdir}/*.so.*
|
%{_libdir}/*.so.*
|
||||||
%dir %{_libdir}/gio
|
%dir %{_libdir}/gio
|
||||||
@ -216,6 +163,8 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
|
|||||||
%{_libdir}/pkgconfig/*
|
%{_libdir}/pkgconfig/*
|
||||||
%{_includedir}/*
|
%{_includedir}/*
|
||||||
|
|
||||||
|
%{_libexecdir}/gio-launch-desktop
|
||||||
|
|
||||||
%{_datadir}/aclocal/*
|
%{_datadir}/aclocal/*
|
||||||
%{_datadir}/glib-2.0/*
|
%{_datadir}/glib-2.0/*
|
||||||
%{_datadir}/bash-completion/completions/gresource
|
%{_datadir}/bash-completion/completions/gresource
|
||||||
@ -252,6 +201,9 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Jan 2 2023 lin zhang <lin.zhang@turbolinux.com.cn> - 2.74.4-1
|
||||||
|
- Update to 2.74.1
|
||||||
|
|
||||||
* Tue Jan 10 2023 hanhuihui <hanhuihui5@huawei.com> - 2.72.2-7
|
* Tue Jan 10 2023 hanhuihui <hanhuihui5@huawei.com> - 2.72.2-7
|
||||||
- adjust pcre2 requires
|
- adjust pcre2 requires
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user