[FFmpeg-devel] [PATCH v3 5/5] avformat/argo_asf: strip file extension from name
Alexander Strasser
eclipse7 at gmx.net
Mon Aug 17 11:14:01 EEST 2020
Hi Zane,
sorry for this late remark.
On 2020-08-09 23:45 +0000, Zane van Iperen wrote:
> Only when the user hasn't manually specified one.
> Matches the original files more closely.
>
> Signed-off-by: Zane van Iperen <zane at zanevaniperen.com>
> ---
> libavformat/argo_asf.c | 20 +++++++++++++++++---
> 1 file changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/libavformat/argo_asf.c b/libavformat/argo_asf.c
> index 577b9d9c01..37ad2bf5e9 100644
> --- a/libavformat/argo_asf.c
> +++ b/libavformat/argo_asf.c
> @@ -329,10 +329,24 @@ static int argo_asf_write_header(AVFormatContext *s)
> fhdr.version_minor = (uint16_t)ctx->version_minor;
> fhdr.num_chunks = 1;
> fhdr.chunk_offset = ASF_FILE_HEADER_SIZE;
> - if (ctx->name)
> + /*
> + * 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
> - strncpy(fhdr.name, av_basename(s->url), 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);
> +
> + memcpy(fhdr.name, start, FFMIN(len, sizeof(fhdr.name)));
> + }
How is one supposed to make sense of the name field when reading it?
It's declared on the stack further above in this function:
ArgoASFFileHeader fhdr;
And I can spot no further intitialization or a count field.
Later there is a call
argo_asf_write_file_header(&fhdr, s->pb);
So I guess my question is: should remaning bytes be zeroed like in the
if clause?
If yes, then that's missing from the else clause.
And the second question is: If a full size name is written, is it
allowed to have no zero termination?
[...]
Alexander
More information about the ffmpeg-devel
mailing list