summaryrefslogtreecommitdiff
path: root/libavfilter/dnn
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2021-03-10 18:45:07 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2021-03-11 13:21:48 +0100
commit2f056def652e15eea7fed8b32ed32c9e2fc8bf70 (patch)
tree7d358070dfc81d81d78bbed28852e1dc30747b00 /libavfilter/dnn
parent723ebf029a94fc23f239dd319c7f1d5921a72cd7 (diff)
dnn/dnn_backend_native_layer_mathbinary: Fix leak upon error
Fixes Coverity issue #1473568. Reviewed-by: Guo, Yejun <yejun.guo@intel.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavfilter/dnn')
-rw-r--r--libavfilter/dnn/dnn_backend_native_layer_mathbinary.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/libavfilter/dnn/dnn_backend_native_layer_mathbinary.c b/libavfilter/dnn/dnn_backend_native_layer_mathbinary.c
index c116188bab..1c33b4633d 100644
--- a/libavfilter/dnn/dnn_backend_native_layer_mathbinary.c
+++ b/libavfilter/dnn/dnn_backend_native_layer_mathbinary.c
@@ -100,20 +100,17 @@ static void math_binary_not_commutative(FunType pfun, const DnnLayerMathBinaryPa
}
int ff_dnn_load_layer_math_binary(Layer *layer, AVIOContext *model_file_context, int file_size, int operands_num)
{
- DnnLayerMathBinaryParams *params;
+ DnnLayerMathBinaryParams params = { 0 };
int dnn_size = 0;
int input_index = 0;
- params = av_malloc(sizeof(*params));
- if (!params)
- return 0;
- params->bin_op = (int32_t)avio_rl32(model_file_context);
+ params.bin_op = (int32_t)avio_rl32(model_file_context);
dnn_size += 4;
- params->input0_broadcast = (int32_t)avio_rl32(model_file_context);
+ params.input0_broadcast = (int32_t)avio_rl32(model_file_context);
dnn_size += 4;
- if (params->input0_broadcast) {
- params->v = av_int2float(avio_rl32(model_file_context));
+ if (params.input0_broadcast) {
+ params.v = av_int2float(avio_rl32(model_file_context));
} else {
layer->input_operand_indexes[input_index] = (int32_t)avio_rl32(model_file_context);
if (layer->input_operand_indexes[input_index] >= operands_num) {
@@ -123,10 +120,10 @@ int ff_dnn_load_layer_math_binary(Layer *layer, AVIOContext *model_file_context,
}
dnn_size += 4;
- params->input1_broadcast = (int32_t)avio_rl32(model_file_context);
+ params.input1_broadcast = (int32_t)avio_rl32(model_file_context);
dnn_size += 4;
- if (params->input1_broadcast) {
- params->v = av_int2float(avio_rl32(model_file_context));
+ if (params.input1_broadcast) {
+ params.v = av_int2float(avio_rl32(model_file_context));
} else {
layer->input_operand_indexes[input_index] = (int32_t)avio_rl32(model_file_context);
if (layer->input_operand_indexes[input_index] >= operands_num) {
@@ -138,11 +135,13 @@ int ff_dnn_load_layer_math_binary(Layer *layer, AVIOContext *model_file_context,
layer->output_operand_index = (int32_t)avio_rl32(model_file_context);
dnn_size += 4;
- layer->params = params;
if (layer->output_operand_index >= operands_num) {
return 0;
}
+ layer->params = av_memdup(&params, sizeof(params));
+ if (!layer->params)
+ return 0;
return dnn_size;
}