[vlc-commits] demux/subtitle: TextLoad + TextUnload: prevent double-free
Filip Roséen
git at videolan.org
Fri Mar 3 16:01:16 CET 2017
vlc | branch: master | Filip Roséen <filip at atch.se> | Thu Mar 2 17:40:23 2017 +0100| [ba4699385f30536c6531273c5fb1812025cda615] | committer: Jean-Baptiste Kempf
demux/subtitle: TextLoad + TextUnload: prevent double-free
There is a relationshop between the value of txt->i_line_count and
txt->line stating that the value of txt->line is undefined if
txt->i_line_count is zero.
As the above might seem simple enough, it leads to a case double-free
if one does not pay attention and check the value of txt->i_line_count
prior to working with txt->line; as in TextUnload.
These changes make sure that we do not read from txt->line unless we
know that it is safe.
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ba4699385f30536c6531273c5fb1812025cda615
---
modules/demux/subtitle.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/modules/demux/subtitle.c b/modules/demux/subtitle.c
index ff3a64d..7e7d6f5 100644
--- a/modules/demux/subtitle.c
+++ b/modules/demux/subtitle.c
@@ -841,11 +841,12 @@ static int TextLoad( text_t *txt, stream_t *s )
}
static void TextUnload( text_t *txt )
{
- for( size_t i = 0; i < txt->i_line_count; i++ )
+ if( txt->i_line_count )
{
- free( txt->line[i] );
+ for( size_t i = 0; i < txt->i_line_count; i++ )
+ free( txt->line[i] );
+ free( txt->line );
}
- free( txt->line );
txt->i_line = 0;
txt->i_line_count = 0;
}
More information about the vlc-commits
mailing list