diff --git a/libavformat/dss.c b/libavformat/dss.c index 6cabdb5421..ce86b32d6f 100644 --- a/libavformat/dss.c +++ b/libavformat/dss.c @@ -26,6 +26,7 @@ #include "avformat.h" #include "demux.h" #include "internal.h" +#include "avio_internal.h" #define DSS_HEAD_OFFSET_AUTHOR 0xc #define DSS_AUTHOR_SIZE 16 @@ -339,7 +340,9 @@ static int dss_read_seek(AVFormatContext *s, int stream_index, if (ret < 0) return ret; - avio_read(s->pb, header, DSS_AUDIO_BLOCK_HEADER_SIZE); + ret = ffio_read_size(s->pb, header, DSS_AUDIO_BLOCK_HEADER_SIZE); + if (ret < 0) + return ret; ctx->swap = !!(header[0] & 0x80); offset = 2*header[1] + 2*ctx->swap; if (offset < DSS_AUDIO_BLOCK_HEADER_SIZE) diff --git a/libavformat/dtshddec.c b/libavformat/dtshddec.c index b980fde6a9..843fd5460d 100644 --- a/libavformat/dtshddec.c +++ b/libavformat/dtshddec.c @@ -26,6 +26,7 @@ #include "avformat.h" #include "demux.h" #include "internal.h" +#include "avio_internal.h" #define AUPR_HDR 0x415550522D484452 #define AUPRINFO 0x41555052494E464F @@ -125,7 +126,11 @@ static int dtshd_read_header(AVFormatContext *s) value = av_malloc(chunk_size); if (!value) goto skip; - avio_read(pb, value, chunk_size); + ret = ffio_read_size(pb, value, chunk_size); + if (ret < 0) { + av_free(value); + goto skip; + } value[chunk_size - 1] = 0; av_dict_set(&s->metadata, "fileinfo", value, AV_DICT_DONT_STRDUP_VAL); diff --git a/libavformat/mlvdec.c b/libavformat/mlvdec.c index fa35bc9c45..2c1fe001c7 100644 --- a/libavformat/mlvdec.c +++ b/libavformat/mlvdec.c @@ -36,6 +36,7 @@ #include "avformat.h" #include "demux.h" #include "internal.h" +#include "avio_internal.h" #include "riff.h" #define MLV_VERSION "v2.0" @@ -74,12 +75,15 @@ static int check_file_header(AVIOContext *pb, uint64_t guid) { unsigned int size; uint8_t version[8]; + int ret; avio_skip(pb, 4); size = avio_rl32(pb); if (size < 52) return AVERROR_INVALIDDATA; - avio_read(pb, version, 8); + ret = ffio_read_size(pb, version, 8); + if (ret < 0) + return ret; if (memcmp(version, MLV_VERSION, 5) || avio_rl64(pb) != guid) return AVERROR_INVALIDDATA; avio_skip(pb, size - 24);