Fix an ASAN failure bug in calculate_gf_length.
BUG=aomedia:2595
Check end of stats_buf before reading it.
Change-Id: Ic9d1ce4f0bb639e09e0bef2eb67cd822fdc24ff1
diff --git a/av1/encoder/pass2_strategy.c b/av1/encoder/pass2_strategy.c
index 6a4e20c..67d19e8 100644
--- a/av1/encoder/pass2_strategy.c
+++ b/av1/encoder/pass2_strategy.c
@@ -1156,6 +1156,11 @@
int after_pad =
AOMMIN(MAX_PAD_GF_CHECK, rc->frames_to_key - cur_last - 1);
for (n = cur_start - before_pad; n <= cur_last + after_pad; n++) {
+ if (start_pos + n - 1 > twopass->stats_buf_ctx->stats_in_end) {
+ after_pad = n - cur_last - 1;
+ assert(after_pad >= 0);
+ break;
+ }
errs[n + before_pad - cur_start] = (start_pos + n - 1)->coded_error;
}
const int len = before_pad + after_pad + cur_last - cur_start + 1;
diff --git a/test/gf_pyr_height_test.cc b/test/gf_pyr_height_test.cc
index 0befcdf..b1ade67 100644
--- a/test/gf_pyr_height_test.cc
+++ b/test/gf_pyr_height_test.cc
@@ -26,13 +26,13 @@
} kTestParams[] = {
// gf_min_pyr_height = 0
{ 0, 0, 33.40 },
- { 0, 1, 34.50 },
+ { 0, 1, 34.00 },
{ 0, 2, 34.00 },
{ 0, 3, 34.20 },
{ 0, 4, 34.30 },
{ 0, 5, 34.40 },
// gf_min_pyr_height = 1
- { 1, 1, 34.50 },
+ { 1, 1, 34.00 },
{ 1, 2, 34.00 },
{ 1, 3, 34.20 },
{ 1, 4, 34.30 },
@@ -140,7 +140,7 @@
double psnr_;
};
-TEST_P(GFPyrHeightTest, DISABLED_EncodeAndVerifyPSNR) {
+TEST_P(GFPyrHeightTest, EncodeAndVerifyPSNR) {
libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
cfg_.g_timebase.den, cfg_.g_timebase.num,
0, 32);