<html><head></head><body><div class="gmail_quote">Le 9 août 2017 13:44:03 GMT+03:00, KO Myung-Hun <komh78@gmail.com> a écrit :<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<pre class="k9mail">uni_char_t is 2-byte size on OS/2. However, FriBidiChar is 4-byte size.<br />While conversion, the memory pointed by uni_char_t * is corrupted.<br />---<br /> modules/text_renderer/freetype.c | 25 +++++++++++++++++++++++--<br /> 1 file changed, 23 insertions(+), 2 deletions(-)<br /><br />diff --git a/modules/text_renderer/freetype.c b/modules/text_renderer/freetype.c<br />index b9da7bf28c..0ae6c16809 100644<br />--- a/modules/text_renderer/freetype.c<br />+++ b/modules/text_renderer/freetype.c<br />@@ -1153,16 +1153,31 @@ static int ProcessLines( filter_t *p_filter,<br />                          FT_BBox     *p_bbox,<br />                          int         *pi_max_face_height,<br /> <br />-                         uni_char_t *psz_text,<br />+                         uni_char_t *psz_uni_text,<br />                          text_style_t **pp_styles,<br />                          uint32_t *pi_k_dates,<br />                          int i_len )<br /> {<br />     filter_sys_t   *p_sys = p_filter->p_sys;<br />-    uni_char_t     *p_fribidi_string = NULL;<br />+    uint32_t       *psz_text = (uint32_t*)psz_uni_text;<br />+    uint32_t       *p_fribidi_string = NULL;<br />     text_style_t   **pp_fribidi_styles = NULL;<br />     int            *p_new_positions = NULL;<br /> <br />+#ifdef __OS2__<br />+    uint32_t *psz_text_buf;<br />+<br />+    psz_text = malloc( (i_len + 1) * sizeof(*psz_text) );<br />+    if( !psz_text )<br />+        return VLC_ENOMEM;<br />+<br />+    /* Conversion uni_char_t string to FriBidiChar string */<br />+    for( int i = 0; i <= i_len; i++ )<br />+        psz_text[i] = psz_uni_text[i];<br />+<br />+    psz_text_buf = psz_text;<br />+#endif<br />+<br /> #if defined(HAVE_FRIBIDI)<br />     {<br />         int    *p_old_positions;<br />@@ -1183,6 +1198,9 @@ static int ProcessLines( filter_t *p_filter,<br />             free( p_new_positions );<br />             free( p_fribidi_string );<br />             free( pp_fribidi_styles );<br />+#ifdef __OS2__<br />+            free( psz_text_buf );<br />+#endif<br />             return VLC_ENOMEM;<br />         }<br /> <br />@@ -1567,6 +1585,9 @@ static int ProcessLines( filter_t *p_filter,<br />     if( p_face )<br />         FT_Done_Face( p_face );<br /> <br />+#ifdef __OS2__<br />+    free( psz_text_buf );<br />+#endif<br />     free( pp_fribidi_styles );<br />     free( p_fribidi_string );<br />     free( pi_karaoke_bar );</pre></blockquote></div><br clear="all">That does not look right from a very quick glance. It should probably do whatever Windows does.<br>
-- <br>
Rémi Denis-Courmont<br>
Typed on an inconvenient virtual keyboard</body></html>