[FFmpeg-devel] [PATCH v2] avformat/hlsenc: fix the av_dirname path isn't include separator in the end of string

Limin Wang lance.lmwang at gmail.com
Wed Oct 23 13:16:07 EEST 2019


On Wed, Oct 09, 2019 at 10:32:40AM +0800, Steven Liu wrote:
> 
> 
> > 在 2019年10月9日,09:37,lance.lmwang at gmail.com 写道:
> > 
> > From: Limin Wang <lance.lmwang at gmail.com>
> > 
> > Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
> > ---
> > libavformat/hlsenc.c | 16 ++++++++++------
> > 1 file changed, 10 insertions(+), 6 deletions(-)
> > 
> > diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
> > index cd4320114d..74f5e08729 100644
> > --- a/libavformat/hlsenc.c
> > +++ b/libavformat/hlsenc.c
> > @@ -478,6 +478,12 @@ static void reflush_dynbuf(VariantStream *vs, int *range_length)
> >     avio_write(vs->out, vs->temp_buffer, *range_length);;
> > }
> > 
> > +#if HAVE_DOS_PATHS
> > +#define SEPARATOR '\\'
> > +#else
> > +#define SEPARATOR '/'
> > +#endif
> > +
> > static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls,
> >                                    VariantStream *vs)
> > {
> > @@ -544,7 +550,7 @@ static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls,
> >     while (segment) {
> >         av_log(hls, AV_LOG_DEBUG, "deleting old segment %s\n",
> >                segment->filename);
> > -        path_size =  (hls->use_localtime_mkdir ? 0 : strlen(dirname)) + strlen(segment->filename) + 1;
> > +        path_size =  (hls->use_localtime_mkdir ? 0 : strlen(dirname)+1) + strlen(segment->filename) + 1;
> >         path = av_malloc(path_size);
> >         if (!path) {
> >             ret = AVERROR(ENOMEM);
> > @@ -554,8 +560,7 @@ static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls,
> >         if (hls->use_localtime_mkdir)
> >             av_strlcpy(path, segment->filename, path_size);
> >         else { // segment->filename contains basename only
> > -            av_strlcpy(path, dirname, path_size);
> > -            av_strlcat(path, segment->filename, path_size);
> > +            snprintf(path, path_size, "%s%c%s", dirname, SEPARATOR, segment->filename);
> >         }
> > 
> >         proto = avio_find_protocol_name(s->url);
> > @@ -575,15 +580,14 @@ static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls,
> >         if ((segment->sub_filename[0] != '\0')) {
> >             char *vtt_dirname_r = av_strdup(vs->vtt_avf->url);
> >             vtt_dirname = (char*)av_dirname(vtt_dirname_r);
> > -            sub_path_size = strlen(segment->sub_filename) + 1 + strlen(vtt_dirname);
> > +            sub_path_size = strlen(segment->sub_filename) + 1 + strlen(vtt_dirname) + 1;
> >             sub_path = av_malloc(sub_path_size);
> >             if (!sub_path) {
> >                 ret = AVERROR(ENOMEM);
> >                 goto fail;
> >             }
> > 
> > -            av_strlcpy(sub_path, vtt_dirname, sub_path_size);
> > -            av_strlcat(sub_path, segment->sub_filename, sub_path_size);
> > +            snprintf(sub_path, sub_path_size, "%s%c%s", vtt_dirname, SEPARATOR, segment->sub_filename);
> > 
> >             if (hls->method || (proto && !av_strcasecmp(proto, "http"))) {
> >                 av_dict_set(&options, "method", "DELETE", 0);
> > -- 
> > 2.21.0
> > 
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel at ffmpeg.org
> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> > 
> > To unsubscribe, visit link above, or email
> > ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
> 
> Tested passed
> 
> lgtm

ping, please help to push it if other comment by other developer.


> 
> Thanks
> Steven
> 
> 
> 
> 
> 


More information about the ffmpeg-devel mailing list