]> git.sesse.net Git - ffmpeg/commitdiff
lavfi/dnn: check the return value from sws_getContext
authorJun Zhao <barryjzhao@tencent.com>
Wed, 9 Dec 2020 09:53:10 +0000 (17:53 +0800)
committerGuo, Yejun <yejun.guo@intel.com>
Sat, 12 Dec 2020 05:34:30 +0000 (13:34 +0800)
sws_getContext may be return NULL, and it's will be dereferenced,
so add the check.

Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
libavfilter/dnn/dnn_io_proc.c

index db13d7f5ce617b764f4f0b82e452904b9e7479d7..c9b49be3bda4282660e96e2ce15ce5cd7eb149b4 100644 (file)
@@ -41,6 +41,13 @@ DNNReturnType proc_from_dnn_to_frame(AVFrame *frame, DNNData *output, void *log_
                                  frame->height,
                                  AV_PIX_FMT_GRAY8,
                                  0, NULL, NULL, NULL);
+        if (!sws_ctx) {
+            av_log(log_ctx, AV_LOG_ERROR, "Impossible to create scale context for the conversion "
+                "fmt:%s s:%dx%d -> fmt:%s s:%dx%d\n",
+                av_get_pix_fmt_name(AV_PIX_FMT_GRAYF32), frame->width * 3, frame->height,
+                av_get_pix_fmt_name(AV_PIX_FMT_GRAY8),   frame->width * 3, frame->height);
+            return DNN_ERROR;
+        }
         sws_scale(sws_ctx, (const uint8_t *[4]){(const uint8_t *)output->data, 0, 0, 0},
                            (const int[4]){frame->width * 3 * sizeof(float), 0, 0, 0}, 0, frame->height,
                            (uint8_t * const*)frame->data, frame->linesize);
@@ -64,6 +71,13 @@ DNNReturnType proc_from_dnn_to_frame(AVFrame *frame, DNNData *output, void *log_
                                  frame->height,
                                  AV_PIX_FMT_GRAY8,
                                  0, NULL, NULL, NULL);
+        if (!sws_ctx) {
+            av_log(log_ctx, AV_LOG_ERROR, "Impossible to create scale context for the conversion "
+                "fmt:%s s:%dx%d -> fmt:%s s:%dx%d\n",
+                av_get_pix_fmt_name(AV_PIX_FMT_GRAYF32), frame->width, frame->height,
+                av_get_pix_fmt_name(AV_PIX_FMT_GRAY8),   frame->width, frame->height);
+            return DNN_ERROR;
+        }
         sws_scale(sws_ctx, (const uint8_t *[4]){(const uint8_t *)output->data, 0, 0, 0},
                            (const int[4]){frame->width * sizeof(float), 0, 0, 0}, 0, frame->height,
                            (uint8_t * const*)frame->data, frame->linesize);
@@ -97,6 +111,13 @@ DNNReturnType proc_from_frame_to_dnn(AVFrame *frame, DNNData *input, void *log_c
                                  frame->height,
                                  AV_PIX_FMT_GRAYF32,
                                  0, NULL, NULL, NULL);
+        if (!sws_ctx) {
+            av_log(log_ctx, AV_LOG_ERROR, "Impossible to create scale context for the conversion "
+                "fmt:%s s:%dx%d -> fmt:%s s:%dx%d\n",
+                av_get_pix_fmt_name(AV_PIX_FMT_GRAY8),  frame->width * 3, frame->height,
+                av_get_pix_fmt_name(AV_PIX_FMT_GRAYF32),frame->width * 3, frame->height);
+            return DNN_ERROR;
+        }
         sws_scale(sws_ctx, (const uint8_t **)frame->data,
                            frame->linesize, 0, frame->height,
                            (uint8_t * const*)(&input->data),
@@ -121,6 +142,13 @@ DNNReturnType proc_from_frame_to_dnn(AVFrame *frame, DNNData *input, void *log_c
                                  frame->height,
                                  AV_PIX_FMT_GRAYF32,
                                  0, NULL, NULL, NULL);
+        if (!sws_ctx) {
+            av_log(log_ctx, AV_LOG_ERROR, "Impossible to create scale context for the conversion "
+                "fmt:%s s:%dx%d -> fmt:%s s:%dx%d\n",
+                av_get_pix_fmt_name(AV_PIX_FMT_GRAY8),  frame->width, frame->height,
+                av_get_pix_fmt_name(AV_PIX_FMT_GRAYF32),frame->width, frame->height);
+            return DNN_ERROR;
+        }
         sws_scale(sws_ctx, (const uint8_t **)frame->data,
                            frame->linesize, 0, frame->height,
                            (uint8_t * const*)(&input->data),