diff options
author | Limin Wang <lance.lmwang@gmail.com> | 2021-09-25 10:27:10 +0800 |
---|---|---|
committer | Limin Wang <lance.lmwang@gmail.com> | 2021-10-08 10:11:59 +0800 |
commit | 9997047a1802b5174e423cf0863041639664ab87 (patch) | |
tree | 458279a63fa71379c800ed183425483dcfbfa28d | |
parent | e724004fd8d2c5d7753f7b997e3d02a2155ceef6 (diff) | |
download | ffmpeg-9997047a1802b5174e423cf0863041639664ab87.tar.gz |
avutil/detection_bbox: Fix av_detection_bbox_alloc failed if nb_bboxes == 0
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
-rw-r--r-- | libavutil/detection_bbox.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/libavutil/detection_bbox.c b/libavutil/detection_bbox.c index b7d0c5575f..bae8f0642e 100644 --- a/libavutil/detection_bbox.c +++ b/libavutil/detection_bbox.c @@ -23,27 +23,29 @@ AVDetectionBBoxHeader *av_detection_bbox_alloc(uint32_t nb_bboxes, size_t *out_s size_t size; struct BBoxContext { AVDetectionBBoxHeader header; - AVDetectionBBox boxes[1]; - } *ret; + AVDetectionBBox boxes; + }; const size_t bboxes_offset = offsetof(struct BBoxContext, boxes); + const size_t bbox_size = sizeof(AVDetectionBBox); + AVDetectionBBoxHeader *header; - size = sizeof(*ret); - if (nb_bboxes - 1 > (SIZE_MAX - size) / sizeof(*ret->boxes)) + size = bboxes_offset; + if (nb_bboxes > (SIZE_MAX - size) / bbox_size) return NULL; - size += sizeof(*ret->boxes) * (nb_bboxes - 1); + size += bbox_size * nb_bboxes; - ret = av_mallocz(size); - if (!ret) + header = av_mallocz(size); + if (!header) return NULL; - ret->header.nb_bboxes = nb_bboxes; - ret->header.bbox_size = sizeof(*ret->boxes); - ret->header.bboxes_offset = bboxes_offset; + header->nb_bboxes = nb_bboxes; + header->bbox_size = bbox_size; + header->bboxes_offset = bboxes_offset; if (out_size) *out_size = size; - return &ret->header; + return header; } AVDetectionBBoxHeader *av_detection_bbox_create_side_data(AVFrame *frame, uint32_t nb_bboxes) |