Index: libavcodec/vorbisdec.c |
diff --git a/libavcodec/vorbisdec.c b/libavcodec/vorbisdec.c |
index f71d606dadf76d37cc6b161eb0fec869cb3a688a..443c0aac857ab26ba0f915bc333cf41557b85fa2 100644 |
--- a/libavcodec/vorbisdec.c |
+++ b/libavcodec/vorbisdec.c |
@@ -197,38 +197,46 @@ static void vorbis_free(vorbis_context *vc) |
av_freep(&vc->channel_floors); |
av_freep(&vc->saved); |
- for (i = 0; i < vc->residue_count; i++) |
- av_free(vc->residues[i].classifs); |
- av_freep(&vc->residues); |
+ if (vc->residues) { |
+ for (i = 0; i < vc->residue_count; i++) |
+ av_free(vc->residues[i].classifs); |
+ av_freep(&vc->residues); |
+ } |
av_freep(&vc->modes); |
ff_mdct_end(&vc->mdct[0]); |
ff_mdct_end(&vc->mdct[1]); |
- for (i = 0; i < vc->codebook_count; ++i) { |
- av_free(vc->codebooks[i].codevectors); |
- free_vlc(&vc->codebooks[i].vlc); |
+ if (vc->codebooks) { |
+ for (i = 0; i < vc->codebook_count; ++i) { |
+ av_free(vc->codebooks[i].codevectors); |
+ free_vlc(&vc->codebooks[i].vlc); |
+ } |
+ av_freep(&vc->codebooks); |
} |
- av_freep(&vc->codebooks); |
- for (i = 0; i < vc->floor_count; ++i) { |
- if (vc->floors[i].floor_type == 0) { |
- av_free(vc->floors[i].data.t0.map[0]); |
- av_free(vc->floors[i].data.t0.map[1]); |
- av_free(vc->floors[i].data.t0.book_list); |
- av_free(vc->floors[i].data.t0.lsp); |
- } else { |
- av_free(vc->floors[i].data.t1.list); |
+ if (vc->floors) { |
+ for (i = 0; i < vc->floor_count; ++i) { |
+ if (vc->floors[i].floor_type == 0) { |
+ av_free(vc->floors[i].data.t0.map[0]); |
+ av_free(vc->floors[i].data.t0.map[1]); |
+ av_free(vc->floors[i].data.t0.book_list); |
+ av_free(vc->floors[i].data.t0.lsp); |
+ } else { |
+ av_free(vc->floors[i].data.t1.list); |
+ } |
} |
+ av_freep(&vc->floors); |
} |
- av_freep(&vc->floors); |
- for (i = 0; i < vc->mapping_count; ++i) { |
- av_free(vc->mappings[i].magnitude); |
- av_free(vc->mappings[i].angle); |
- av_free(vc->mappings[i].mux); |
+ if (vc->mappings) { |
+ for (i = 0; i < vc->mapping_count; ++i) { |
+ av_free(vc->mappings[i].magnitude); |
+ av_free(vc->mappings[i].angle); |
+ av_free(vc->mappings[i].mux); |
+ } |
+ av_freep(&vc->mappings); |
} |
- av_freep(&vc->mappings); |
} |
// Parse setup header ------------------------------------------------- |