This is basically an overread/overwrite-safe memcpy between a
GetByteContext and a PutByteContext.
---
libavcodec/bytestream.h | 29 +++++++++++++++++++++++++++++
1 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/libavcodec/bytestream.h b/libavcodec/bytestream.h
index 63d61f1..21b1cba 100644
--- a/libavcodec/bytestream.h
+++ b/libavcodec/bytestream.h
@@ -325,6 +325,35 @@ static av_always_inline unsigned int
bytestream2_get_eof(PutByteContext *p)
return p->eof;
}
+static av_always_inline unsigned int bytestream2_copy_buffer(PutByteContext *p,
+ GetByteContext *g,
+ unsigned int size)
+{
+ int size2;
+
+ if (p->eof)
+ return 0;
+ size2 = FFMIN(p->buffer_end - p->buffer, size);
+ if (size2 != size)
+ p->eof = 1;
+ size2 = FFMIN(g->buffer_end - g->buffer, size2);
+
+ memcpy(p->buffer, g->buffer, size2);
+ p->buffer += size2;
+ g->buffer += size2;
+ return size2;
+}
+
+static av_always_inline unsigned int bytestream2_copy_bufferu(PutByteContext
*p,
+ GetByteContext
*g,
+ unsigned int
size)
+{
+ memcpy(p->buffer, g->buffer, size);
+ p->buffer += size;
+ g->buffer += size;
+ return size;
+}
+
static av_always_inline unsigned int bytestream_get_buffer(const uint8_t **b,
uint8_t *dst,
unsigned int size)
--
1.7.1
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel