summaryrefslogtreecommitdiff
path: root/libview
diff options
context:
space:
mode:
authorJason Crain <[email protected]>2017-03-26 13:33:29 -0500
committerraveit65 <[email protected]>2018-04-05 17:11:43 +0200
commitbc7af6015676aee9d14c2c4dd522c484c4551d2a (patch)
treec2617905bcd2fe2b87acd3cc185e6c9fdecc0532 /libview
parent7c7c7ef28efd900ef0cb3e1ae302f202fce92ea9 (diff)
downloadatril-bc7af6015676aee9d14c2c4dd522c484c4551d2a.tar.bz2
atril-bc7af6015676aee9d14c2c4dd522c484c4551d2a.tar.xz
a11y: Return correct start and end offsets
This modifies ev_page_accessible_get_range_for_boundary to ensure that the start and end offsets it returns are within the allowed range. https://bugzilla.gnome.org/show_bug.cgi?id=777992 origin commit: https://git.gnome.org/browse/evince/commit/?id=e95a4e3
Diffstat (limited to 'libview')
-rw-r--r--libview/ev-page-accessible.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/libview/ev-page-accessible.c b/libview/ev-page-accessible.c
index 13ce8b0d..8d07a31c 100644
--- a/libview/ev-page-accessible.c
+++ b/libview/ev-page-accessible.c
@@ -543,23 +543,26 @@ ev_page_accessible_get_range_for_boundary (AtkText *text,
if (!log_attrs)
return;
+ if (offset < 0 || offset >= n_attrs)
+ return;
+
switch (boundary_type) {
case ATK_TEXT_BOUNDARY_CHAR:
start = offset;
end = offset + 1;
break;
case ATK_TEXT_BOUNDARY_WORD_START:
- for (start = offset; start >= 0 && !log_attrs[start].is_word_start; start--);
- for (end = offset + 1; end <= n_attrs && !log_attrs[end].is_word_start; end++);
+ for (start = offset; start > 0 && !log_attrs[start].is_word_start; start--);
+ for (end = offset + 1; end < n_attrs && !log_attrs[end].is_word_start; end++);
break;
case ATK_TEXT_BOUNDARY_SENTENCE_START:
- for (start = offset; start >= 0; start--) {
+ for (start = offset; start > 0; start--) {
if (log_attrs[start].is_mandatory_break && treat_as_soft_return (view, self->priv->page, log_attrs, start - 1))
continue;
if (log_attrs[start].is_sentence_start)
break;
}
- for (end = offset + 1; end <= n_attrs; end++) {
+ for (end = offset + 1; end < n_attrs; end++) {
if (log_attrs[end].is_mandatory_break && treat_as_soft_return (view, self->priv->page, log_attrs, end - 1))
continue;
if (log_attrs[end].is_sentence_start)
@@ -567,8 +570,8 @@ ev_page_accessible_get_range_for_boundary (AtkText *text,
}
break;
case ATK_TEXT_BOUNDARY_LINE_START:
- for (start = offset; start >= 0 && !log_attrs[start].is_mandatory_break; start--);
- for (end = offset + 1; end <= n_attrs && !log_attrs[end].is_mandatory_break; end++);
+ for (start = offset; start > 0 && !log_attrs[start].is_mandatory_break; start--);
+ for (end = offset + 1; end < n_attrs && !log_attrs[end].is_mandatory_break; end++);
break;
default:
/* The "END" boundary types are deprecated */