public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/evolution] f43: Resolves: #2531477 (CVE-2026-88859 Validate clickable preview elements)
@ 2026-09-10 15:59 Milan Crha
0 siblings, 0 replies; only message in thread
From: Milan Crha @ 2026-09-10 15:59 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/evolution
Branch : f43
Commit : 8ae56355757eba0adce06aa7799b1e0a7a19a70f
Author : Milan Crha <mcrha@redhat.com>
Date : 2026-09-10T17:58:56+02:00
Stats : +281/-2 in 2 file(s)
URL : https://src.fedoraproject.org/rpms/evolution/c/8ae56355757eba0adce06aa7799b1e0a7a19a70f?branch=f43
Log:
Resolves: #2531477 (CVE-2026-88859 Validate clickable preview elements)
---
diff --git a/0001-CVE-2026-88859-validate-clickable-preview-elements.patch b/0001-CVE-2026-88859-validate-clickable-preview-elements.patch
new file mode 100644
index 0000000..596d356
--- /dev/null
+++ b/0001-CVE-2026-88859-validate-clickable-preview-elements.patch
@@ -0,0 +1,275 @@
+diff -up evolution-3.60.2/data/webkit/e-web-view.js.1 evolution-3.60.2/data/webkit/e-web-view.js
+--- evolution-3.60.2/data/webkit/e-web-view.js.1 2026-05-22 05:58:26.000000000 +0200
++++ evolution-3.60.2/data/webkit/e-web-view.js 2026-09-10 17:41:31.627767180 +0200
+@@ -24,6 +24,7 @@ var Evo = {
+ blockquoteStyle : "margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex",
+ magicSpacebarState: -1,
+ markCitationColor : null,
++ pageToken : null,
+ plugins : null
+ };
+
+@@ -232,6 +233,11 @@ Evo.SetElementAttribute = function(ifram
+ }
+ }
+
++Evo.HasValidToken = function(elem)
++{
++ return !!Evo.pageToken && elem.getAttribute("evo-token") === Evo.pageToken;
++}
++
+ Evo.createStyleSheet = function(doc, style_sheet_id, content)
+ {
+ var node;
+@@ -1135,6 +1141,9 @@ Evo.mailDisplayVCardModeButtonClicked =
+ if (!elem || !elem.parentElement)
+ return;
+
++ if (!Evo.HasValidToken(elem))
++ return;
++
+ var normal_btn = null, compact_btn = null, iframe_elem = null, child;
+
+ for (child = elem.parentElement.firstElementChild; child; child = child.nextElementSibling) {
+@@ -1342,9 +1351,10 @@ Evo.mailDisplaySizeChanged = function(en
+ window.requestAnimationFrame(Evo.mailDisplayHandleSizeEntries);
+ }
+
+-Evo.MailDisplayBindDOM = function(iframe_id, markCitationColor)
++Evo.MailDisplayBindDOM = function(iframe_id, markCitationColor, pageToken)
+ {
+ Evo.markCitationColor = markCitationColor != "" ? markCitationColor : null;
++ Evo.pageToken = pageToken != "" ? pageToken : null;
+ if (!Evo.mailDisplayResizeObserver) {
+ Evo.mailDisplayResizeObserver = new ResizeObserver(Evo.mailDisplaySizeChanged);
+ Evo.mailDisplayResizeObserver.expectChange = 0;
+@@ -1434,7 +1444,7 @@ Evo.MailDisplayBindDOM = function(iframe
+
+ elem = doc.getElementById("__evo-contact-photo");
+
+- if (elem && elem.hasAttribute("data-mailaddr")) {
++ if (elem && elem.hasAttribute("data-mailaddr") && Evo.HasValidToken(elem)) {
+ var mail_addr;
+
+ mail_addr = elem.getAttribute("data-mailaddr");
+@@ -1938,13 +1948,13 @@ EvoItip.FlipAlternativeHTMLPart = functi
+ elem.hidden = !elem.hidden;
+ }
+ elem = Evo.FindElement(iframe_id, img_id);
+- if (elem) {
++ if (elem && Evo.HasValidToken(elem)) {
+ var tmp = elem.src;
+ elem.src = elem.getAttribute("othersrc");
+ elem.setAttribute("othersrc", tmp);
+ }
+ elem = Evo.FindElement(iframe_id, img_id + "-dark");
+- if (elem) {
++ if (elem && Evo.HasValidToken(elem)) {
+ var tmp = elem.src;
+ elem.src = elem.getAttribute("othersrc");
+ elem.setAttribute("othersrc", tmp);
+diff -up evolution-3.60.2/docs/evolution.1 evolution-3.60.2/docs/evolution
+diff -up evolution-3.60.2/src/em-format/e-mail-formatter.c.1 evolution-3.60.2/src/em-format/e-mail-formatter.c
+--- evolution-3.60.2/src/em-format/e-mail-formatter.c.1 2026-05-22 05:58:26.000000000 +0200
++++ evolution-3.60.2/src/em-format/e-mail-formatter.c 2026-09-10 17:42:26.365292841 +0200
+@@ -23,6 +23,7 @@
+
+ #include <gdk/gdk.h>
+ #include <libebackend/libebackend.h>
++#include <camel/camel.h>
+
+ #include <e-util/e-util.h>
+ #include <shell/e-shell.h>
+@@ -49,6 +50,7 @@ struct _EMailFormatterPrivate {
+
+ gchar *charset;
+ gchar *default_charset;
++ const gchar *page_token; /* in camel string pool */
+
+ GdkRGBA colors[E_MAIL_FORMATTER_NUM_COLOR_TYPES];
+ };
+@@ -371,6 +373,7 @@ e_mail_formatter_finalize (GObject *obje
+
+ g_free (self->priv->charset);
+ g_free (self->priv->default_charset);
++ g_clear_pointer (&self->priv->page_token, camel_pstring_free);
+
+ g_mutex_clear (&self->priv->property_lock);
+
+@@ -1517,3 +1520,47 @@ e_mail_formatter_set_default_charset (EM
+ g_object_notify (G_OBJECT (formatter), "default-charset");
+ }
+
++const gchar * /* (transfer full) use camel_pstring_free() to unref/free it */
++e_mail_formatter_ensure_page_token (EMailFormatter *formatter)
++{
++ const gchar *page_token;
++
++ g_return_val_if_fail (E_IS_MAIL_FORMATTER (formatter), NULL);
++
++ g_mutex_lock (&formatter->priv->property_lock);
++
++ if (!formatter->priv->page_token)
++ formatter->priv->page_token = camel_pstring_add (e_util_generate_uid (), TRUE);
++
++ page_token = camel_pstring_strdup (formatter->priv->page_token);
++
++ g_mutex_unlock (&formatter->priv->property_lock);
++
++ return page_token;
++}
++
++const gchar * /* (transfer full) use camel_pstring_free() to unref/free it */
++e_mail_formatter_dup_page_token (EMailFormatter *formatter)
++{
++ const gchar *result;
++
++ g_return_val_if_fail (E_IS_MAIL_FORMATTER (formatter), NULL);
++
++ g_mutex_lock (&formatter->priv->property_lock);
++ result = camel_pstring_strdup (formatter->priv->page_token);
++ g_mutex_unlock (&formatter->priv->property_lock);
++
++ return result;
++}
++
++void
++e_mail_formatter_reset_page_token (EMailFormatter *formatter)
++{
++ g_return_if_fail (E_IS_MAIL_FORMATTER (formatter));
++
++ g_mutex_lock (&formatter->priv->property_lock);
++
++ g_clear_pointer (&formatter->priv->page_token, camel_pstring_free);
++
++ g_mutex_unlock (&formatter->priv->property_lock);
++}
+diff -up evolution-3.60.2/src/em-format/e-mail-formatter.h.1 evolution-3.60.2/src/em-format/e-mail-formatter.h
+--- evolution-3.60.2/src/em-format/e-mail-formatter.h.1 2026-05-22 05:58:26.000000000 +0200
++++ evolution-3.60.2/src/em-format/e-mail-formatter.h 2026-09-10 17:41:31.628314925 +0200
+@@ -188,6 +188,12 @@ void e_mail_formatter_set_default_chars
+ (EMailFormatter *formatter,
+ const gchar *charset);
+
++const gchar * e_mail_formatter_ensure_page_token
++ (EMailFormatter *formatter);
++const gchar * e_mail_formatter_dup_page_token (EMailFormatter *formatter);
++void e_mail_formatter_reset_page_token
++ (EMailFormatter *formatter);
++
+ G_END_DECLS
+
+ #endif /* E_MAIL_FORMATTER_H_ */
+diff -up evolution-3.60.2/src/em-format/e-mail-formatter-headers.c.1 evolution-3.60.2/src/em-format/e-mail-formatter-headers.c
+--- evolution-3.60.2/src/em-format/e-mail-formatter-headers.c.1 2026-05-22 05:58:26.000000000 +0200
++++ evolution-3.60.2/src/em-format/e-mail-formatter-headers.c 2026-09-10 17:41:31.627978613 +0200
+@@ -476,18 +476,21 @@ format_full_headers (EMailFormatter *for
+ /* Prefer contact photos over archaic "Face" headers. */
+ if (show_sender_photo && photo_name != NULL) {
+ gchar *escaped_name;
++ const gchar *page_token;
+
+ escaped_name = g_uri_escape_string (photo_name, NULL, FALSE);
++ page_token = e_mail_formatter_ensure_page_token (formatter);
+ g_string_append (
+ buffer,
+ "<td align=\"right\" valign=\"top\">");
+ g_string_append_printf (
+ buffer,
+ "<img src=\"mail://contact-photo?mailaddr=\" "
+- "data-mailaddr=\"%s\" id=\"__evo-contact-photo\"/>",
+- escaped_name);
++ "data-mailaddr=\"%s\" evo-token=\"%s\" id=\"__evo-contact-photo\"/>",
++ escaped_name, page_token);
+ g_string_append (buffer, "</td>");
+
++ g_clear_pointer (&page_token, camel_pstring_free);
+ g_free (escaped_name);
+
+ } else if (!is_rfc822_headers && face_header_value != NULL) {
+diff -up evolution-3.60.2/src/mail/e-mail-display.c.1 evolution-3.60.2/src/mail/e-mail-display.c
+--- evolution-3.60.2/src/mail/e-mail-display.c.1 2026-05-22 05:58:26.000000000 +0200
++++ evolution-3.60.2/src/mail/e-mail-display.c 2026-09-10 17:41:31.628492964 +0200
+@@ -1356,6 +1356,7 @@ mail_display_load_changed_cb (WebKitWebV
+ e_attachment_bar_clear_possible_attachments (E_ATTACHMENT_BAR (display->priv->attachment_view));
+ g_hash_table_remove_all (display->priv->cid_attachments);
+ display->priv->loaded = FALSE;
++ e_mail_formatter_reset_page_token (display->priv->formatter);
+ } else if (load_event == WEBKIT_LOAD_FINISHED) {
+ display->priv->loaded = TRUE;
+ mail_display_update_remote_content_buttons (display);
+@@ -1370,6 +1371,7 @@ mail_display_content_loaded_cb (EWebView
+ EMailDisplay *mail_display;
+ GList *attachments, *link;
+ gchar *citation_color = NULL;
++ const gchar *page_token;
+
+ g_return_if_fail (E_IS_MAIL_DISPLAY (web_view));
+
+@@ -1424,9 +1426,12 @@ mail_display_content_loaded_cb (EWebView
+ }
+ }
+
++ page_token = e_mail_formatter_dup_page_token (mail_display->priv->formatter);
++
+ e_web_view_jsc_run_script (WEBKIT_WEB_VIEW (web_view), e_web_view_get_cancellable (web_view),
+- "Evo.MailDisplayBindDOM(%s, %s);", iframe_id, citation_color);
++ "Evo.MailDisplayBindDOM(%s, %s, %s);", iframe_id, citation_color, page_token);
+
++ g_clear_pointer (&page_token, camel_pstring_free);
+ g_free (citation_color);
+
+ if (mail_display->priv->part_list) {
+diff -up evolution-3.60.2/src/modules/vcard-inline/e-mail-formatter-vcard.c.1 evolution-3.60.2/src/modules/vcard-inline/e-mail-formatter-vcard.c
+--- evolution-3.60.2/src/modules/vcard-inline/e-mail-formatter-vcard.c.1 2026-05-22 05:58:26.000000000 +0200
++++ evolution-3.60.2/src/modules/vcard-inline/e-mail-formatter-vcard.c 2026-09-10 17:41:31.628684214 +0200
+@@ -112,6 +112,7 @@ mail_formatter_vcard_format (EMailFormat
+ const gchar *info = NULL;
+ gchar *access_key = NULL;
+ gchar *html_label;
++ const gchar *page_token;
+
+ length = g_slist_length ((GSList *) contacts);
+
+@@ -119,6 +120,7 @@ mail_formatter_vcard_format (EMailFormat
+ message_uid = e_mail_part_list_get_message_uid (context->part_list);
+ default_charset = e_mail_formatter_get_default_charset (formatter);
+ charset = e_mail_formatter_get_charset (formatter);
++ page_token = e_mail_formatter_ensure_page_token (formatter);
+
+ if (!default_charset)
+ default_charset = "";
+@@ -159,10 +161,11 @@ mail_formatter_vcard_format (EMailFormat
+ "class=\"org-gnome-vcard-display-mode-button\" "
+ "value=\"%d\" "
+ "evo-iframe-uri=\"%s\" "
++ "evo-token=\"%s\" "
+ "style=\"margin-left: 0px\""
+ "accesskey=\"%s\">%s</button>",
+ e_mail_part_get_id (part),
+- EAB_CONTACT_DISPLAY_RENDER_NORMAL, button_iframe_uri, access_key,
++ EAB_CONTACT_DISPLAY_RENDER_NORMAL, button_iframe_uri, page_token, access_key,
+ html_label);
+ g_output_stream_write_all (
+ stream, str, strlen (str), NULL, cancellable, NULL);
+@@ -189,10 +192,11 @@ mail_formatter_vcard_format (EMailFormat
+ "class=\"org-gnome-vcard-display-mode-button\" "
+ "value=\"%d\" "
+ "evo-iframe-uri=\"%s\" "
++ "evo-token=\"%s\" "
+ "style=\"margin-left: 0px\""
+ "accesskey=\"%s\" hidden>%s</button>",
+ e_mail_part_get_id (part),
+- EAB_CONTACT_DISPLAY_RENDER_COMPACT, button_iframe_uri, access_key,
++ EAB_CONTACT_DISPLAY_RENDER_COMPACT, button_iframe_uri, page_token, access_key,
+ html_label);
+ g_output_stream_write_all (
+ stream, str, strlen (str), NULL, cancellable, NULL);
+@@ -200,6 +204,7 @@ mail_formatter_vcard_format (EMailFormat
+ g_free (html_label);
+ g_free (button_iframe_uri);
+ g_clear_pointer (&access_key, g_free);
++ g_clear_pointer (&page_token, camel_pstring_free);
+
+ html_label = e_mail_formatter_parse_html_mnemonics (
+ _("Save _To Addressbook"), &access_key);
diff --git a/evolution.spec b/evolution.spec
index 18f0b79..4d7b094 100644
--- a/evolution.spec
+++ b/evolution.spec
@@ -44,7 +44,7 @@
Name: evolution
Version: 3.58.3
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Mail and calendar client for GNOME
License: GPL-2.0-or-later AND GFDL-1.3-or-later
URL: https://gitlab.gnome.org/GNOME/evolution/-/wikis/home
@@ -55,6 +55,10 @@ Source2: flatpak-evolution-wrapper.sh.in
# 0-99: General patches
# enable corresponding autopatch below to make them applied
+# https://bugzilla.redhat.com/show_bug.cgi?id=2531477
+# https://gitlab.gnome.org/GNOME/evolution/-/work_items/3388
+Patch01: 0001-CVE-2026-88859-validate-clickable-preview-elements.patch
+
# 100-199: Flatpak-specific patches
# https://gitlab.gnome.org/GNOME/evolution-data-server/-/merge_requests/144
Patch100: configurable-dbus-prefix.patch
@@ -250,7 +254,7 @@ the functionality of the installed %{name} package.
%autosetup -p1 -S gendiff -N
# General patches
-# %%autopatch -p1 -m 0 -M 99
+%autopatch -p1 -m 0 -M 99
# Flatpak-specific patches
%if 0%{?flatpak}
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-09-10 15:59 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-10 15:59 [rpms/evolution] f43: Resolves: #2531477 (CVE-2026-88859 Validate clickable preview elements) Milan Crha
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox