On Thu, Apr 13, 2023 at 05:44:37PM +0800, Steven Liu wrote: > Signed-off-by: Steven Liu > --- > libavformat/flvdec.c | 58 ++++++++++++++++++++++++++++++++++++++------ > 1 file changed, 50 insertions(+), 8 deletions(-) > > diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c > index d83edff727..6a1e6e7ff0 100644 > --- a/libavformat/flvdec.c > +++ b/libavformat/flvdec.c > @@ -79,6 +79,8 @@ typedef struct FLVContext { > int64_t last_ts; > int64_t time_offset; > int64_t time_pos; > + > + uint8_t exheader; > } FLVContext; > > /* AMF date type */ > @@ -302,13 +304,25 @@ static void flv_set_audio_codec(AVFormatContext *s, AVStream *astream, > } > } > > -static int flv_same_video_codec(AVCodecParameters *vpar, int flags) > +static int flv_same_video_codec(AVFormatContext *s, AVCodecParameters *vpar, int flags) > { > int flv_codecid = flags & FLV_VIDEO_CODECID_MASK; > + FLVContext *flv = s->priv_data; > > if (!vpar->codec_id && !vpar->codec_tag) > return 1; > > + if (flv->exheader) { > + uint8_t *codec_id_str = (uint8_t *)s->pb->buf_ptr; > + uint32_t codec_id = codec_id_str[3] | codec_id_str[2] << 8 | codec_id_str[1] << 16 | codec_id_str[0] << 24; pb->buf_ptr is in general not supposed to be directly accessed In this case here it segfaults READ of size 1 at 0x6100000003b7 thread T0 #0 0x7f928d in flv_same_video_codec ffmpeg/libavformat/flvdec.c:317:29 #1 0x7f928d in flv_read_packet ffmpeg/libavformat/flvdec.c:1177 #2 0x6ff32f in ff_read_packet ffmpeg/libavformat/demux.c:575:15 #3 0x70a2fd in read_frame_internal ffmpeg/libavformat/demux.c:1263:15 #4 0x71d158 in avformat_find_stream_info ffmpeg/libavformat/demux.c:2634:15 #5 0x4c821b in LLVMFuzzerTestOneInput ffmpeg/tools/target_dem_fuzzer.c:206:11 can you remove pb->buf_ptr use ? I can fix it too but i have no testcase and fate doesnt cover this so my fix would be untested ... thx [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Democracy is the form of government in which you can choose your dictator