File glib2-CVE-2018-16429.patch of Package glib2.11799
diff --git a/glib/gmarkup.c b/glib/gmarkup.c
index c36a3e4..f5a356b 100644
--- a/glib/gmarkup.c
+++ b/glib/gmarkup.c
@@ -561,7 +561,16 @@ static gchar*
utf8_str (const gchar *utf8,
gchar *buf)
{
- char_str (g_utf8_get_char (utf8), buf);
+ gunichar c = g_utf8_get_char_validated (utf8, -1);
+ if (c == (gunichar) -1 || c == (gunichar) -2)
+ {
+ gchar *temp = g_strdup_printf ("\\x%02x", (guint)(guchar)*utf8);
+ memset (buf, 0, 8);
+ memcpy (buf, temp, strlen (temp));
+ g_free (temp);
+ }
+ else
+ char_str (c, buf);
return buf;
}
diff --git a/glib/tests/Makefile.am b/glib/tests/Makefile.am
index 810af0e..4c8028b 100644
--- a/glib/tests/Makefile.am
+++ b/glib/tests/Makefile.am
@@ -155,7 +155,7 @@ markup_tests = \
fail-31 fail-32 fail-33 fail-34 fail-35 \
fail-36 fail-37 fail-38 fail-39 fail-40 \
fail-41 fail-42 fail-43 fail-44 fail-45 \
- fail-46 fail-47 fail-48 fail-49 \
+ fail-46 fail-47 fail-48 fail-49 fail-50 \
fail-51 \
valid-1 valid-2 valid-3 valid-4 valid-5 \
valid-6 valid-7 valid-8 valid-9 valid-10 \
diff --git a/glib/tests/markups/fail-50.expected b/glib/tests/markups/fail-50.expected
new file mode 100644
index 0000000..a1ba285
--- /dev/null
+++ b/glib/tests/markups/fail-50.expected
@@ -0,0 +1 @@
+ERROR Error on line 1 char 5: Odd character “\xfc”, expected an open quote mark after the equals sign when giving value for attribute “r” of element “”
\ No newline at end of file
diff --git a/glib/tests/markups/fail-50.gmarkup b/glib/tests/markups/fail-50.gmarkup
new file mode 100644
index 0000000..baa29b7
--- /dev/null
+++ b/glib/tests/markups/fail-50.gmarkup
@@ -0,0 +1 @@
+< r=
\ No newline at end of file