summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2010-09-18 17:24:39 +0000
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-11-02 04:17:04 +0200
commit044fc491fa71fafb8fac624c26142aa172d27b6c (patch)
treeea252b7d96863a7b5ca4f68d1726c7e72d885805
parent7aa202d9a7e6efb87a17c6dcf83008fc513f1201 (diff)
downloadmpv-044fc491fa71fafb8fac624c26142aa172d27b6c.tar.bz2
mpv-044fc491fa71fafb8fac624c26142aa172d27b6c.tar.xz
demux_mkv: fix decoded length calculation of LZO decompression
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32305 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r--libmpdemux/demux_mkv.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c
index 807fcd68f8..de43972c95 100644
--- a/libmpdemux/demux_mkv.c
+++ b/libmpdemux/demux_mkv.c
@@ -368,6 +368,7 @@ static void demux_mkv_decode(mkv_track_t *track, uint8_t *src,
#endif
} else if (enc->comp_algo == 2) {
/* lzo encoded track */
+ int out_avail;
int dstlen = *size * 3;
*dest = NULL;
@@ -375,7 +376,8 @@ static void demux_mkv_decode(mkv_track_t *track, uint8_t *src,
int srclen = *size;
*dest = talloc_realloc_size(NULL, *dest,
dstlen + AV_LZO_OUTPUT_PADDING);
- int result = av_lzo1x_decode(*dest, &dstlen, src, &srclen);
+ out_avail = dstlen;
+ int result = av_lzo1x_decode(*dest, &out_avail, src, &srclen);
if (result == 0)
break;
if (!(result & AV_LZO_OUTPUT_FULL)) {
@@ -389,7 +391,7 @@ static void demux_mkv_decode(mkv_track_t *track, uint8_t *src,
"[mkv] lzo decompression buffer too small.\n");
dstlen *= 2;
}
- *size = dstlen;
+ *size = dstlen - out_avail;
} else if (enc->comp_algo == 3) {
*dest = talloc_size(NULL, *size + enc->comp_settings_len);
memcpy(*dest, enc->comp_settings, enc->comp_settings_len);