diff options
author | Darren Salt <linux@youmustbejoking.demon.co.uk> | 2009-01-05 23:40:10 +0000 |
---|---|---|
committer | Darren Salt <linux@youmustbejoking.demon.co.uk> | 2009-01-05 23:40:10 +0000 |
commit | 85f173cd5b12d5a53a94a2616c498cdae68fec2a (patch) | |
tree | 655dbc4dcb7e2950bde6492c66e2572d53873c6e /src/input/input_rtp.c | |
parent | 92d532f070f578c4f7f0df3daadf05497be1ed10 (diff) | |
parent | 5347abe5764b0a0ff3ef1d357ce9934a425758fa (diff) | |
download | xine-lib-85f173cd5b12d5a53a94a2616c498cdae68fec2a.tar.gz xine-lib-85f173cd5b12d5a53a94a2616c498cdae68fec2a.tar.bz2 |
Merge security fixes from 1.1.
--HG--
rename : src/demuxers/demux_nsf.c => src/combined/nsf_demuxer.c
rename : src/demuxers/demux_ogg.c => src/combined/xine_ogg_demuxer.c
rename : src/libsputext/demux_sputext.c => src/spu_dec/sputext_demuxer.c
Diffstat (limited to 'src/input/input_rtp.c')
-rw-r--r-- | src/input/input_rtp.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/input/input_rtp.c b/src/input/input_rtp.c index 2c9de54d4..4d1fb43a9 100644 --- a/src/input/input_rtp.c +++ b/src/input/input_rtp.c @@ -454,6 +454,9 @@ static off_t rtp_plugin_read (input_plugin_t *this_gen, struct timespec timeout; off_t copied = 0; + if (length < 0) + return -1; + while(length > 0) { off_t n; @@ -525,6 +528,10 @@ static buf_element_t *rtp_plugin_read_block (input_plugin_t *this_gen, buf_element_t *buf = fifo->buffer_pool_alloc (fifo); int total_bytes; + if (todo < 0 || todo > buf->size) { + buf->free_buffer (buf); + return NULL; + } buf->content = buf->mem; buf->type = BUF_DEMUX_BLOCK; @@ -610,11 +617,14 @@ static int rtp_plugin_get_optional_data (input_plugin_t *this_gen, if (data_type == INPUT_OPTIONAL_DATA_PREVIEW) { if (!this->preview_read_done) { this->preview_size = rtp_plugin_read(this_gen, this->preview, MAX_PREVIEW_SIZE); + if (this->preview_size < 0) + this->preview_size = 0; lprintf("Preview data length = %d\n", this->preview_size); this->preview_read_done = 1; } - memcpy(data, this->preview, this->preview_size); + if (this->preview_size) + memcpy(data, this->preview, this->preview_size); return this->preview_size; } else { |