summaryrefslogtreecommitdiff
path: root/libavformat/aviobuf.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-05-25 10:14:00 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-06-11 04:03:38 +0200
commitc33e56c7a6a8bef7d95e1d36eb2f35748d475695 (patch)
tree85389e26d9393c17b2dd609fb9ce5c192bf3827d /libavformat/aviobuf.c
parent7be9b0bb38f415d06d06a10844d181b0a8421c47 (diff)
avformat/aviobuf: Also return truncated buffer in avio_get_dyn_buf()
Two kinds of errors can happen when working with dynamic buffers: (Re)allocation errors or truncation errors (one has to truncate the buffer to a size of INT_MAX because avio_close_dyn_buf() and avio_get_dyn_buf() both return an int). Right now, avio_get_dyn_buf() returns an empty buffer in either case. But given that avio_get_dyn_buf() does not destroy the dynamic buffer, one can return the buffer in case of truncation and let the user check the error flags and decide for himself instead of hardcoding a single way to proceed in case of truncation. (This actually restores the behaviour from before commit 163bb9ac0af495a5cb95441bdb5c02170440d28c.) Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavformat/aviobuf.c')
-rw-r--r--libavformat/aviobuf.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
index 941e82ffe4..a77517d712 100644
--- a/libavformat/aviobuf.c
+++ b/libavformat/aviobuf.c
@@ -1382,13 +1382,13 @@ int avio_get_dyn_buf(AVIOContext *s, uint8_t **pbuffer)
{
DynBuffer *d;
- if (!s || s->error) {
+ if (!s) {
*pbuffer = NULL;
return 0;
}
d = s->opaque;
- if (!d->size) {
+ if (!s->error && !d->size) {
*pbuffer = d->io_buffer;
return FFMAX(s->buf_ptr, s->buf_ptr_max) - s->buffer;
}