samtools / htslib

C library for high-throughput sequencing data formats
Other
803 stars 446 forks source link

potential memory leaks #138

Open domibel opened 9 years ago

domibel commented 9 years ago

Here are some potential memory leaks detected with Cppcheck 1.66

~/htslib$ cppcheck --version Cppcheck 1.66

~/htslib$ cppcheck --force . | grep error
[bgzf.c:69]: (error) Memory leak: new_flags
[bgzf.c:161]: (error) Memory leak: fp
[bgzf.c:1035]: (error) Resource leak: idx
[bgzip.c:159]: (error) Memory leak: name
[cram/cram_codecs.c:1204]: (error) Common realloc mistake: 'vals' nulled but not freed upon failure
[cram/cram_codecs.c:1205]: (error) Common realloc mistake: 'freqs' nulled but not freed upon failure
[cram/cram_codecs.c:1229]: (error) Common realloc mistake: 'vals' nulled but not freed upon failure
[cram/cram_codecs.c:1230]: (error) Common realloc mistake: 'freqs' nulled but not freed upon failure
[cram/cram_codecs.c:1246]: (error) Common realloc mistake: 'freqs' nulled but not freed upon failure
[cram/cram_codecs.c:1290]: (error) Memory leak: freqs
[cram/cram_codecs.c:1290]: (error) Memory leak: lens
[cram/cram_codecs.c:1232]: (error) Memory leak: c
[cram/sam_header.h:168]: (error) Memory leak: new_flags
[cram/sam_header.h:169]: (error) Memory leak: new_flags
[cram/cram_structs.h:63]: (error) Memory leak: new_flags
[cram/cram_structs.h:66]: (error) Memory leak: new_flags
[cram/cram_structs.h:82]: (error) Memory leak: new_flags
[cram/cram_structs.h:560]: (error) Memory leak: new_flags
[cram/cram_decode.c:137]: (error) Memory leak: hdr
[cram/cram_decode.c:373]: (error) Memory leak: m
[cram/cram_decode.c:1486]: (error) Memory leak: refs
[cram/cram_index.c:226]: (error) Common realloc mistake: 'idx_stack' nulled but not freed upon failure
[cram/cram_io.c:2820]: (error) Memory leak: header
[cram/cram_io.c:786]: (error) Memory leak: uncomp
[cram/cram_io.c:2884]: (error) Memory leak: pads
[cram/cram_io.c:3100]: (error) Memory leak: pads
[cram/cram_stats.c:163]: (error) Common realloc mistake: 'vals' nulled but not freed upon failure
[cram/cram_stats.c:164]: (error) Common realloc mistake: 'freqs' nulled but not freed upon failure
[cram/cram_stats.c:188]: (error) Common realloc mistake: 'vals' nulled but not freed upon failure
[cram/cram_stats.c:189]: (error) Common realloc mistake: 'freqs' nulled but not freed upon failure
[cram/mFILE.c:97]: (error) Common realloc mistake: 'data' nulled but not freed upon failure
[cram/pooled_alloc.c:168]: (error) Memory leak: items
[cram/thread_pool.c:286]: (error) Dereferencing 'q' after it is deallocated / released
[cram/thread_pool.c:633]: (error) Dereferencing 'p' after it is deallocated / released
[cram/zfio.c:179]: (error) Invalid number of character ({) when these macros are defined: 'HAVE_POPEN'.
[faidx.c:46]: (error) Memory leak: new_flags
[faidx.c:104]: (error) Common realloc mistake: 'name' nulled but not freed upon failure
[faidx.c:225]: (error) Memory leak: str
[hts.c:339]: (error) Common realloc mistake: 's' nulled but not freed upon failure
[hts.c:358]: (error) Common realloc mistake: 's' nulled but not freed upon failure
[hts.c:367]: (error) Common realloc mistake: 's' nulled but not freed upon failure
[hts.c:390]: (error) Common realloc mistake: 's' nulled but not freed upon failure
[hts.c:400]: (error) Common realloc mistake: 's' nulled but not freed upon failure
[hts.c:408]: (error) Common realloc mistake: 's' nulled but not freed upon failure
[hts.c:416]: (error) Common realloc mistake: 's' nulled but not freed upon failure
[hts.c:400]: (error) Memory leak: s
[hts.c:50]: (error) Memory leak: new_flags
[hts.c:473]: (error) Memory leak: new_flags
[knetfile.c:416]: (error) Memory leak: buf
[htslib/khash_str2int.h:30]: (error) Memory leak: new_flags
[sam.c:225]: (error) Common realloc mistake: 'data' nulled but not freed upon failure
[sam.c:1360]: (error) Memory leak: new_flags
[synced_bcf_reader.c:64]: (error) Common realloc mistake: 'out' nulled but not freed upon failure
[vcf.c:41]: (error) Memory leak: new_flags
[vcfutils.c:183]: (error) Memory leak: ac
daviesrob commented 8 years ago

I've re-run cppcheck to see the state of play now. Results are below, along with my opinion on if the report is true or not:

true:  [bgzf.c:166]: (error) Memory leak: fp
true:  [bgzf.c:1038]: (error) Resource leak: idx
true:  [cram/cram_codecs.c:1210]: (error) Common realloc mistake: 'vals' nulled but not freed upon failure
true:  [cram/cram_codecs.c:1211]: (error) Common realloc mistake: 'freqs' nulled but not freed upon failure
true:  [cram/cram_codecs.c:1235]: (error) Common realloc mistake: 'vals' nulled but not freed upon failure
true:  [cram/cram_codecs.c:1236]: (error) Common realloc mistake: 'freqs' nulled but not freed upon failure
true:  [cram/cram_codecs.c:1252]: (error) Common realloc mistake: 'freqs' nulled but not freed upon failure
false: [cram/cram_codecs.c:957]: (error) Memory leak: h
false: [cram/cram_codecs.c:1359]: (error) Memory leak: freqs
false: [cram/cram_codecs.c:1359]: (error) Memory leak: lens
false: [cram/cram_codecs.c:1216]: (error) Memory leak: c
false: [cram/cram_codecs.c:1630]: (error) Memory leak: c
false: [cram/cram_codecs.c:1897]: (error) Memory leak: t
true:  [cram/cram_codecs.c:1927]: (error) Memory leak: t
true:  [cram/cram_codecs.c:1296]: (error) Memory leak: freqs
true:  [cram/cram_codecs.c:1296]: (error) Memory leak: lens
true:  [cram/cram_codecs.c:1238]: (error) Memory leak: c
false: [cram/cram_decode.c:142]: (error) Memory leak: hdr
false: [cram/cram_decode.c:376]: (error) Memory leak: m
false: [cram/cram_decode.c:646]: (error) Memory leak: m
false: [cram/cram_decode.c:977]: (error) Memory leak: block_used
false: [cram/cram_decode.c:2663]: (error) Memory leak: refs
true:  [cram/cram_decode.c:2307]: (error) Memory leak: refs
true:  [cram/cram_index.c:287]: (error) Common realloc mistake: 'idx_stack' nulled but not freed upon failure
true:  [cram/cram_index.c:191]: (error) Resource leak: fp
false: [cram/cram_index.c:171]: (error) Memory leak: idx_stack
false: [cram/cram_io.c:352]: (error) Signed integer overflow for expression '(72057594037927936)-1'.
false: [cram/cram_io.c:428]: (error) Signed integer overflow for expression '(72057594037927936)-1'.
false: [cram/cram_io.c:509]: (error) Signed integer overflow for expression '(72057594037927936)-1'.
false: [cram/cram_io.c:599]: (error) Signed integer overflow for expression '(72057594037927936)-1'.
false: [cram/cram_io.c:945]: (error) Memory leak: b
false: [cram/cram_io.c:3622]: (error) Memory leak: def
false: [cram/cram_io.c:3947]: (error) Memory leak: pads
true:  [cram/cram_io.c:864]: (error) Common realloc mistake: 'out' nulled but not freed upon failure
true:  [cram/cram_io.c:889]: (error) Common realloc mistake: 'out' nulled but not freed upon failure
true:  [cram/cram_stats.c:161]: (error) Common realloc mistake: 'vals' nulled but not freed upon failure
true:  [cram/cram_stats.c:162]: (error) Common realloc mistake: 'freqs' nulled but not freed upon failure
true:  [cram/cram_stats.c:186]: (error) Common realloc mistake: 'vals' nulled but not freed upon failure
true:  [cram/cram_stats.c:187]: (error) Common realloc mistake: 'freqs' nulled but not freed upon failure
true:  [cram/mFILE.c:98]: (error) Common realloc mistake: 'data' nulled but not freed upon failure
true:  [cram/pooled_alloc.c:186]: (error) Memory leak: items
true:  [cram/rANS_static.c:866]: (error) Resource leak: infp
true:  [cram/rANS_static.c:866]: (error) Resource leak: outfp
true:  [cram/sam_header.c:426]: (error) va_list 'args' was opened but not closed by va_end().
true:  [cram/sam_header.c:726]: (error) va_list 'ap' was opened but not closed by va_end().
true:  [cram/thread_pool.c:291]: (error) Dereferencing 'q' after it is deallocated / released (if DEBUG defined)
true:  [cram/thread_pool.c:733]: (error) Dereferencing 'p' after it is deallocated / released (if DEBUG defined)
true:  [cram/vlen.c:111]: (error) va_list 'args' was opened but not closed by va_end().
true:  [cram/zfio.c:177]: (error) Invalid number of character '{' when these macros are defined: 'HAVE_POPEN'.
true:  [faidx.c:327]: (error) Memory leak: fai
true:  [hts.c:979]: (error) Common realloc mistake: 's' nulled but not freed upon failure (via htslib/hts.h hts_expand())
true:  [hts.c:998]: (error) Common realloc mistake: 's' nulled but not freed upon failure (via htslib/hts.h hts_expand())
true:  [hts.c:1007]: (error) Common realloc mistake: 's' nulled but not freed upon failure
true:  [hts.c:1030]: (error) Common realloc mistake: 's' nulled but not freed upon failure
true:  [hts.c:1040]: (error) Common realloc mistake: 's' nulled but not freed upon failure
true:  [hts.c:1048]: (error) Common realloc mistake: 's' nulled but not freed upon failure
true:  [hts.c:1056]: (error) Common realloc mistake: 's' nulled but not freed upon failure
false: [hts.c:54]: (error) Memory leak: new_flags
false: [hts.c:512]: (error) Memory leak: o
false: [hts.c:1106]: (error) Memory leak: new_flags
false: [hts.c:1186]: (error) Memory leak: idx
false: [hts.c:1801]: (error) Memory leak: off
true:  [sam.c:300]: (error) Common realloc mistake: 'data' nulled but not freed upon failure
false: [sam.c:641]: (error) Memory leak: iter
false: [sam.c:1597]: (error) Memory leak: new_flags
true:  [synced_bcf_reader.c:89]: (error) Common realloc mistake: 'out' nulled but not freed upon failure
false?: [tabix.c:171]: (error) Possible null pointer dereference: regs
false?: [tabix.c:205]: (error) Possible null pointer dereference: regs
false?: [tabix.c:225]: (error) Possible null pointer dereference: regs
true:  [test/hfile.c:172]: (error) Memory leak: original (exiting, don't care)
true:  [test/hfile.c:172]: (error) Memory leak: text (exiting, don't care)
false?: [vcf.c:1421]: (error) Possible null pointer dereference: a
false?: [vcf.c:1425]: (error) Possible null pointer dereference: a
true:  [vcf.c:800]: (error) Memory leak: h
true:  [vcf.c:1285]: (error) Memory leak: h

It looks like there may be a few things still to fix here.