diff options
author | Owen Taylor <otaylor@redhat.com> | 2005-07-26 18:07:59 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2005-07-26 18:07:59 +0000 |
commit | 8d45583fa1f13d77feb5d96abeae59d21ad5fe65 (patch) | |
tree | 17eeeaf4847625186a334393821864f61738c14c /pango/pango-glyph-item.c | |
parent | 5e762f5014222d71358a28474e7f53dfed609112 (diff) | |
download | pango-8d45583fa1f13d77feb5d96abeae59d21ad5fe65.tar.gz |
Fixes for signed/unsigned in PangoAttrIterator ((#166700, Morten Welinder)
2005-07-26 Owen Taylor <otaylor@redhat.com>
Fixes for signed/unsigned in PangoAttrIterator ((#166700,
Morten Welinder)
* pango/pango-attributes.c (pango_attr_iterator_range):
Clamp results to G_MAXINT to avoid negative numbers from
signed/unsigned conversions.
* pango/pango-attributes.c: Make PangoAttrIterator
start_index/end_index unsigned to match PangoAttribute.
Change various local variables to match.
* pango/ellipsize.c (advance_iterator_to)
pango/pango-attributes.c (pango_attr_iterator_range)
pango/pango-glyph-item.c (pango_glyph_item_apply_attrs)
pango/pango-layout.c (pango_layout_line_get_empty_extents):
Always check the return value from pango_attr_iterator()
to deal with potential infinite loops when trying to
advance to position G_MAXINT.
* pango/pango-layout.c (pango_layout_set_text): Handle
the case where the text passed in is longer than
than G_MAXINT and length < 0.
* pango/pango-attributes.c (pango_attr_list_splice): Be
careful about integer overflow - clamp addition.
(#163246, Morten Welinder)
Diffstat (limited to 'pango/pango-glyph-item.c')
-rw-r--r-- | pango/pango-glyph-item.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/pango/pango-glyph-item.c b/pango/pango-glyph-item.c index 1245ca8c..065871f8 100644 --- a/pango/pango-glyph-item.c +++ b/pango/pango-glyph-item.c @@ -483,14 +483,13 @@ pango_glyph_item_apply_attrs (PangoGlyphItem *glyph_item, /* Advance the attr iterator to the start of the item */ - while (TRUE) + do { pango_attr_iterator_range (iter, &range_start, &range_end); if (range_end > glyph_item->item->offset) break; - - pango_attr_iterator_next (iter); } + while (pango_attr_iterator_next (iter)); state.segment_attrs = pango_attr_iterator_get_attrs (iter); @@ -505,6 +504,7 @@ pango_glyph_item_apply_attrs (PangoGlyphItem *glyph_item, have_cluster; have_cluster = _pango_glyph_item_iter_next_cluster (&state.iter)) { + gboolean have_next; /* [range_start,range_end] is the first range that intersects * the current cluster. @@ -526,18 +526,17 @@ pango_glyph_item_apply_attrs (PangoGlyphItem *glyph_item, * leaving [range_start,range_end] being the first range that * intersects the next cluster. */ - while (TRUE) + do { - /* If any ranges end in this cluster, then the next cluster - * goes into a separate segment - */ - if (range_end <= state.iter.end_index) - start_new_segment = TRUE; - if (range_end > state.iter.end_index) /* Range intersects next cluster */ break; - pango_attr_iterator_next (iter); + /* Since ranges end in this cluster, the next cluster goes into a + * separate segment + */ + start_new_segment = TRUE; + + have_next = pango_attr_iterator_next (iter); pango_attr_iterator_range (iter, &range_start, &range_end); if (range_start >= state.iter.end_index) /* New range doesn't intersect this cluster */ @@ -564,6 +563,7 @@ pango_glyph_item_apply_attrs (PangoGlyphItem *glyph_item, state.segment_attrs = g_slist_concat (state.segment_attrs, pango_attr_iterator_get_attrs (iter)); } + while (have_next); } out: |