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_http.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_http.c')
| -rw-r--r-- | src/input/input_http.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/input/input_http.c b/src/input/input_http.c index 83d4bdff1..3b87e003d 100644 --- a/src/input/input_http.c +++ b/src/input/input_http.c @@ -389,6 +389,9 @@ static off_t http_plugin_read (input_plugin_t *this_gen, num_bytes = 0; + if (nlen < 0) + return -1; + if (this->curpos < this->preview_size) { if (nlen > (this->preview_size - this->curpos)) @@ -405,7 +408,7 @@ static off_t http_plugin_read (input_plugin_t *this_gen, n = nlen - num_bytes; - if (n) { + if (n > 0) { int read_bytes; read_bytes = http_plugin_read_int (this, &buf[num_bytes], n); @@ -471,6 +474,11 @@ static buf_element_t *http_plugin_read_block (input_plugin_t *this_gen, fifo_buf off_t total_bytes; buf_element_t *buf = fifo->buffer_pool_alloc (fifo); + if (todo < 0 || todo > buf->size) { + buf->free_buffer (buf); + return NULL; + } + buf->content = buf->mem; buf->type = BUF_DEMUX_BLOCK; @@ -522,7 +530,7 @@ static off_t http_plugin_seek(input_plugin_t *this_gen, off_t offset, int origin if ((origin == SEEK_CUR) && (offset >= 0)) { for (;((int)offset) - BUFSIZE > 0; offset -= BUFSIZE) { - if( !this_gen->read (this_gen, this->seek_buf, BUFSIZE) ) + if( this_gen->read (this_gen, this->seek_buf, BUFSIZE) <= 0 ) return this->curpos; } @@ -544,7 +552,7 @@ static off_t http_plugin_seek(input_plugin_t *this_gen, off_t offset, int origin offset -= this->curpos; for (;((int)offset) - BUFSIZE > 0; offset -= BUFSIZE) { - if( !this_gen->read (this_gen, this->seek_buf, BUFSIZE) ) + if( this_gen->read (this_gen, this->seek_buf, BUFSIZE) <= 0 ) return this->curpos; } @@ -970,6 +978,7 @@ static int http_plugin_open (input_plugin_t *this_gen ) { this->preview_size = http_plugin_read_int (this, this->preview, MAX_PREVIEW_SIZE); } if (this->preview_size < 0) { + this->preview_size = 0; xine_log (this->stream->xine, XINE_LOG_MSG, _("input_http: read error %d\n"), errno); return -12; } |
