<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>