On 29/11/2017 23:11, Mark Thompson wrote:
These may be read by the bitstream reader, so they should include the
necessary padding for overreads.
---
  libavcodec/cbs_h2645.c | 10 ++++++++--
  libavcodec/cbs_mpeg2.c |  5 ++++-
  2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
index 2006aaa3f..e3b5bf618 100644
--- a/libavcodec/cbs_h2645.c
+++ b/libavcodec/cbs_h2645.c
@@ -781,13 +781,16 @@ static int cbs_h264_read_nal_unit(CodedBitstreamContext 
*ctx,
              }
slice->data_size = len - pos / 8;
-            slice->data = av_malloc(slice->data_size);
+            slice->data = av_malloc(slice->data_size +
+                                    AV_INPUT_BUFFER_PADDING_SIZE);
              if (!slice->data) {
                  av_free(slice);
                  return AVERROR(ENOMEM);
              }
              memcpy(slice->data,
                     unit->data + pos / 8, slice->data_size);
+            memset(slice->data + slice->data_size, 0,
+                   AV_INPUT_BUFFER_PADDING_SIZE);
              slice->data_bit_start = pos % 8;
unit->content = slice;
@@ -943,13 +946,16 @@ static int cbs_h265_read_nal_unit(CodedBitstreamContext 
*ctx,
              }
slice->data_size = len - pos / 8;
-            slice->data = av_malloc(slice->data_size);
+            slice->data = av_malloc(slice->data_size +
+                                    AV_INPUT_BUFFER_PADDING_SIZE);
              if (!slice->data) {
                  av_free(slice);
                  return AVERROR(ENOMEM);
              }
              memcpy(slice->data,
                     unit->data + pos / 8, slice->data_size);
+            memset(slice->data + slice->data_size, 0,
+                   AV_INPUT_BUFFER_PADDING_SIZE);
              slice->data_bit_start = pos % 8;
unit->content = slice;
diff --git a/libavcodec/cbs_mpeg2.c b/libavcodec/cbs_mpeg2.c
index 3a41e5452..cd8e1b66d 100644
--- a/libavcodec/cbs_mpeg2.c
+++ b/libavcodec/cbs_mpeg2.c
@@ -181,7 +181,8 @@ static int cbs_mpeg2_read_unit(CodedBitstreamContext *ctx,
          len = unit->data_size;
slice->data_size = len - pos / 8;
-        slice->data = av_malloc(slice->data_size);
+        slice->data = av_malloc(slice->data_size +
+                                AV_INPUT_BUFFER_PADDING_SIZE);
          if (!slice->data) {
              av_free(slice);
              return AVERROR(ENOMEM);
@@ -189,6 +190,8 @@ static int cbs_mpeg2_read_unit(CodedBitstreamContext *ctx,
memcpy(slice->data,
                 unit->data + pos / 8, slice->data_size);
+        memset(slice->data + slice->data_size, 0,
+               AV_INPUT_BUFFER_PADDING_SIZE);
          slice->data_bit_start = pos % 8;
unit->content = slice;


Sure
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to