summaryrefslogtreecommitdiff
path: root/vp9/encoder
diff options
context:
space:
mode:
authorJames Zern <jzern@google.com>2021-10-01 13:46:02 -0700
committerJames Zern <jzern@google.com>2021-10-01 15:52:38 -0700
commitfccaa5fa7a3e134949f5ea9fe3d4f3c388d4243b (patch)
tree8e1f3efc6fa42aa8630cc8df7462451f674c7079 /vp9/encoder
parentb68877a7ebfe764714f8ce7aeb2a7f6d12b77989 (diff)
downloadlibvpx-fccaa5fa7a3e134949f5ea9fe3d4f3c388d4243b.tar
libvpx-fccaa5fa7a3e134949f5ea9fe3d4f3c388d4243b.tar.gz
libvpx-fccaa5fa7a3e134949f5ea9fe3d4f3c388d4243b.tar.bz2
libvpx-fccaa5fa7a3e134949f5ea9fe3d4f3c388d4243b.zip
{vp8,vp9}_set_roi_map: fix validation with INT_MIN
previously ranges were checked with abs() whose behavior is undefined with INT_MIN. this fixes a crash when the original value is returned and it later used as and offset into a table. Bug: webm:1742 Change-Id: I345970b75c46699587a4fbc4a059e59277f4c2c8
Diffstat (limited to 'vp9/encoder')
-rw-r--r--vp9/encoder/vp9_encoder.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c
index 6cd8cb80e..7e80835f6 100644
--- a/vp9/encoder/vp9_encoder.c
+++ b/vp9/encoder/vp9_encoder.c
@@ -654,10 +654,15 @@ static void init_level_info(Vp9LevelInfo *level_info) {
}
static int check_seg_range(int seg_data[8], int range) {
- return !(abs(seg_data[0]) > range || abs(seg_data[1]) > range ||
- abs(seg_data[2]) > range || abs(seg_data[3]) > range ||
- abs(seg_data[4]) > range || abs(seg_data[5]) > range ||
- abs(seg_data[6]) > range || abs(seg_data[7]) > range);
+ int i;
+ for (i = 0; i < 8; ++i) {
+ // Note abs() alone can't be used as the behavior of abs(INT_MIN) is
+ // undefined.
+ if (seg_data[i] > range || seg_data[i] < -range) {
+ return 0;
+ }
+ }
+ return 1;
}
VP9_LEVEL vp9_get_level(const Vp9LevelSpec *const level_spec) {