[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