From: RĂ©mi Denis-Courmont Date: Tue, 13 Jan 2009 20:56:48 +0000 (+0200) Subject: decomp: handle NULL reads (skipping data) properly - fixes #2409 X-Git-Tag: 1.0.0-pre1~1356 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=227c679c6aa76d48987352a9d37d8c71eb5ac0f4;p=vlc decomp: handle NULL reads (skipping data) properly - fixes #2409 --- diff --git a/modules/stream_filter/decomp.c b/modules/stream_filter/decomp.c index 7ec7b512d0..a3395cf80f 100644 --- a/modules/stream_filter/decomp.c +++ b/modules/stream_filter/decomp.c @@ -143,6 +143,8 @@ static void *Thread (void *data) } +static int Peek (stream_t *, const uint8_t **, unsigned int); + #define MIN_BLOCK (1 << 10) #define MAX_BLOCK (1 << 20) /** @@ -155,11 +157,17 @@ static int Read (stream_t *stream, void *buf, unsigned int buflen) block_t *peeked; ssize_t length; + if (buf == NULL) /* caller skips data, get big enough peek buffer */ + buflen = Peek (stream, &(const uint8_t *){ NULL }, buflen); + if ((peeked = p_sys->peeked) != NULL) { /* dequeue peeked data */ length = (buflen > peeked->i_buffer) ? peeked->i_buffer : buflen; - memcpy (buf, peeked->p_buffer, length); - buf = ((char *)buf) + length; + if (buf != NULL) + { + memcpy (buf, peeked->p_buffer, length); + buf = ((char *)buf) + length; + } buflen -= length; peeked->p_buffer += length; peeked->i_buffer -= length;