]> git.sesse.net Git - ffmpeg/commitdiff
memleak (seems ive missed that under the obfuscated indention)
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 7 Apr 2007 22:47:55 +0000 (22:47 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 7 Apr 2007 22:47:55 +0000 (22:47 +0000)
Originally committed as revision 8659 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/bethsoftvid.c

index 0aaac3c1b8b4052d4bbaf8cab2292577bd4ff16f..63306acb329389e03c65df6a794eaa33df051fd1 100644 (file)
@@ -124,7 +124,7 @@ static int read_frame(BVID_DemuxContext *vid, ByteIOContext *pb, AVPacket *pkt,
     // set the y offset if it exists (decoder header data should be in data section)
     if(block_type == VIDEO_YOFFSET_DIFFERENCE_FRAME_BLOCK){
         if(get_buffer(pb, &vidbuf_start[vidbuf_nbytes], 2) != 2)
-            return AVERROR_IO;
+            goto fail;
         vidbuf_nbytes += 2;
     }
 
@@ -142,7 +142,7 @@ static int read_frame(BVID_DemuxContext *vid, ByteIOContext *pb, AVPacket *pkt,
             bytes_copied += rle_num_bytes - 0x80;
         } else if(rle_num_bytes){ // plain sequence
             if(get_buffer(pb, &vidbuf_start[vidbuf_nbytes], rle_num_bytes) != rle_num_bytes)
-                return AVERROR_IO;
+                goto fail;
             vidbuf_nbytes += rle_num_bytes;
             bytes_copied += rle_num_bytes;
         }
@@ -153,12 +153,12 @@ static int read_frame(BVID_DemuxContext *vid, ByteIOContext *pb, AVPacket *pkt,
             break;
         }
         if(bytes_copied > npixels)
-            return -1;    // error
+            goto fail;
     } while(rle_num_bytes);
 
     // copy data into packet
-    if(av_new_packet(pkt, vidbuf_nbytes))
-        return AVERROR_NOMEM;
+    if(av_new_packet(pkt, vidbuf_nbytes) < 0)
+        goto fail;
     memcpy(pkt->data, vidbuf_start, vidbuf_nbytes);
     av_free(vidbuf_start);
 
@@ -168,6 +168,9 @@ static int read_frame(BVID_DemuxContext *vid, ByteIOContext *pb, AVPacket *pkt,
 
     vid->nframes--;  // used to check if all the frames were read
     return vidbuf_nbytes;
+fail:
+    av_free(vidbuf_start);
+    return -1;
 }
 
 static int vid_read_packet(AVFormatContext *s,