Blob Blame History Raw
From 005d88500dc47f285d83fc5451cd5cea0e8c14a3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Germ=C3=A1n=20Poo-Caama=C3=B1o?= <gpoo@gnome.org>
Date: Thu, 18 Feb 2016 16:44:40 -0800
Subject: [PATCH] Check legal boundaries of accessible pages

Fixes https://github.com/mate-desktop/atril/issues/302

Keep the accessible view end page under the limits of the document.
Sometimes when a document is reloaded, it may have less pages making
the end page higher than the actual number of pages.

Fix end_page reset after reload a page

When a document is reloaded, and the accessible end_page is higher
than the number of pages, it must be re-initialized to the number
of pages minus one because it refers to elements in an array.

Fix https://bugzilla.gnome.org/show_bug.cgi?id=735744

origin commits:
https://git.gnome.org/browse/evince/commit/?id=feff531
https://git.gnome.org/browse/evince/commit/?id=e6e0d29
---
 libview/ev-view-accessible.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/libview/ev-view-accessible.c b/libview/ev-view-accessible.c
index d48c97c..8274ace 100644
--- a/libview/ev-view-accessible.c
+++ b/libview/ev-view-accessible.c
@@ -380,6 +380,13 @@ initialize_children (EvViewAccessible *self)
 		child = ev_page_accessible_new (self, i);
 		g_ptr_array_add (self->priv->children, child);
 	}
+        /* When a document is reloaded, it may have less pages.
+         * We need to update the end page accordingly to avoid
+         * invalid access to self->priv->children
+         * See https://bugzilla.gnome.org/show_bug.cgi?id=735744
+         */
+	if (self->priv->end_page >= n_pages)
+		self->priv->end_page = n_pages - 1;
 }
 
 static void
-- 
2.13.6