obudec_read_temporal_unit: fix buffered read w/annexb
this fixes an overwrite when the TU size is smaller than the amount of
buffered data; previously the larger value would be used, now the
minimum of the two will store the correct amount
Bug: b/144018360
Change-Id: Ia97ba90ee274f2932d4b98bab43d5944932355b2
diff --git a/common/obudec.c b/common/obudec.c
index 1ce218d..650f997 100644
--- a/common/obudec.c
+++ b/common/obudec.c
@@ -467,10 +467,11 @@
memcpy(*buffer, &tuheader[0], length_of_temporal_unit_size);
offset = length_of_temporal_unit_size;
} else {
- memcpy(*buffer, obu_ctx->buffer, obu_ctx->bytes_buffered);
- offset = obu_ctx->bytes_buffered;
- data_size = tu_size - obu_ctx->bytes_buffered;
- obu_ctx->bytes_buffered = 0;
+ const size_t copy_size = AOMMIN(obu_ctx->bytes_buffered, tu_size);
+ memcpy(*buffer, obu_ctx->buffer, copy_size);
+ offset = copy_size;
+ data_size = tu_size - copy_size;
+ obu_ctx->bytes_buffered -= copy_size;
}
if (fread(*buffer + offset, 1, data_size, f) != data_size) {