File evince-a11y-crash.patch of Package evince
From 440ab79d832557997af3c8f17c8a244b8d1bce1a Mon Sep 17 00:00:00 2001
From: Colomban Wendling <cwendling@hypra.fr>
Date: Thu, 7 Mar 2024 17:01:38 +0100
Subject: [PATCH] libview: Fix crash in the accessible code when page cache
text is NULL
If `ev_page_cache_get_text()` returns `NULL`, it can crash both
`get_character_count()` and `get_substring()` implementations of
`EvPageAccessible`, although it's a valid return value from the former.
Fix those two implementations to handle this edge case.
---
libview/ev-page-accessible.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/libview/ev-page-accessible.c b/libview/ev-page-accessible.c
index 85995b89..2d392de3 100644
--- a/libview/ev-page-accessible.c
+++ b/libview/ev-page-accessible.c
@@ -486,6 +486,9 @@ ev_page_accessible_get_substring (AtkText *text,
return NULL;
page_text = ev_page_cache_get_text (view->page_cache, self->priv->page);
+ if (!page_text)
+ return NULL;
+
if (end_offset < 0 || end_offset > g_utf8_strlen (page_text, -1))
end_offset = strlen (page_text);
start_offset = CLAMP (start_offset, 0, end_offset);
@@ -633,11 +636,13 @@ ev_page_accessible_get_character_count (AtkText *text)
{
EvPageAccessible *self = EV_PAGE_ACCESSIBLE (text);
EvView *view = ev_page_accessible_get_view (self);
- gint retval;
+ const gchar *page_text;
- retval = g_utf8_strlen (ev_page_cache_get_text (view->page_cache, self->priv->page), -1);
+ page_text = ev_page_cache_get_text (view->page_cache, self->priv->page);
+ if (!page_text)
+ return 0;
- return retval;
+ return g_utf8_strlen (page_text, -1);
}
static gboolean
--
2.50.0