From 209ba850d19ab1134ea4e2d53f94bdf371cc3987 Mon Sep 17 00:00:00 2001 From: Tom Finegan <tomfinegan@google.com> Date: Wed, 10 Jan 2018 08:36:40 -0800 Subject: [PATCH] leb128: Add failure test. Add tests of expected failure conditions, and handle invalid pad sizes in the fixed length encode function. BUG=aomedia:1125 Change-Id: I8b9d0fbc44bb776bca3b4c3f0467a2125f13be2e --- aom/src/aom_integer.c | 1 + test/aom_integer_test.cc | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/aom/src/aom_integer.c b/aom/src/aom_integer.c index f34b95d05a..1fd9a84523 100644 --- a/aom/src/aom_integer.c +++ b/aom/src/aom_integer.c @@ -57,6 +57,7 @@ int aom_uleb_encode_fixed_size(uint32_t value, size_t available, size_t pad_to_size, uint8_t *coded_value, size_t *coded_size) { if (!coded_value || !coded_size || available < pad_to_size || + pad_to_size > kMaximumLeb128Size || aom_uleb_encode(value, available, coded_value, coded_size) != 0) { return -1; } diff --git a/test/aom_integer_test.cc b/test/aom_integer_test.cc index 9450dc68e7..93893b9ffe 100644 --- a/test/aom_integer_test.cc +++ b/test/aom_integer_test.cc @@ -103,3 +103,27 @@ TEST(AomLeb128, SizeTest) { aom_uleb_size_in_bytes(kSizeTestInputs[i])); } } + +TEST(AomLeb128, FailTest) { + const size_t kWriteBufferSize = 4; + const uint32_t kValidTestValue = 1; + uint8_t write_buffer[kWriteBufferSize] = { 0 }; + size_t coded_size = 0; + ASSERT_EQ( + aom_uleb_encode(kValidTestValue, kWriteBufferSize, NULL, &coded_size), + -1); + ASSERT_EQ(aom_uleb_encode(kValidTestValue, kWriteBufferSize, &write_buffer[0], + NULL), + -1); + + const uint32_t kValueOutOfRange = 0xFFFFFFFF; + ASSERT_EQ(aom_uleb_encode(kValueOutOfRange, kWriteBufferSize, + &write_buffer[0], &coded_size), + -1); + + const size_t kPadSizeOutOfRange = 5; + ASSERT_EQ(aom_uleb_encode_fixed_size(kValidTestValue, kWriteBufferSize, + kPadSizeOutOfRange, &write_buffer[0], + &coded_size), + -1); +} -- GitLab