From 52dbf22859e581fa5af74600247e9a0340d47c38 Mon Sep 17 00:00:00 2001 From: Francois Cartegnie Date: Mon, 24 Dec 2018 12:01:01 +0100 Subject: [PATCH] demux: ty: fix all warnings --- modules/demux/ty.c | 75 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 29 deletions(-) diff --git a/modules/demux/ty.c b/modules/demux/ty.c index d985c359cc..a305ab03be 100644 --- a/modules/demux/ty.c +++ b/modules/demux/ty.c @@ -268,7 +268,7 @@ static ty_rec_hdr_t *parse_chunk_headers( const uint8_t *p_buf, int i_num_recs, int *pi_payload_size); static int probe_stream(demux_t *p_demux); static void analyze_chunk(demux_t *p_demux, const uint8_t *p_chunk); -static void parse_master(demux_t *p_demux); +static int parse_master(demux_t *p_demux); static int DemuxRecVideo( demux_t *p_demux, ty_rec_hdr_t *rec_hdr, block_t *p_block_in ); static int DemuxRecAudio( demux_t *p_demux, ty_rec_hdr_t *rec_hdr, block_t *p_block_in ); @@ -1044,12 +1044,12 @@ static int ty_stream_seek_pct(demux_t *p_demux, double seek_pct) p_sys->i_cur_chunk = seek_pos / CHUNK_SIZE; /* try to read the part header (master chunk) if it's there */ - if ( vlc_stream_Seek( p_demux->s, i_cur_part * TIVO_PART_LENGTH )) + if (vlc_stream_Seek( p_demux->s, i_cur_part * TIVO_PART_LENGTH ) || + parse_master(p_demux) != VLC_SUCCESS) { /* can't seek stream */ return VLC_EGENERIC; } - parse_master(p_demux); /* now for the actual chunk */ if ( vlc_stream_Seek( p_demux->s, p_sys->i_cur_chunk * CHUNK_SIZE)) @@ -1073,8 +1073,9 @@ static int ty_stream_seek_pct(demux_t *p_demux, double seek_pct) l_skip_amt = 0; for ( int i=0; ii_cur_rec; i++) l_skip_amt += p_sys->rec_hdrs[i].l_rec_size; - vlc_stream_Seek(p_demux->s, ((p_sys->i_cur_chunk-1) * CHUNK_SIZE) + - (p_sys->i_num_recs * 16) + l_skip_amt + 4); + if( vlc_stream_Seek(p_demux->s, ((p_sys->i_cur_chunk-1) * CHUNK_SIZE) + + (p_sys->i_num_recs * 16) + l_skip_amt + 4) != VLC_SUCCESS ) + return VLC_EGENERIC; /* to hell with syncing any audio or video, just start reading records... :) */ /*p_sys->lastAudioPTS = p_sys->lastVideoPTS = VLC_TICK_INVALID;*/ @@ -1481,13 +1482,15 @@ static int ty_stream_seek_time(demux_t *p_demux, uint64_t l_seek_time) msg_Dbg(p_demux, "skipping to prior segment."); /* load previous part */ if (i_cur_part == 0) { - vlc_stream_Seek(p_demux->s, l_cur_pos); + p_sys->eof = (vlc_stream_Seek(p_demux->s, l_cur_pos) != VLC_SUCCESS); msg_Err(p_demux, "Attempt to seek past BOF"); return VLC_EGENERIC; } - vlc_stream_Seek(p_demux->s, (i_cur_part - 1) * TIVO_PART_LENGTH); + if(vlc_stream_Seek(p_demux->s, (i_cur_part - 1) * TIVO_PART_LENGTH) != VLC_SUCCESS) + return VLC_EGENERIC; i_cur_part--; - parse_master(p_demux); + if(parse_master(p_demux) != VLC_SUCCESS) + return VLC_EGENERIC; } /* maybe we need to go forward */ while (l_seek_time > p_sys->l_final_ty_pts) { @@ -1495,13 +1498,15 @@ static int ty_stream_seek_time(demux_t *p_demux, uint64_t l_seek_time) /* load next part */ if ((i_cur_part + 1) * TIVO_PART_LENGTH > p_sys->i_stream_size) { /* error; restore previous file position */ - vlc_stream_Seek(p_demux->s, l_cur_pos); + p_sys->eof = (vlc_stream_Seek(p_demux->s, l_cur_pos) != VLC_SUCCESS); msg_Err(p_demux, "seek error"); return VLC_EGENERIC; } - vlc_stream_Seek(p_demux->s, (i_cur_part + 1) * TIVO_PART_LENGTH); + if(vlc_stream_Seek(p_demux->s, (i_cur_part + 1) * TIVO_PART_LENGTH) != VLC_SUCCESS) + return VLC_EGENERIC; i_cur_part++; - parse_master(p_demux); + if(parse_master(p_demux) != VLC_SUCCESS) + return VLC_EGENERIC; } /* our target is somewhere within this part; @@ -1525,13 +1530,15 @@ static int ty_stream_seek_time(demux_t *p_demux, uint64_t l_seek_time) if (i == p_sys->i_seq_table_size) { if ((i_cur_part + 1) * TIVO_PART_LENGTH > p_sys->i_stream_size) { /* error; restore previous file position */ - vlc_stream_Seek(p_demux->s, l_cur_pos); + p_sys->eof = (vlc_stream_Seek(p_demux->s, l_cur_pos) != VLC_SUCCESS); msg_Err(p_demux, "seek error"); return VLC_EGENERIC; } - vlc_stream_Seek(p_demux->s, (i_cur_part + 1) * TIVO_PART_LENGTH); + if(vlc_stream_Seek(p_demux->s, (i_cur_part + 1) * TIVO_PART_LENGTH) != VLC_SUCCESS) + return VLC_EGENERIC; i_cur_part++; - parse_master(p_demux); + if(parse_master(p_demux) != VLC_SUCCESS) + return VLC_EGENERIC; i_seq_entry = 0; } @@ -1546,8 +1553,9 @@ static int ty_stream_seek_time(demux_t *p_demux, uint64_t l_seek_time) /* check this chunk's SEQ header timestamp */ msg_Dbg(p_demux, "has SEQ. seeking to chunk at 0x%"PRIu64, (i_cur_part * TIVO_PART_LENGTH) + l_chunk_offset); - vlc_stream_Seek(p_demux->s, (i_cur_part * TIVO_PART_LENGTH) + - l_chunk_offset); + if(vlc_stream_Seek(p_demux->s, (i_cur_part * TIVO_PART_LENGTH) + + l_chunk_offset) != VLC_SUCCESS) + return VLC_EGENERIC; // TODO: we don't have to parse the full header set; // just test the seq_rec entry for its timestamp p_sys->i_stuff_cnt = 0; @@ -1556,7 +1564,8 @@ static int ty_stream_seek_time(demux_t *p_demux, uint64_t l_seek_time) if (p_sys->i_seq_rec < 0 || p_sys->i_seq_rec > p_sys->i_num_recs) { msg_Err(p_demux, "no SEQ hdr in chunk; table had one."); /* Seek to beginning of original chunk & reload it */ - vlc_stream_Seek(p_demux->s, (l_cur_pos / CHUNK_SIZE) * CHUNK_SIZE); + if(vlc_stream_Seek(p_demux->s, (l_cur_pos / CHUNK_SIZE) * CHUNK_SIZE) != VLC_SUCCESS) + p_sys->eof = true; p_sys->i_stuff_cnt = 0; get_chunk_header(p_demux); return VLC_EGENERIC; @@ -1589,7 +1598,8 @@ static int ty_stream_seek_time(demux_t *p_demux, uint64_t l_seek_time) i_skip_cnt = 0; for (int j=0; ji_seq_rec; j++) i_skip_cnt += p_sys->rec_hdrs[j].l_rec_size; - vlc_stream_Read(p_demux->s, NULL, i_skip_cnt); + if(vlc_stream_Read(p_demux->s, NULL, i_skip_cnt) != i_skip_cnt) + return VLC_EGENERIC; p_sys->i_cur_rec = p_sys->i_seq_rec; //p_sys->l_last_ty_pts = p_sys->rec_hdrs[p_sys->i_seq_rec].l_ty_pts; //p_sys->l_last_ty_pts_sync = p_sys->lastAudioPTS; @@ -1601,7 +1611,7 @@ static int ty_stream_seek_time(demux_t *p_demux, uint64_t l_seek_time) /* parse a master chunk, filling the SEQ table and other variables. * We assume the stream is currently pointing to it. */ -static void parse_master(demux_t *p_demux) +static int parse_master(demux_t *p_demux) { demux_sys_t *p_sys = p_demux->p_sys; uint8_t mst_buf[32]; @@ -1618,7 +1628,8 @@ static void parse_master(demux_t *p_demux) free(p_sys->seq_table); /* parse header info */ - vlc_stream_Read(p_demux->s, mst_buf, 32); + if( vlc_stream_Read(p_demux->s, mst_buf, 32) != 32 ) + return VLC_EGENERIC; uint32_t i_map_size = U32_AT(&mst_buf[20]); /* size of bitmask, in bytes */ uint32_t i = U32_AT(&mst_buf[28]); /* size of SEQ table, in bytes */ @@ -1629,7 +1640,7 @@ static void parse_master(demux_t *p_demux) if(p_sys->i_seq_table_size == 0) { p_sys->seq_table = NULL; - return; + return VLC_SUCCESS; } /* parse all the entries */ @@ -1637,16 +1648,19 @@ static void parse_master(demux_t *p_demux) if (p_sys->seq_table == NULL) { p_sys->i_seq_table_size = 0; - return; + return VLC_SUCCESS; } for (unsigned j=0; ji_seq_table_size; j++) { - vlc_stream_Read(p_demux->s, mst_buf, 8); + if(vlc_stream_Read(p_demux->s, mst_buf, 8) != 8) + return VLC_EGENERIC; p_sys->seq_table[j].l_timestamp = U64_AT(&mst_buf[0]); if (i_map_size > 8) { msg_Err(p_demux, "Unsupported SEQ bitmap size in master chunk"); - vlc_stream_Read(p_demux->s, NULL, i_map_size); + if(vlc_stream_Read(p_demux->s, NULL, i_map_size) != i_map_size) + return VLC_EGENERIC; } else { - vlc_stream_Read(p_demux->s, mst_buf + 8, i_map_size); + if(vlc_stream_Read(p_demux->s, mst_buf + 8, i_map_size) != i_map_size) + return VLC_EGENERIC; memcpy(p_sys->seq_table[j].chunk_bitmask, &mst_buf[8], i_map_size); } } @@ -1667,7 +1681,7 @@ static void parse_master(demux_t *p_demux) i_pts_secs / 3600, (i_pts_secs / 60) % 60, i_pts_secs % 60 ); /* seek past this chunk */ - vlc_stream_Seek(p_demux->s, i_save_pos + CHUNK_SIZE); + return vlc_stream_Seek(p_demux->s, i_save_pos + CHUNK_SIZE); } @@ -1844,7 +1858,8 @@ static int get_chunk_header(demux_t *p_demux) /* if we have left-over filler space from the last chunk, get that */ if (p_sys->i_stuff_cnt > 0) { - vlc_stream_Read( p_demux->s, NULL, p_sys->i_stuff_cnt); + if(vlc_stream_Read(p_demux->s, NULL, p_sys->i_stuff_cnt) != p_sys->i_stuff_cnt) + return 0; p_sys->i_stuff_cnt = 0; } @@ -1863,7 +1878,8 @@ static int get_chunk_header(demux_t *p_demux) if( U32_AT( &p_peek[ 0 ] ) == TIVO_PES_FILEID ) { /* parse master chunk */ - parse_master(p_demux); + if(parse_master(p_demux) != VLC_SUCCESS) + return 0; return get_chunk_header(p_demux); } @@ -1893,7 +1909,8 @@ static int get_chunk_header(demux_t *p_demux) p_sys->rec_hdrs = NULL; /* skip past the 4 bytes we "peeked" earlier */ - vlc_stream_Read( p_demux->s, NULL, 4 ); + if(vlc_stream_Read(p_demux->s, NULL, 4) != 4) + return 0; /* read the record headers into a temp buffer */ p_hdr_buf = xmalloc(i_num_recs * 16); -- 2.11.4.GIT