Hi, Thank you for the suggestion.
The tmp field in VideoMuxData is a fixed-size embedded array (char tmp[4][1024]), not a pointer. This makes using av_asprintf() not suitable. typedef struct VideoMuxData { const AVClass *class; /**< Class for private options. */ int start_img_number; int img_number; int split_planes; char tmp[4][1024]; // Fixed-size buffer within the struct char target[4][1024]; int update; int use_strftime; int frame_pts; const char *muxer; int use_rename; AVDictionary *protocol_opts; } VideoMuxData; VideoMuxData *img = s->priv_data; At 2025-08-04 06:57:00, "Michael Niedermayer" <mich...@niedermayer.cc> wrote: >On Thu, Jul 31, 2025 at 04:21:35PM +0800, Cai Fan wrote: >> Signed-off-by: Cai Fan <caifan0...@163.com> >> --- >> libavformat/img2enc.c | 7 ++++++- >> 1 file changed, 6 insertions(+), 1 deletion(-) >> >> diff --git a/libavformat/img2enc.c b/libavformat/img2enc.c >> index 41638d92b8..9a5718a8da 100644 >> --- a/libavformat/img2enc.c >> +++ b/libavformat/img2enc.c >> @@ -180,7 +180,12 @@ static int write_packet(AVFormatContext *s, AVPacket >> *pkt) >> } >> for (i = 0; i < 4; i++) { >> av_dict_copy(&options, img->protocol_opts, 0); >> - snprintf(img->tmp[i], sizeof(img->tmp[i]), "%s.tmp", filename); >> + int len = snprintf(img->tmp[i], sizeof(img->tmp[i]), "%s.tmp", >> filename); >> + if (len < 0 || len >= sizeof(img->tmp[i])) { >> + av_log(s, AV_LOG_ERROR, "filename '%s' exceeds buffer size >> %zu\n", filename, sizeof(img->tmp[i])); >> + ret = AVERROR(EINVAL); >> + goto fail; >> + } > >is there a reason this doesnt use av_asprintf() ? >that is allocate as needed > >thx > >[...] >-- >Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB > >No great genius has ever existed without some touch of madness. -- Aristotle _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".