X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fhdsenc.c;h=f22875d0cc1e8b0c1e015806349e4abaaa2a5843;hb=26ce266e3df8d50b0e6b3b402f2436903424c30c;hp=08ae5490d245e3c8c2ea32aad7600794c5b2fe92;hpb=f8d8d2e235f6b1b940195c7223cdf749b3ac127b;p=ffmpeg diff --git a/libavformat/hdsenc.c b/libavformat/hdsenc.c index 08ae5490d24..f22875d0cc1 100644 --- a/libavformat/hdsenc.c +++ b/libavformat/hdsenc.c @@ -89,7 +89,7 @@ static int parse_header(OutputStream *os, const uint8_t *buf, int buf_size) if (size > buf_size) return AVERROR_INVALIDDATA; if (type == 8 || type == 9) { - if (os->nb_extra_packets > FF_ARRAY_ELEMS(os->extra_packets)) + if (os->nb_extra_packets >= FF_ARRAY_ELEMS(os->extra_packets)) return AVERROR_INVALIDDATA; os->extra_packet_sizes[os->nb_extra_packets] = size; os->extra_packets[os->nb_extra_packets] = av_malloc(size); @@ -204,7 +204,10 @@ static int write_manifest(AVFormatContext *s, int final) avio_printf(out, "\n"); avio_flush(out); avio_close(out); - rename(temp_filename, filename); + if (rename(temp_filename, filename) == -1) { + av_log(s, AV_LOG_ERROR, "failed to rename file %s to %s\n", temp_filename, filename); + return AVERROR(errno); + } return 0; } @@ -286,7 +289,10 @@ static int write_abst(AVFormatContext *s, OutputStream *os, int final) update_size(out, afrt_pos); update_size(out, 0); avio_close(out); - rename(temp_filename, filename); + if (rename(temp_filename, filename) == -1) { + av_log(s, AV_LOG_ERROR, "failed to rename file %s to %s\n", temp_filename, filename); + return AVERROR(errno); + } return 0; } @@ -412,7 +418,9 @@ static int hds_write_header(AVFormatContext *s) snprintf(os->temp_filename, sizeof(os->temp_filename), "%s/stream%d_temp", s->filename, i); - init_file(s, os, 0); + ret = init_file(s, os, 0); + if (ret < 0) + goto fail; if (!os->has_video && c->min_frag_duration <= 0) { av_log(s, AV_LOG_WARNING, @@ -475,7 +483,10 @@ static int hds_flush(AVFormatContext *s, OutputStream *os, int final, snprintf(target_filename, sizeof(target_filename), "%s/stream%dSeg1-Frag%d", s->filename, index, os->fragment_index); - rename(os->temp_filename, target_filename); + if (rename(os->temp_filename, target_filename) == -1) { + av_log(s, AV_LOG_ERROR, "failed to rename file %s to %s\n", os->temp_filename, target_filename); + return AVERROR(errno); + } add_fragment(os, target_filename, os->frag_start_ts, end_ts - os->frag_start_ts); if (!final) { @@ -509,7 +520,7 @@ static int hds_write_packet(AVFormatContext *s, AVPacket *pkt) HDSContext *c = s->priv_data; AVStream *st = s->streams[pkt->stream_index]; OutputStream *os = &c->streams[s->streams[pkt->stream_index]->id]; - int64_t end_dts = (os->fragment_index) * c->min_frag_duration; + int64_t end_dts = os->fragment_index * (int64_t)c->min_frag_duration; int ret; if (st->first_dts == AV_NOPTS_VALUE)