summaryrefslogtreecommitdiff
path: root/src/demuxers/demux_real.c
diff options
context:
space:
mode:
authorDarren Salt <linux@youmustbejoking.demon.co.uk>2008-08-14 21:33:24 +0100
committerDarren Salt <linux@youmustbejoking.demon.co.uk>2008-08-14 21:33:24 +0100
commit730a2bb5692f1896542d51b005e33561f17fb4ff (patch)
tree17ca7af362d34fd4b15d96ad635e687eee8a0d5e /src/demuxers/demux_real.c
parent9b70d5f03f02bb3497eb7291e9858e34388a9aa1 (diff)
parent2c0dd5e118628a7cb2130ee89f78fe6e85240916 (diff)
downloadxine-lib-730a2bb5692f1896542d51b005e33561f17fb4ff.tar.gz
xine-lib-730a2bb5692f1896542d51b005e33561f17fb4ff.tar.bz2
Merge from 1.1.
--HG-- rename : src/libfaad/Makefile.am => contrib/libfaad/Makefile.am rename : src/libfaad/analysis.h => contrib/libfaad/analysis.h rename : src/libfaad/bits.c => contrib/libfaad/bits.c rename : src/libfaad/bits.h => contrib/libfaad/bits.h rename : src/libfaad/cfft.c => contrib/libfaad/cfft.c rename : src/libfaad/cfft.h => contrib/libfaad/cfft.h rename : src/libfaad/cfft_tab.h => contrib/libfaad/cfft_tab.h rename : src/libfaad/codebook/hcb.h => contrib/libfaad/codebook/hcb.h rename : src/libfaad/codebook/hcb_1.h => contrib/libfaad/codebook/hcb_1.h rename : src/libfaad/codebook/hcb_10.h => contrib/libfaad/codebook/hcb_10.h rename : src/libfaad/codebook/hcb_11.h => contrib/libfaad/codebook/hcb_11.h rename : src/libfaad/codebook/hcb_2.h => contrib/libfaad/codebook/hcb_2.h rename : src/libfaad/codebook/hcb_3.h => contrib/libfaad/codebook/hcb_3.h rename : src/libfaad/codebook/hcb_4.h => contrib/libfaad/codebook/hcb_4.h rename : src/libfaad/codebook/hcb_5.h => contrib/libfaad/codebook/hcb_5.h rename : src/libfaad/codebook/hcb_6.h => contrib/libfaad/codebook/hcb_6.h rename : src/libfaad/codebook/hcb_7.h => contrib/libfaad/codebook/hcb_7.h rename : src/libfaad/codebook/hcb_8.h => contrib/libfaad/codebook/hcb_8.h rename : src/libfaad/codebook/hcb_9.h => contrib/libfaad/codebook/hcb_9.h rename : src/libfaad/codebook/hcb_sf.h => contrib/libfaad/codebook/hcb_sf.h rename : src/libfaad/common.c => contrib/libfaad/common.c rename : src/libfaad/common.h => contrib/libfaad/common.h rename : src/libfaad/decoder.c => contrib/libfaad/decoder.c rename : src/libfaad/decoder.h => contrib/libfaad/decoder.h rename : src/libfaad/drc.c => contrib/libfaad/drc.c rename : src/libfaad/drc.h => contrib/libfaad/drc.h rename : src/libfaad/drm_dec.c => contrib/libfaad/drm_dec.c rename : src/libfaad/drm_dec.h => contrib/libfaad/drm_dec.h rename : src/libfaad/error.c => contrib/libfaad/error.c rename : src/libfaad/error.h => contrib/libfaad/error.h rename : src/libfaad/filtbank.c => contrib/libfaad/filtbank.c rename : src/libfaad/filtbank.h => contrib/libfaad/filtbank.h rename : src/libfaad/fixed.h => contrib/libfaad/fixed.h rename : src/libfaad/hcr.c => contrib/libfaad/hcr.c rename : src/libfaad/huffman.c => contrib/libfaad/huffman.c rename : src/libfaad/huffman.h => contrib/libfaad/huffman.h rename : src/libfaad/ic_predict.c => contrib/libfaad/ic_predict.c rename : src/libfaad/ic_predict.h => contrib/libfaad/ic_predict.h rename : src/libfaad/iq_table.h => contrib/libfaad/iq_table.h rename : src/libfaad/is.c => contrib/libfaad/is.c rename : src/libfaad/is.h => contrib/libfaad/is.h rename : src/libfaad/kbd_win.h => contrib/libfaad/kbd_win.h rename : src/libfaad/lt_predict.c => contrib/libfaad/lt_predict.c rename : src/libfaad/lt_predict.h => contrib/libfaad/lt_predict.h rename : src/libfaad/mdct.c => contrib/libfaad/mdct.c rename : src/libfaad/mdct.h => contrib/libfaad/mdct.h rename : src/libfaad/mdct_tab.h => contrib/libfaad/mdct_tab.h rename : src/libfaad/mp4.c => contrib/libfaad/mp4.c rename : src/libfaad/mp4.h => contrib/libfaad/mp4.h rename : src/libfaad/ms.c => contrib/libfaad/ms.c rename : src/libfaad/ms.h => contrib/libfaad/ms.h rename : src/libfaad/output.c => contrib/libfaad/output.c rename : src/libfaad/output.h => contrib/libfaad/output.h rename : src/libfaad/pns.c => contrib/libfaad/pns.c rename : src/libfaad/pns.h => contrib/libfaad/pns.h rename : src/libfaad/ps_dec.c => contrib/libfaad/ps_dec.c rename : src/libfaad/ps_dec.h => contrib/libfaad/ps_dec.h rename : src/libfaad/ps_syntax.c => contrib/libfaad/ps_syntax.c rename : src/libfaad/ps_tables.h => contrib/libfaad/ps_tables.h rename : src/libfaad/pulse.c => contrib/libfaad/pulse.c rename : src/libfaad/pulse.h => contrib/libfaad/pulse.h rename : src/libfaad/rvlc.c => contrib/libfaad/rvlc.c rename : src/libfaad/rvlc.h => contrib/libfaad/rvlc.h rename : src/libfaad/sbr_dct.c => contrib/libfaad/sbr_dct.c rename : src/libfaad/sbr_dct.h => contrib/libfaad/sbr_dct.h rename : src/libfaad/sbr_dec.c => contrib/libfaad/sbr_dec.c rename : src/libfaad/sbr_dec.h => contrib/libfaad/sbr_dec.h rename : src/libfaad/sbr_e_nf.c => contrib/libfaad/sbr_e_nf.c rename : src/libfaad/sbr_e_nf.h => contrib/libfaad/sbr_e_nf.h rename : src/libfaad/sbr_fbt.c => contrib/libfaad/sbr_fbt.c rename : src/libfaad/sbr_fbt.h => contrib/libfaad/sbr_fbt.h rename : src/libfaad/sbr_hfadj.c => contrib/libfaad/sbr_hfadj.c rename : src/libfaad/sbr_hfadj.h => contrib/libfaad/sbr_hfadj.h rename : src/libfaad/sbr_hfgen.c => contrib/libfaad/sbr_hfgen.c rename : src/libfaad/sbr_hfgen.h => contrib/libfaad/sbr_hfgen.h rename : src/libfaad/sbr_huff.c => contrib/libfaad/sbr_huff.c rename : src/libfaad/sbr_huff.h => contrib/libfaad/sbr_huff.h rename : src/libfaad/sbr_noise.h => contrib/libfaad/sbr_noise.h rename : src/libfaad/sbr_qmf.c => contrib/libfaad/sbr_qmf.c rename : src/libfaad/sbr_qmf.h => contrib/libfaad/sbr_qmf.h rename : src/libfaad/sbr_qmf_c.h => contrib/libfaad/sbr_qmf_c.h rename : src/libfaad/sbr_syntax.c => contrib/libfaad/sbr_syntax.c rename : src/libfaad/sbr_syntax.h => contrib/libfaad/sbr_syntax.h rename : src/libfaad/sbr_tf_grid.c => contrib/libfaad/sbr_tf_grid.c rename : src/libfaad/sbr_tf_grid.h => contrib/libfaad/sbr_tf_grid.h rename : src/libfaad/sine_win.h => contrib/libfaad/sine_win.h rename : src/libfaad/specrec.c => contrib/libfaad/specrec.c rename : src/libfaad/specrec.h => contrib/libfaad/specrec.h rename : src/libfaad/ssr.c => contrib/libfaad/ssr.c rename : src/libfaad/ssr.h => contrib/libfaad/ssr.h rename : src/libfaad/ssr_fb.c => contrib/libfaad/ssr_fb.c rename : src/libfaad/ssr_fb.h => contrib/libfaad/ssr_fb.h rename : src/libfaad/ssr_ipqf.c => contrib/libfaad/ssr_ipqf.c rename : src/libfaad/ssr_ipqf.h => contrib/libfaad/ssr_ipqf.h rename : src/libfaad/ssr_win.h => contrib/libfaad/ssr_win.h rename : src/libfaad/structs.h => contrib/libfaad/structs.h rename : src/libfaad/syntax.c => contrib/libfaad/syntax.c rename : src/libfaad/syntax.h => contrib/libfaad/syntax.h rename : src/libfaad/tns.c => contrib/libfaad/tns.c rename : src/libfaad/tns.h => contrib/libfaad/tns.h rename : src/libfaad/xine_faad_decoder.c => src/audio_dec/xine_faad_decoder.c rename : src/demuxers/demux_ogg.c => src/combined/xine_ogg_demuxer.c
Diffstat (limited to 'src/demuxers/demux_real.c')
-rw-r--r--src/demuxers/demux_real.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/demuxers/demux_real.c b/src/demuxers/demux_real.c
index 105dc60a5..00e5f49fe 100644
--- a/src/demuxers/demux_real.c
+++ b/src/demuxers/demux_real.c
@@ -90,11 +90,11 @@ typedef struct {
uint32_t start_time;
uint32_t preroll;
uint32_t duration;
- char stream_name_size;
+ size_t stream_name_size;
char *stream_name;
- char mime_type_size;
+ size_t mime_type_size;
char *mime_type;
- uint32_t type_specific_len;
+ size_t type_specific_len;
char *type_specific_data;
} mdpr_t;
@@ -115,7 +115,7 @@ typedef struct {
mdpr_t *mdpr;
int sps, cfs, w, h;
int block_align;
- int frame_size;
+ size_t frame_size;
uint8_t *frame_buffer;
uint32_t frame_num_bytes;
uint32_t sub_packet_cnt;
@@ -359,8 +359,12 @@ static void real_parse_audio_specific_data (demux_real_t *this,
stream->frame_num_bytes = 0;
stream->sub_packet_cnt = 0;
+ if (!stream->frame_buffer)
+ xprintf (this->stream->xine, XINE_VERBOSITY_LOG,
+ "demux_real: failed to allocate the audio frame buffer!\n");
+
xprintf (this->stream->xine, XINE_VERBOSITY_LOG,
- "demux_real: buf type 0x%08x frame size %dblock align %d\n", stream->buf_type,
+ "demux_real: buf type 0x%08x frame size %zu block align %d\n", stream->buf_type,
stream->frame_size, stream->block_align);
}
@@ -1370,13 +1374,20 @@ static int demux_real_send_chunk(demux_plugin_t *this_gen) {
int cfs = this->audio_stream->cfs;
int w = this->audio_stream->w;
int spc = this->audio_stream->sub_packet_cnt;
- int x, pos;
+ int x;
+ off_t pos;
+ const size_t fs = this->audio_stream->frame_size;
+
+ if (!buffer) {
+ this->status = DEMUX_FINISHED;
+ return this->status;
+ }
switch (this->audio_stream->buf_type) {
case BUF_AUDIO_28_8:
for (x = 0; x < sph / 2; x++) {
pos = x * 2 * w + spc * cfs;
- if(this->input->read(this->input, buffer + pos, cfs) < cfs) {
+ if(pos + cfs > fs || this->input->read(this->input, buffer + pos, cfs) < cfs) {
xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG,
"demux_real: failed to read audio chunk\n");
@@ -1389,7 +1400,7 @@ static int demux_real_send_chunk(demux_plugin_t *this_gen) {
case BUF_AUDIO_ATRK:
for (x = 0; x < w / sps; x++) {
pos = sps * (sph * x + ((sph + 1) / 2) * (spc & 1) + (spc >> 1));
- if(this->input->read(this->input, buffer + pos, sps) < sps) {
+ if(pos + sps > fs || this->input->read(this->input, buffer + pos, sps) < sps) {
xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG,
"demux_real: failed to read audio chunk\n");
@@ -1400,7 +1411,7 @@ static int demux_real_send_chunk(demux_plugin_t *this_gen) {
break;
case BUF_AUDIO_SIPRO:
pos = spc * w;
- if(this->input->read(this->input, buffer + pos, w) < w) {
+ if(pos + w > fs || this->input->read(this->input, buffer + pos, w) < w) {
xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG,
"demux_real: failed to read audio chunk\n");