Skip to content

Commit 8384c37

Browse files
committed
Fix UB in void pointer arithmetic + memory leak in fail scenario
Signed-off-by: David C. Manuelda <StormByte@gmail.com>
1 parent 9a2ca9b commit 8384c37

1 file changed

Lines changed: 17 additions & 17 deletions

File tree

libvmaf/src/feature/integer_vif.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -630,22 +630,22 @@ static int init(VmafFeatureExtractor *fex, enum VmafPixelFormat pix_fmt,
630630
if (!data) return -ENOMEM;
631631
memset(data, 0, data_sz);
632632

633-
s->public.buf.data = data; data += pad_size;
634-
s->public.buf.ref = data; data += frame_size + pad_size + pad_size;
635-
s->public.buf.dis = data; data += frame_size + pad_size;
636-
s->public.buf.mu1 = data; data += h * s->public.buf.stride_16;
637-
s->public.buf.mu2 = data; data += h * s->public.buf.stride_16;
638-
s->public.buf.mu1_32 = data; data += s->public.buf.stride_32;
639-
s->public.buf.mu2_32 = data; data += s->public.buf.stride_32;
640-
s->public.buf.ref_sq = data; data += s->public.buf.stride_32;
641-
s->public.buf.dis_sq = data; data += s->public.buf.stride_32;
642-
s->public.buf.ref_dis = data; data += s->public.buf.stride_32;
643-
s->public.buf.tmp.mu1 = data; data += s->public.buf.stride_tmp;
644-
s->public.buf.tmp.mu2 = data; data += s->public.buf.stride_tmp;
645-
s->public.buf.tmp.ref = data; data += s->public.buf.stride_tmp;
646-
s->public.buf.tmp.dis = data; data += s->public.buf.stride_tmp;
647-
s->public.buf.tmp.ref_dis = data; data += s->public.buf.stride_tmp;
648-
s->public.buf.tmp.ref_convol = data; data += s->public.buf.stride_tmp;
633+
s->public.buf.data = data; data = (char *)data + pad_size;
634+
s->public.buf.ref = data; data = (char *)data + (frame_size + pad_size + pad_size);
635+
s->public.buf.dis = data; data = (char *)data + (frame_size + pad_size);
636+
s->public.buf.mu1 = data; data = (char *)data + (h * s->public.buf.stride_16);
637+
s->public.buf.mu2 = data; data = (char *)data + (h * s->public.buf.stride_16);
638+
s->public.buf.mu1_32 = data; data = (char *)data + s->public.buf.stride_32;
639+
s->public.buf.mu2_32 = data; data = (char *)data + s->public.buf.stride_32;
640+
s->public.buf.ref_sq = data; data = (char *)data + s->public.buf.stride_32;
641+
s->public.buf.dis_sq = data; data = (char *)data + s->public.buf.stride_32;
642+
s->public.buf.ref_dis = data; data = (char *)data + s->public.buf.stride_32;
643+
s->public.buf.tmp.mu1 = data; data = (char *)data + s->public.buf.stride_tmp;
644+
s->public.buf.tmp.mu2 = data; data = (char *)data + s->public.buf.stride_tmp;
645+
s->public.buf.tmp.ref = data; data = (char *)data + s->public.buf.stride_tmp;
646+
s->public.buf.tmp.dis = data; data = (char *)data + s->public.buf.stride_tmp;
647+
s->public.buf.tmp.ref_dis = data; data = (char *)data + s->public.buf.stride_tmp;
648+
s->public.buf.tmp.ref_convol = data; data = (char *)data + s->public.buf.stride_tmp;
649649
s->public.buf.tmp.dis_convol = data;
650650

651651
s->feature_name_dict =
@@ -656,7 +656,7 @@ static int init(VmafFeatureExtractor *fex, enum VmafPixelFormat pix_fmt,
656656
return 0;
657657

658658
fail:
659-
if (data) aligned_free(data);
659+
if (s->public.buf.data) aligned_free(s->public.buf.data);
660660
vmaf_dictionary_free(&s->feature_name_dict);
661661
return -ENOMEM;
662662
}

0 commit comments

Comments
 (0)