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))); + } chdr.num_blocks = 0; chdr.num_samples = ASF_SAMPLE_COUNT;