[FFmpeg-devel] [PATCH] avformat/argo_asf: Use memcpy to copy string without its NUL

Zane van Iperen zane at zanevaniperen.com
Sun Sep 26 08:14:22 EEST 2021



On 26/9/21 1:09 pm, Andreas Rheinhardt wrote:
> This avoids a -Wstringop-truncation warning from GCC which takes
> issue with the fact that the destination might not be NUL terminated.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> ---
>   libavformat/argo_asf.c | 20 +++++++-------------
>   1 file changed, 7 insertions(+), 13 deletions(-)
> 
> diff --git a/libavformat/argo_asf.c b/libavformat/argo_asf.c
> index 5adafb7230..0ef970df8a 100644
> --- a/libavformat/argo_asf.c
> +++ b/libavformat/argo_asf.c
> @@ -356,25 +356,19 @@ static int argo_asf_write_header(AVFormatContext *s)
>           .num_chunks    = 1,
>           .chunk_offset  = ASF_FILE_HEADER_SIZE
>       };
> +    const char *name = ctx->name, *end;
> +    size_t len;
>   
>       /*
>        * If the user specified a name, use it as is. Otherwise take the
>        * basename and lop off the extension (if any).
>        */
> -    if (ctx->name) {
> -        strncpy(fhdr.name, ctx->name, sizeof(fhdr.name));
> -    } else {
> -        const char *start = av_basename(s->url);
> -        const char *end   = strrchr(start, '.');
> -        size_t      len;
> -
> -        if (end)
> -            len = end - start;
> -        else
> -            len = strlen(start);
> +    if (name || !(end = strrchr(name = av_basename(s->url), '.'))) {
> +        len = strlen(name);
> +    } else
> +        len = end - name;
>   
> -        memcpy(fhdr.name, start, FFMIN(len, sizeof(fhdr.name)));
> -    }
> +    memcpy(fhdr.name, name, FFMIN(len, sizeof(fhdr.name)));
>   

Minor formatting nits:
* The first statement has braces, the second doesn't.
* A set of parentheses around "name = av_basename(s->url)" would make things clearer.

Otherwise, lgtm.

Zane


More information about the ffmpeg-devel mailing list