From e79d2665e8a4c80d7650e96906545579cb1bf930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Poo-Caama=C3=B1o?= Date: Thu, 18 Feb 2016 16:44:40 -0800 Subject: 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(+) (limited to 'libview') diff --git a/libview/ev-view-accessible.c b/libview/ev-view-accessible.c index d48c97c7..8274aced 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 -- cgit v1.2.1