[evince/gnome-3-24] a11y: Return correct start and end offsets



commit 11659af378a97ed43e2871cf4179122543634336
Author: Jason Crain <jason inspiresomeone us>
Date:   Sun Mar 26 13:33:29 2017 -0500

    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

 libview/ev-page-accessible.c |   15 +++++++++------
 1 files changed, 9 insertions(+), 6 deletions(-)
---
diff --git a/libview/ev-page-accessible.c b/libview/ev-page-accessible.c
index 0a8a082..5ba820e 100644
--- a/libview/ev-page-accessible.c
+++ b/libview/ev-page-accessible.c
@@ -541,23 +541,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)
@@ -565,8 +568,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 */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]