Ticket #7170: programs_mythtranscode_replex-negative-return

File programs_mythtranscode_replex-negative-return, 4.6 KB (added by Erik Hovland <erik@…>, 11 years ago)

Check negative return values

Line 
1read_avi_header can return -1 on error. We should check it just in case.
2
3From: 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
14diff --git a/mythtv/programs/mythtranscode/replex/avi.c b/mythtv/programs/mythtranscode/replex/avi.c
15index 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);
38diff --git a/mythtv/programs/mythtranscode/replex/multiplex.c b/mythtv/programs/mythtranscode/replex/multiplex.c
39index 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;
92diff --git a/mythtv/programs/mythtranscode/replex/replex.c b/mythtv/programs/mythtranscode/replex/replex.c
93index 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                }