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

openSUSE Build Service is sponsored by