Memory and fd leak fixes - ID: 3436668
authorErik de Castro Lopo <erikd@mega-nerd.com>
Sat, 4 Feb 2012 06:30:57 +0000 (17:30 +1100)
committerErik de Castro Lopo <erikd@mega-nerd.com>
Sun, 5 Feb 2012 05:51:32 +0000 (16:51 +1100)
http://sourceforge.net/tracker/?func=detail&aid=3436668&group_id=13478&atid=313478

src/flac/main.c
src/metaflac/operations_shorthand_cuesheet.c
src/metaflac/operations_shorthand_picture.c
src/test_libFLAC++/metadata_manip.cpp

index 650d1b4..e673a78 100644 (file)
@@ -1723,6 +1723,7 @@ int encode_file(const char *infilename, FLAC__bool is_first_file, FLAC__bool is_
                else {
                        if(!memcmp(lookahead, "ID3", 3)) {
                                flac__utils_printf(stderr, 1, "ERROR: input file %s has an ID3v2 tag\n", infilename);
+                               conditional_fclose(encode_infile);
                                return 1;
                        }
                        else if(!memcmp(lookahead, "RIFF", 4) && !memcmp(lookahead+8, "WAVE", 4))
@@ -1932,6 +1933,8 @@ int encode_file(const char *infilename, FLAC__bool is_first_file, FLAC__bool is_
                        if(0 == encode_options.format_options.iff.foreign_metadata) {
                                flac__utils_printf(stderr, 1, "ERROR: creating foreign metadata object\n");
                                conditional_fclose(encode_infile);
+                               if(internal_outfilename != 0)
+                                       free(internal_outfilename);
                                return 1;
                        }
                }
index bbad0b5..548df17 100644 (file)
@@ -196,6 +196,8 @@ FLAC__bool export_cs_to(const char *filename, const FLAC__StreamMetadata *cueshe
        reflen = strlen(filename) + 7 + 1;
        if(0 == (ref = malloc(reflen))) {
                fprintf(stderr, "%s: ERROR: allocating memory\n", filename);
+               if(f != stdout)
+                       fclose(f);
                return false;
        }
 
index 549caca..bc51296 100644 (file)
@@ -163,6 +163,8 @@ FLAC__bool export_pic_to(const char *filename, const FLAC__StreamMetadata *pictu
 
        if(fwrite(picture->data.picture.data, 1, len, f) != len) {
                fprintf(stderr, "%s: ERROR: writing PICTURE data to file\n", filename);
+               if(f != stdout)
+                       fclose(f);
                return false;
        }
 
index 9bf0eb2..36116ff 100644 (file)
@@ -352,8 +352,10 @@ static bool write_chain_(FLAC::Metadata::Chain &chain, bool use_padding, bool pr
                        FILE *file = fopen(filename, "r+b");
                        if(0 == file)
                                return false; /*@@@@ chain status still says OK though */
-                       if(!chain.write(use_padding, (::FLAC__IOHandle)file, callbacks))
+                       if(!chain.write(use_padding, (::FLAC__IOHandle)file, callbacks)) {
+                               fclose(file);
                                return false;
+                       }
                        fclose(file);
                }
        }