summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@gnome.org>2006-11-07 23:50:59 +0000
committerTor Lillqvist <tml@src.gnome.org>2006-11-07 23:50:59 +0000
commitf85eedf9c5fc0f1798888fb6b91c346c65037d8c (patch)
tree0d65f262538b304cf1fc0719b16ff71b08617a57
parent783cbba709f5f7eaa533f0d32cfac9cc7bd1c128 (diff)
downloadpango-f85eedf9c5fc0f1798888fb6b91c346c65037d8c.tar.gz
Don't index vis2log_map[] with a negative value. Fixes #368972.
2006-11-08 Behdad Esfahbod <behdad@gnome.org> * pango/pango-layout.c (pango_layout_move_cursor_visually): Don't index vis2log_map[] with a negative value. Fixes #368972.
-rw-r--r--ChangeLog5
-rw-r--r--pango/pango-layout.c7
2 files changed, 9 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 1a51e7f0..5789fecb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-11-08 Behdad Esfahbod <behdad@gnome.org>
+
+ * pango/pango-layout.c (pango_layout_move_cursor_visually): Don't
+ index vis2log_map[] with a negative value. Fixes #368972.
+
2006-10-24 Behdad Esfahbod <behdad@gnome.org>
* examples/Makefile.am (cairosimple_LDADD): Do not require pangoft2
diff --git a/pango/pango-layout.c b/pango/pango-layout.c
index 44657180..420b42e2 100644
--- a/pango/pango-layout.c
+++ b/pango/pango-layout.c
@@ -1371,7 +1371,7 @@ pango_layout_move_cursor_visually (PangoLayout *layout,
int *log2vis_map;
int *vis2log_map;
int n_vis;
- int vis_pos, log_pos;
+ int vis_pos, vis_pos_old, log_pos;
int start_offset;
gboolean off_start = FALSE;
gboolean off_end = FALSE;
@@ -1465,14 +1465,15 @@ pango_layout_move_cursor_visually (PangoLayout *layout,
vis2log_map = pango_layout_line_get_vis2log_map (line, strong);
+ vis_pos_old = vis_pos + (direction > 0 ? 1 : -1);
log_pos = g_utf8_pointer_to_offset (layout->text + line->start_index,
- layout->text + line->start_index + vis2log_map[vis_pos]);
+ layout->text + line->start_index + vis2log_map[vis_pos_old]);
do
{
- int vis_pos_old = vis_pos;
vis_pos += direction > 0 ? 1 : -1;
log_pos += g_utf8_pointer_to_offset (layout->text + line->start_index + vis2log_map[vis_pos_old],
layout->text + line->start_index + vis2log_map[vis_pos]);
+ vis_pos_old = vis_pos;
}
while (vis_pos > 0 && vis_pos < n_vis &&
!layout->log_attrs[start_offset + log_pos].is_cursor_position);