Crash in libav plugin
Since somewhat recently on Fedora Rawhide, I've been getting crashes through Tracker Miners trying to get metadata from an ancient QuickTime MOV file through GstDiscoverer. Some details I could get through GDB:
(gdb) bt full
#0 gst_ffmpegviddec_video_frame (ffmpegdec=ffmpegdec@entry=0x7fb448e10940 [avdec_qtrle|avdec_qtrle0], frame=frame@entry=0x7fb430022870, ret=ret@entry=0x7fb4513ff874) at ../ext/libav/gstavviddec.c:1882
res = <optimized out>
got_frame = 1
mode_switch = <optimized out>
out_frame = <optimized out>
out_dframe = 0x0
pool = <optimized out>
__func__ = "gst_ffmpegviddec_video_frame"
#1 0x00007fb451f3e372 in gst_ffmpegviddec_frame (ffmpegdec=0x7fb448e10940 [avdec_qtrle|avdec_qtrle0], frame=<optimized out>, ret=0x7fb4513ff874) at ../ext/libav/gstavviddec.c:2121
got_frame = 0
no_codec = <optimized out>
got_frame = <optimized out>
no_codec = <optimized out>
__func__ = <optimized out>
_g_boolean_var_105 = <optimized out>
_g_boolean_var_106 = <optimized out>
#2 gst_ffmpegviddec_handle_frame (decoder=0x7fb448e10940 [avdec_qtrle|avdec_qtrle0], frame=0x7fb430022870) at ../ext/libav/gstavviddec.c:2276
ffmpegdec = 0x7fb448e10940 [avdec_qtrle|avdec_qtrle0]
data = 0x7fb4302bc4b0 ""
size = <optimized out>
got_frame = <optimized out>
minfo = {memory = 0x7fb44804fca0 [GstMemory], flags = GST_MAP_READ, data = 0x7fb44804fd28 "", size = 7, maxsize = 14, user_data = {0x7fb46c085de6 <g_malloc+22>, 0x4, 0x7fb448e10890, 0x7fb4513ff8d0}, _gst_reserved = {
0x7fb46c09cf41 <g_slice_alloc+9>, 0x7fb4513ff900, 0x7fb46c07be4b <g_list_append+29>, 0x7fb4513ff930}}
ret = GST_FLOW_OK
packet = 0x7fb43019d600
__func__ = "gst_ffmpegviddec_handle_frame"
#3 0x00007fb453695738 in gst_video_decoder_decode_frame (decoder=decoder@entry=0x7fb448e10940 [avdec_qtrle|avdec_qtrle0], frame=frame@entry=0x7fb430022870) at ../gst-libs/gst/video/gstvideodecoder.c:3993
priv = 0x7fb448e10740
decoder_class = 0x7fb448069b20
ret = GST_FLOW_OK
__func__ = "gst_video_decoder_decode_frame"
#4 0x00007fb4536983f2 in gst_video_decoder_chain_forward (decoder=decoder@entry=0x7fb448e10940 [avdec_qtrle|avdec_qtrle0], buf=buf@entry=0x7fb44810b6c0 [GstBuffer], at_eos=at_eos@entry=0) at ../gst-libs/gst/video/gstvideodecoder.c:2471
frame = 0x7fb430022870
was_keyframe = <optimized out>
priv = 0x7fb448e10740
klass = <optimized out>
ret = GST_FLOW_OK
__func__ = "gst_video_decoder_chain_forward"
#5 0x00007fb4536988bd in gst_video_decoder_chain (pad=pad@entry=0x7fb448053090 [GstPad|sink], parent=parent@entry=0x7fb448e10940 [avdec_qtrle|avdec_qtrle0], buf=buf@entry=0x7fb44810b6c0 [GstBuffer])
at ../gst-libs/gst/video/gstvideodecoder.c:2813
decoder = 0x7fb448e10940 [avdec_qtrle|avdec_qtrle0]
ret = GST_FLOW_OK
__func__ = "gst_video_decoder_chain"
#6 0x00007fb4538a5e14 in gst_pad_chain_data_unchecked (pad=pad@entry=0x7fb448053090 [GstPad|sink], type=type@entry=4112, data=data@entry=0x7fb44810b6c0) at ../gst/gstpad.c:4494
chainfunc = <optimized out>
ret = <optimized out>
parent = 0x7fb448e10940 [avdec_qtrle|avdec_qtrle0]
handled = 0
probe_handled = <optimized out>
probe_stopped = <optimized out>
__func__ = "gst_pad_chain_data_unchecked"
#7 0x00007fb4538a934e in gst_pad_push_data (pad=pad@entry=0x7fb448069510 [GstMultiQueuePad|src_0], type=type@entry=4112, data=data@entry=0x7fb44810b6c0) at ../gst/gstpad.c:4770
peer = 0x7fb448053090 [GstPad|sink]
ret = GST_FLOW_OK
handled = 0
probe_handled = <optimized out>
__func__ = "gst_pad_push_data"
#8 0x00007fb4538a9994 in gst_pad_push (pad=pad@entry=0x7fb448069510 [GstMultiQueuePad|src_0], buffer=buffer@entry=0x7fb44810b6c0 [GstBuffer]) at ../gst/gstpad.c:4889
--Type <RET> for more, q to quit, c to continue without paging--c
res = <optimized out>
__func__ = "gst_pad_push"
#9 0x00007fb453248ac1 in gst_single_queue_push_one (mq=<optimized out>, sq=0x7fb448021120, object=0x7fb44810b6c0 [GstBuffer], allow_drop=<synthetic pointer>) at ../plugins/elements/gstmultiqueue.c:2009
buffer = 0x7fb44810b6c0 [GstBuffer]
timestamp = 66666666 [0:00:00.066666666]
duration = <optimized out>
result = GST_FLOW_OK
srcpad = 0x7fb448069510 [GstMultiQueuePad|src_0]
result = <optimized out>
srcpad = <optimized out>
__func__ = <optimized out>
_g_boolean_var_42 = <optimized out>
buffer = <optimized out>
timestamp = <optimized out>
duration = <optimized out>
_g_boolean_var_43 = <optimized out>
_g_boolean_var_44 = <optimized out>
_g_boolean_var_45 = <optimized out>
event = <optimized out>
_g_boolean_var_46 = <optimized out>
group_id = <optimized out>
_g_boolean_var_47 = <optimized out>
_g_boolean_var_48 = <optimized out>
_g_boolean_var_49 = <optimized out>
_g_boolean_var_50 = <optimized out>
_g_boolean_var_51 = <optimized out>
query = <optimized out>
res = <optimized out>
_g_boolean_var_52 = <optimized out>
_g_boolean_var_53 = <optimized out>
#10 gst_multi_queue_loop (pad=<optimized out>) at ../plugins/elements/gstmultiqueue.c:2345
sq = 0x7fb448021120
item = <optimized out>
sitem = 0x7fb44805ed90
mq = 0x7fb448ece6c0 [GstMultiQueue|multiqueue52]
object = 0x7fb44810b6c0 [GstBuffer]
newid = 13
result = <optimized out>
next_time = <optimized out>
is_buffer = 1
is_query = 0
do_update_buffering = 0
dropping = 0
srcpad = 0x7fb448069510 [GstMultiQueuePad|src_0]
__func__ = "gst_multi_queue_loop"
#11 0x00007fb4538d5a24 in gst_task_func (task=0x7fb44810d9f0 [GstTask|multiqueue52:src_0]) at ../gst/gsttask.c:399
lock = 0x7fb448069580
tself = <optimized out>
priv = <optimized out>
__func__ = "gst_task_func"
#12 0x00007fb46c0a8c94 in g_thread_pool_thread_proxy (data=<optimized out>) at ../../../../Source/glib/glib/gthreadpool.c:336
task = 0x7fb448069750
pool = 0x7fb43c017ae0
#13 0x00007fb46c0a8386 in g_thread_proxy (data=0x7fb454000f90) at ../../../../Source/glib/glib/gthread.c:835
thread = 0x7fb454000f90
__func__ = "g_thread_proxy"
#14 0x00007fb46bb401f7 in start_thread (arg=<optimized out>) at pthread_create.c:447
ret = <optimized out>
pd = <optimized out>
out = <optimized out>
unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140412433991360, 813092670205973007, 140412433991360, -120, 0, 140412599663280, 813092670294053391, 813139846163059215}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0},
data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
not_first_call = <optimized out>
#15 0x00007fb46bbc242c in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
No locals.
(gdb) l
1877
1878 got_frame = TRUE;
1879
1880 /* get the output picture timing info again */
1881 out_dframe = ffmpegdec->picture->opaque;
1882 out_frame = gst_video_codec_frame_ref (out_dframe->frame);
1883
1884 /* also give back a buffer allocated by the frame, if any */
1885 gst_buffer_replace (&out_frame->output_buffer, out_dframe->buffer);
1886 gst_buffer_replace (&out_dframe->buffer, NULL);
(gdb) p out_dframe
$1 = (GstFFMpegVidDecVideoFrame *) 0x0
(gdb) p *ffmpegdec->picture
$2 = {data = {0x7fb43013be00 '\377' <repeats 136 times>, "l", 0x7fb4301436c0 "\377\377\377", 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, linesize = {192, 4, 0, 0, 0, 0, 0, 0}, extended_data = 0x7fb448008200, width = 136, height = 160,
nb_samples = 0, format = 11, key_frame = 0, pict_type = AV_PICTURE_TYPE_NONE, sample_aspect_ratio = {num = 1, den = 1}, pts = -9223372036854775808, pkt_dts = -9223372036854775808, time_base = {num = 0, den = 1},
coded_picture_number = 0, display_picture_number = 0, quality = 0, opaque = 0x0, repeat_pict = 0, interlaced_frame = 0, top_field_first = 0, palette_has_changed = 1, reordered_opaque = -9223372036854775808, sample_rate = 0,
channel_layout = 0, buf = {0x7fb430c5e2c0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, extended_buf = 0x0, nb_extended_buf = 0, side_data = 0x0, nb_side_data = 0, flags = 0, color_range = AVCOL_RANGE_UNSPECIFIED,
color_primaries = AVCOL_PRI_UNSPECIFIED, color_trc = AVCOL_TRC_UNSPECIFIED, colorspace = AVCOL_SPC_UNSPECIFIED, chroma_location = AVCHROMA_LOC_UNSPECIFIED, best_effort_timestamp = -9223372036854775808, pkt_pos = -1, pkt_duration = 0,
metadata = 0x0, decode_error_flags = 0, channels = 0, pkt_size = 7, hw_frames_ctx = 0x0, opaque_ref = 0x7fb430135040, crop_top = 0, crop_bottom = 0, crop_left = 0, crop_right = 0, private_ref = 0x0, ch_layout = {
order = AV_CHANNEL_ORDER_UNSPEC, nb_channels = 0, u = {mask = 0, map = 0x0}, opaque = 0x0}, duration = 0}
The versions installed:
gstreamer1-1.24.0-1.fc41.x86_64
gstreamer1-plugin-libav-1.24.0-1.fc41.x86_64
I don't expect it to succeed at extracting metadata (AFAIR it previously did not), but of course the crash would be nice to address.