Ignore:
Timestamp:
Nov 18, 2012, 6:54:57 PM (9 years ago)
Author:
Sam Hocevar
Message:

string: avoid an infinite loop with some invalid UTF-8 sequences, and add a
unit test for the problem. Bug found by Bastian Märkisch <bmaerkisch@web.de>.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca/string.c

    r4840 r4851  
    257257    int len = 0;
    258258
    259     if(y < 0 || y >= (int)cv->height || x >= (int)cv->width)
    260     {
    261         while(*s)
     259    if (y < 0 || y >= (int)cv->height || x >= (int)cv->width)
     260    {
     261        while (*s)
    262262        {
    263263            len += caca_utf32_is_fullwidth(caca_utf8_to_utf32(s, &rd)) ? 2 : 1;
    264             s += rd;
     264            s += rd ? rd : 1;
    265265        }
    266266        return len;
    267267    }
    268268
    269     while(*s)
     269    while (*s)
    270270    {
    271271        uint32_t ch = caca_utf8_to_utf32(s, &rd);
    272272
    273         if(x + len >= -1 && x + len < (int)cv->width)
     273        if (x + len >= -1 && x + len < (int)cv->width)
    274274            caca_put_char(cv, x + len, y, ch);
    275275
    276276        len += caca_utf32_is_fullwidth(ch) ? 2 : 1;
    277         s += rd;
     277        s += rd ? rd : 1;
    278278    }
    279279
Note: See TracChangeset for help on using the changeset viewer.