[vlc-commits] codec: substx3g: fix off by one styling

Francois Cartegnie git at videolan.org
Tue Jan 9 14:59:25 CET 2018


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Tue Jan  9 14:36:07 2018 +0100| [0a791f45f10e0c1c8b1411a77911a826f2e8da4d] | committer: Francois Cartegnie

codec: substx3g: fix off by one styling

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0a791f45f10e0c1c8b1411a77911a826f2e8da4d
---

 modules/codec/substx3g.c | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/modules/codec/substx3g.c b/modules/codec/substx3g.c
index 1cb9544ba4..261ccb8451 100644
--- a/modules/codec/substx3g.c
+++ b/modules/codec/substx3g.c
@@ -370,19 +370,23 @@ static int Decode( decoder_t *p_dec, block_t *p_block )
             while( i_cur_record++ < i_nbrecords && it.i_payload >= 12 )
             {
                 uint16_t i_start = __MIN( GetWBE(it.p_payload), i_psz_bytelength - 1 );
-                uint16_t i_end =  __MIN( GetWBE(it.p_payload + 2), i_psz_bytelength - 1 );
-
-                text_style_t *p_style = text_style_Create( STYLE_NO_DEFAULTS );
-                if( p_style )
+                uint16_t i_end =  GetWBE(it.p_payload + 2); /* index is past last char */
+                if( i_start < i_end )
                 {
-                    if( (p_style->i_style_flags = ConvertFlags( it.p_payload[6] )) )
-                        p_style->i_features |= STYLE_HAS_FLAGS;
-                    p_style->i_font_size = it.p_payload[7];
-                    p_style->i_font_color = GetDWBE(&it.p_payload[8]) >> 8;// RGBA -> RGB
-                    p_style->i_font_alpha = GetDWBE(&it.p_payload[8]) & 0xFF;
-                    p_style->i_features |= STYLE_HAS_FONT_COLOR | STYLE_HAS_FONT_ALPHA;
-                    ApplySegmentStyle( &p_segment3g, i_start, i_end, p_style );
-                    text_style_Delete( p_style );
+                    i_end = VLC_CLIP( i_end - 1, i_start, i_psz_bytelength - 1 );
+
+                    text_style_t *p_style = text_style_Create( STYLE_NO_DEFAULTS );
+                    if( p_style )
+                    {
+                        if( (p_style->i_style_flags = ConvertFlags( it.p_payload[6] )) )
+                            p_style->i_features |= STYLE_HAS_FLAGS;
+                        p_style->i_font_size = it.p_payload[7];
+                        p_style->i_font_color = GetDWBE(&it.p_payload[8]) >> 8;// RGBA -> RGB
+                        p_style->i_font_alpha = GetDWBE(&it.p_payload[8]) & 0xFF;
+                        p_style->i_features |= STYLE_HAS_FONT_COLOR | STYLE_HAS_FONT_ALPHA;
+                        ApplySegmentStyle( &p_segment3g, i_start, i_end, p_style );
+                        text_style_Delete( p_style );
+                    }
                 }
 
                 it.p_payload += 12; it.i_payload -= 12;



More information about the vlc-commits mailing list