[FFmpeg-devel] [PATCH] filtfmts: Avoid null pointer dereferences
Himangi Saraogi
himangi774 at gmail.com
Thu Apr 2 13:13:24 CEST 2015
---
libavfilter/filtfmts.c | 58 ++++++++++++++++++++++++++++----------------------
1 file changed, 32 insertions(+), 26 deletions(-)
diff --git a/libavfilter/filtfmts.c b/libavfilter/filtfmts.c
index c1025b9..d214c6c 100644
--- a/libavfilter/filtfmts.c
+++ b/libavfilter/filtfmts.c
@@ -34,32 +34,34 @@ static void print_formats(AVFilterContext *filter_ctx)
#define PRINT_FMTS(inout, outin, INOUT) \
for (i = 0; i < filter_ctx->nb_##inout##puts; i++) { \
- if (filter_ctx->inout##puts[i]->type == AVMEDIA_TYPE_VIDEO) { \
- AVFilterFormats *fmts = \
- filter_ctx->inout##puts[i]->outin##_formats; \
- for (j = 0; j < fmts->nb_formats; j++) \
- if(av_get_pix_fmt_name(fmts->formats[j])) \
- printf(#INOUT "PUT[%d] %s: fmt:%s\n", \
- i, avfilter_pad_get_name(filter_ctx->inout##put_pads, i), \
- av_get_pix_fmt_name(fmts->formats[j])); \
- } else if (filter_ctx->inout##puts[i]->type == AVMEDIA_TYPE_AUDIO) { \
- AVFilterFormats *fmts; \
- AVFilterChannelLayouts *layouts; \
- \
- fmts = filter_ctx->inout##puts[i]->outin##_formats; \
- for (j = 0; j < fmts->nb_formats; j++) \
- printf(#INOUT "PUT[%d] %s: fmt:%s\n", \
- i, avfilter_pad_get_name(filter_ctx->inout##put_pads, i), \
- av_get_sample_fmt_name(fmts->formats[j])); \
- \
- layouts = filter_ctx->inout##puts[i]->outin##_channel_layouts; \
- for (j = 0; j < layouts->nb_channel_layouts; j++) { \
- char buf[256]; \
- av_get_channel_layout_string(buf, sizeof(buf), -1, \
- layouts->channel_layouts[j]); \
- printf(#INOUT "PUT[%d] %s: chlayout:%s\n", \
- i, avfilter_pad_get_name(filter_ctx->inout##put_pads, i), buf); \
- } \
+ if (filter_ctx->inout##puts[i]) { \
+ if (filter_ctx->inout##puts[i]->type == AVMEDIA_TYPE_VIDEO) { \
+ AVFilterFormats *fmts = \
+ filter_ctx->inout##puts[i]->outin##_formats; \
+ for (j = 0; j < fmts->nb_formats; j++) \
+ if(av_get_pix_fmt_name(fmts->formats[j])) \
+ printf(#INOUT "PUT[%d] %s: fmt:%s\n", \
+ i, avfilter_pad_get_name(filter_ctx->inout##put_pads, i), \
+ av_get_pix_fmt_name(fmts->formats[j])); \
+ } else if (filter_ctx->inout##puts[i]->type == AVMEDIA_TYPE_AUDIO) { \
+ AVFilterFormats *fmts; \
+ AVFilterChannelLayouts *layouts; \
+ \
+ fmts = filter_ctx->inout##puts[i]->outin##_formats; \
+ for (j = 0; j < fmts->nb_formats; j++) \
+ printf(#INOUT "PUT[%d] %s: fmt:%s\n", \
+ i, avfilter_pad_get_name(filter_ctx->inout##put_pads, i), \
+ av_get_sample_fmt_name(fmts->formats[j])); \
+ \
+ layouts = filter_ctx->inout##puts[i]->outin##_channel_layouts; \
+ for (j = 0; j < layouts->nb_channel_layouts; j++) { \
+ char buf[256]; \
+ av_get_channel_layout_string(buf, sizeof(buf), -1, \
+ layouts->channel_layouts[j]); \
+ printf(#INOUT "PUT[%d] %s: chlayout:%s\n", \
+ i, avfilter_pad_get_name(filter_ctx->inout##put_pads, i), buf); \
+ } \
+ } \
} \
} \
@@ -115,11 +117,15 @@ int main(int argc, char **argv)
/* create a link for each of the input pads */
for (i = 0; i < filter_ctx->nb_inputs; i++) {
AVFilterLink *link = av_mallocz(sizeof(AVFilterLink));
+ if (!link)
+ continue;
link->type = avfilter_pad_get_type(filter_ctx->input_pads, i);
filter_ctx->inputs[i] = link;
}
for (i = 0; i < filter_ctx->nb_outputs; i++) {
AVFilterLink *link = av_mallocz(sizeof(AVFilterLink));
+ if (!link)
+ continue;
link->type = avfilter_pad_get_type(filter_ctx->output_pads, i);
filter_ctx->outputs[i] = link;
}
--
1.9.1
More information about the ffmpeg-devel
mailing list