This just broke all my elm apps.

Program received signal SIGSEGV, Segmentation fault.
0xb7b01aea in _evas_bidi_unicode_to_fribidichar (dest=0x80435000 <Address
0x80435000 out of bounds>,
    src=0x80434ff0 L"\x800\x800\x800́" <Address 0x80435000 out of bounds>)
at lib/evas/common/language/evas_bidi_utils.c:66
66         while (*src) *dest++ = *src++;
(gdb) bt
#0  0xb7b01aea in _evas_bidi_unicode_to_fribidichar (dest=0x80435000
<Address 0x80435000 out of bounds>,
    src=0x80434ff0 L"\x800\x800\x800́" <Address 0x80435000 out of bounds>)
at lib/evas/common/language/evas_bidi_utils.c:66
#1  0xb7b01ea9 in evas_bidi_paragraph_props_get (
    eina_ustr=0x80422d20
L"\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800
\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800
\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800
\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800
\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800
\x800\x800́\x800\x800\x800́"..., len=190, segment_idxs=0x0) at
lib/evas/common/language/evas_bidi_utils.c:251
#2  0xb7a4d388 in _evas_object_text_layout (eo_obj=0x8000f079,
o=0x802b0258,
    text=0x80422d20
L"\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800
\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800
\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800
\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800
\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800
\x800́\x800\x800\x800́"...) at lib/evas/canvas/evas_object_text.c:706
#3  0xb7a529ae in _evas_object_text_recalc (eo_obj=0x8000f079,
    text=0x80422d20
L"\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800
\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800
\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800
\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800
\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800\x800́\x800\x800
\x800́\x800\x800\x800́"...) at lib/evas/canvas/evas_object_text.c:2234
#4  0xb7a4e0bb in _evas_text_text_set (eo_obj=0x8000f079, o=0x802b0258,
_text=0xb792ab46 "") at lib/evas/canvas/evas_object_text.c:989
#5  0xb7a5417e in evas_obj_text_set (text=0xb792ab46 "") at
../src/lib/evas/canvas/evas_text.eo.c:44
#6  0xb790c9ed in _edje_text_recalc_apply (ed=0x8029d9e0, ep=0x801f0c58,
params=0x801f0c64, chosen_desc=0x802c4680, calc_only=1 '\001')
    at lib/edje/edje_text.c:474
#7  0xb787853a in _edje_part_recalc_single_text (sc=1, ed=0x8029d9e0,
ep=0x801f0c58, desc=0x802c4680, chosen_desc=0x802c4680, params=0x801f0c64,
    minw=0xbfffe7a0, minh=0xbfffe7a4, maxw=0xbfffe7a8, maxh=0xbfffe7ac) at
lib/edje/edje_calc.c:1488
#8  0xb787a43b in _edje_part_recalc_single (ed=0x8029d9e0, ep=0x801f0c58,
desc=0x802c4680, chosen_desc=0x802c4680, center=0x0, light=0x0, persp=0x0,
    rel1_to_x=0x801f0a38, rel1_to_y=0x0, rel2_to_x=0x801efa48,
rel2_to_y=0x0, confine_to=0x0, threshold=0x0, params=0x801f0c64, set=0x0,
mmw=0, mmh=0, pos=0)
    at lib/edje/edje_calc.c:2394
#9  0xb787d617 in _edje_part_recalc (ed=0x8029d9e0, ep=0x801f0c58, flags=3,
state=0x0) at lib/edje/edje_calc.c:3390
#10 0xb787638e in _edje_recalc_do (ed=0x8029d9e0) at
lib/edje/edje_calc.c:690
#11 0xb79150b4 in _edje_object_size_min_restricted_calc (obj=0x8000b059,
ed=0x8029d9e0, minw=0xbfffebe4, minh=0xbfffebe8, restrictedw=5,
restrictedh=5)
    at lib/edje/edje_util.c:2991
#12 0xb790535c in edje_obj_size_min_restricted_calc (minw=0xbfffebe4,
minh=0xbfffebe8, restrictedw=5, restrictedh=5) at
lib/edje/edje_object.eo.c:472
#13 0xb790a744 in edje_object_size_min_restricted_calc (obj=0x8000b059,
minw=0xbfffebe4, minh=0xbfffebe8, restrictedw=5, restrictedh=5)
    at lib/edje/edje_object.eo.c:1462
