1 | read_avi_header can return -1 on error. We should check it just in case. |
---|
2 | |
---|
3 | From: Erik Hovland <erik@hovland.org> |
---|
4 | |
---|
5 | |
---|
6 | --- |
---|
7 | |
---|
8 | mythtv/programs/mythtranscode/replex/avi.c | 6 ++-- |
---|
9 | mythtv/programs/mythtranscode/replex/multiplex.c | 36 ++++++++++++---------- |
---|
10 | mythtv/programs/mythtranscode/replex/replex.c | 2 + |
---|
11 | 3 files changed, 24 insertions(+), 20 deletions(-) |
---|
12 | |
---|
13 | |
---|
14 | diff --git a/mythtv/programs/mythtranscode/replex/avi.c b/mythtv/programs/mythtranscode/replex/avi.c |
---|
15 | index f7145cd..f8052bc 100644 |
---|
16 | --- a/mythtv/programs/mythtranscode/replex/avi.c |
---|
17 | +++ b/mythtv/programs/mythtranscode/replex/avi.c |
---|
18 | @@ -144,8 +144,8 @@ int avi_read_index(avi_context *ac, int fd) |
---|
19 | |
---|
20 | if (!(ac->avih_flags & AVI_HASINDEX)) return -2; |
---|
21 | fprintf(stderr,"READING INDEX\n"); |
---|
22 | - start = lseek(fd, 0, SEEK_CUR); |
---|
23 | - lseek(fd, ac->movi_length+ac->movi_start+4, SEEK_SET); |
---|
24 | + if ((start = lseek(fd, 0, SEEK_CUR)) < 0) return -3; |
---|
25 | + if (lseek(fd, ac->movi_length+ac->movi_start+4, SEEK_SET) < 0) return -4; |
---|
26 | |
---|
27 | read(fd,buf,4); |
---|
28 | tag = getle32(buf); |
---|
29 | @@ -155,7 +155,7 @@ int avi_read_index(avi_context *ac, int fd) |
---|
30 | fprintf(stderr," tag: %c%c%c%c\n ",*cc, |
---|
31 | *(cc+1),*(cc+2),*(cc+3)); |
---|
32 | |
---|
33 | - lseek(fd, start, SEEK_SET); |
---|
34 | + if (lseek(fd, start, SEEK_SET) < 0 ) return -5; |
---|
35 | return -1; |
---|
36 | } |
---|
37 | isize = getsize(fd); |
---|
38 | diff --git a/mythtv/programs/mythtranscode/replex/multiplex.c b/mythtv/programs/mythtranscode/replex/multiplex.c |
---|
39 | index 1b60b9c..250884b 100644 |
---|
40 | --- a/mythtv/programs/mythtranscode/replex/multiplex.c |
---|
41 | +++ b/mythtv/programs/mythtranscode/replex/multiplex.c |
---|
42 | @@ -299,11 +299,12 @@ static void writeout_video(multiplex_t *mx) |
---|
43 | |
---|
44 | nlength = length; |
---|
45 | |
---|
46 | - written = write_video_pes( mx->pack_size, mx->apidn, mx->ac3n, |
---|
47 | - viu->pts+mx->video_delay, |
---|
48 | - viu->dts+mx->video_delay, |
---|
49 | - mx->SCR, mx->muxr, outbuf, &nlength, ptsdts, |
---|
50 | - mx->vrbuffer); |
---|
51 | + if ((written = write_video_pes( mx->pack_size, mx->apidn, mx->ac3n, |
---|
52 | + viu->pts+mx->video_delay, |
---|
53 | + viu->dts+mx->video_delay, |
---|
54 | + mx->SCR, mx->muxr, outbuf, &nlength, ptsdts, |
---|
55 | + mx->vrbuffer)) < 0) |
---|
56 | + return; |
---|
57 | |
---|
58 | length -= nlength; |
---|
59 | dummy_add(&mx->vdbuf, uptsdiff( viu->dts+mx->video_delay,0) |
---|
60 | @@ -660,17 +661,20 @@ static void writeout_ext(multiplex_t *mx, int n) |
---|
61 | arbuffer, aiu->length); |
---|
62 | */ |
---|
63 | |
---|
64 | - if (type == MPEG_AUDIO) |
---|
65 | - written = bwrite_audio_pes( mx->pack_size, mx->apidn, mx->ac3n |
---|
66 | - , n, pts, mx->SCR, mx->muxr, |
---|
67 | - outbuf, &nlength, PTS_ONLY, |
---|
68 | - inbuf, inbc); |
---|
69 | - else |
---|
70 | - written = bwrite_ac3_pes( mx->pack_size, mx->apidn, mx->ac3n |
---|
71 | - , n, pts, mx->SCR, mx->muxr, |
---|
72 | - outbuf, &nlength, PTS_ONLY, |
---|
73 | - nframes, ac3_off, |
---|
74 | - inbuf, inbc , aiu->length); |
---|
75 | + if (type == MPEG_AUDIO) { |
---|
76 | + if ((written = bwrite_audio_pes( mx->pack_size, mx->apidn, |
---|
77 | + mx->ac3n, n, pts, mx->SCR, |
---|
78 | + mx->muxr, outbuf, &nlength, |
---|
79 | + PTS_ONLY, inbuf, inbc)) < 0) |
---|
80 | + return; |
---|
81 | + } else { |
---|
82 | + if ((written = bwrite_ac3_pes( mx->pack_size, mx->apidn, |
---|
83 | + mx->ac3n, n, pts, mx->SCR, |
---|
84 | + mx->muxr, outbuf, &nlength, |
---|
85 | + PTS_ONLY, nframes, ac3_off, inbuf, |
---|
86 | + inbc , aiu->length)) < 0) |
---|
87 | + return; |
---|
88 | + } |
---|
89 | |
---|
90 | if (aiu->err == DUMMY_ERR){ |
---|
91 | fakelength -= length-nlength; |
---|
92 | diff --git a/mythtv/programs/mythtranscode/replex/replex.c b/mythtv/programs/mythtranscode/replex/replex.c |
---|
93 | index a0fc133..06cb220 100644 |
---|
94 | --- a/mythtv/programs/mythtranscode/replex/replex.c |
---|
95 | +++ b/mythtv/programs/mythtranscode/replex/replex.c |
---|
96 | @@ -2081,7 +2081,7 @@ void init_replex(struct replex *rx,int bufsize) |
---|
97 | |
---|
98 | memset(ac, 0, sizeof(avi_context)); |
---|
99 | re = read_avi_header(ac, rx->fd_in); |
---|
100 | - if (avi_read_index(ac,rx->fd_in) < 0){ |
---|
101 | + if (avi_read_index(ac,rx->fd_in) < 0 || re < 0){ |
---|
102 | fprintf(stderr, "Error reading index\n"); |
---|
103 | exit(1); |
---|
104 | } |
---|