X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fwebm_chunk.c;h=904bde7eb40875816b1b4a32af13bb132f204a56;hb=112eb17a2bbf6d02f81fdf0743b353a6b010aedc;hp=7ceb276fc436bede080f2d3dda6ad1415220b931;hpb=5c1aafff2d844b177b0b20db4a38d8460992558b;p=ffmpeg diff --git a/libavformat/webm_chunk.c b/libavformat/webm_chunk.c index 7ceb276fc43..904bde7eb40 100644 --- a/libavformat/webm_chunk.c +++ b/libavformat/webm_chunk.c @@ -53,7 +53,7 @@ typedef struct WebMChunkContext { char *http_method; uint64_t duration_written; int prev_pts; - AVOutputFormat *oformat; + ff_const59 AVOutputFormat *oformat; AVFormatContext *avf; } WebMChunkContext; @@ -84,7 +84,7 @@ static int chunk_mux_init(AVFormatContext *s) return 0; } -static int get_chunk_filename(AVFormatContext *s, int is_header, char *filename) +static int get_chunk_filename(AVFormatContext *s, int is_header, char filename[MAX_FILENAME_SIZE]) { WebMChunkContext *wc = s->priv_data; AVFormatContext *oc = wc->avf; @@ -92,11 +92,16 @@ static int get_chunk_filename(AVFormatContext *s, int is_header, char *filename) return AVERROR(EINVAL); } if (is_header) { + int len; if (!wc->header_filename) { av_log(oc, AV_LOG_ERROR, "No header filename provided\n"); return AVERROR(EINVAL); } - av_strlcpy(filename, wc->header_filename, strlen(wc->header_filename) + 1); + len = av_strlcpy(filename, wc->header_filename, MAX_FILENAME_SIZE); + if (len >= MAX_FILENAME_SIZE) { + av_log(oc, AV_LOG_ERROR, "Header filename too long\n"); + return AVERROR(EINVAL); + } } else { if (av_get_frame_filename(filename, MAX_FILENAME_SIZE, s->url, wc->chunk_index - 1) < 0) {