#14 0xb7d442b6 in _elm_check_elm_layout_sizing_eval (obj=0x8000ae58,
_pd=0x8029d8a8) at elm_check.c:169
#15 0xb7e0d861 in elm_obj_layout_sizing_eval () at elm_layout.eo.c:66
#16 0xb7e07ac5 in _visuals_refresh (obj=0x8000ae58, sd=0x8029d888) at
elm_layout.c:287
#17 0xb7e07ea8 in _elm_layout_theme_internal (obj=0x8000ae58,
sd=0x8029d888) at elm_layout.c:350
#18 0xb7e07fea in _elm_layout_elm_widget_theme_apply (obj=0x8000ae58,
sd=0x8029d888) at elm_layout.c:370
#19 0xb7ec8b9a in elm_obj_widget_theme_apply () at elm_widget.eo.c:443
#20 0xb7d44482 in _elm_check_elm_widget_theme_apply (obj=0x8000ae58,
sd=0x8029d8a8) at elm_check.c:205
#21 0xb7ec8b9a in elm_obj_widget_theme_apply () at elm_widget.eo.c:443
#22 0xb7eb33e7 in elm_widget_theme (obj=0x8000ae58) at elm_widget.c:883
#23 0xb7eb9bda in _elm_widget_style_set (obj=0x8000ae58, sd=0x8029d7e0,
style=0x800b0cfa "toggle") at elm_widget.c:3428
#24 0xb7ec2a26 in elm_obj_widget_style_set (style=0x800b0cfa "toggle") at
elm_widget.eo.c:84
#25 0xb7ec9fc0 in elm_widget_style_set (obj=0x8000ae58, style=0x800b0cfa
"toggle") at elm_widget.eo.c:798
#26 0xb7e1ee13 in elm_object_style_set (obj=0x8000ae58, style=0x800b0cfa
"toggle") at elm_main.c:1255
#27 0x80014715 in my_win_main (autorun=0x0, test_win_only=0 '\000') at
test.c:466
#28 0x80017c97 in elm_main (argc=1, argv=0xbffff0b4) at test.c:921
#29 0x80017d49 in main (argc=1, argv=0xbffff0b4) at test.c:934

Daniel Juyung Seo (SeoZ)


On Wed, Aug 13, 2014 at 9:15 AM, Carsten Haitzler <ras...@rasterman.com>
wrote:

> raster pushed a commit to branch master.
>
>
> http://git.enlightenment.org/core/efl.git/commit/?id=d539152156e50e81e18c3eb226db8095f83bd7d1
>
> commit d539152156e50e81e18c3eb226db8095f83bd7d1
> Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
> Date:   Wed Aug 13 09:03:02 2014 +0900
>
>     address non nul terminated string due to strncpy
>
>     this addresses CID 1230994. as such  eina_unicode_unicode_to_utf8()
>     always returns a nul terminated string. so it's guaranteed. but yes -
>     if string is 7 bytes or longer it will not put a nul byte on the
>     destination. as such for a single unicode char this can never happen
>     as in utf8 it's 6 bytes. but since eina_unicode_unicode_to_utf8()
>     safely returns a nul terminated string at all times - we can just use
>     strcpy safely. no need for strncpy. also handle null return from
>     eina_unicode_unicode_to_utf8()
> ---
>  src/lib/evas/canvas/evas_object_textblock.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/src/lib/evas/canvas/evas_object_textblock.c
> b/src/lib/evas/canvas/evas_object_textblock.c
> index 930c94b..ae1466c 100644
> --- a/src/lib/evas/canvas/evas_object_textblock.c
> +++ b/src/lib/evas/canvas/evas_object_textblock.c
> @@ -6137,8 +6137,13 @@ _escaped_char_get(const char *s, const char *s_end)
>            return NULL;
>
>          utf8_char = eina_unicode_unicode_to_utf8(uchar, NULL);
> -        strncpy(utf8_escape, utf8_char, sizeof(utf8_escape));
> -        free(utf8_char);
> +        // eina_unicode_unicode_to_utf8() always creates a string that
> +        // is nul terminated - guaranteed
> +        if (utf8_char)
> +          {
> +             strcpy(utf8_escape, utf8_char);
> +             free(utf8_char);
> +          }
>
>          return utf8_escape;
>       }
>
> --
>
>
>
------------------------------------------------------------------------------
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to