Risk of explosion with .dds files
.dds is an image format used mainly in video games and video game mods. The MIME type is detected as
image/x-dds, and due to our
90-gstreamer-image-generic.rule extract rule we end up sending the file to GStreamer.
There is no GStreamer plugin that could decode .dds files. Running tracker-extract on a random .dds file with GST_DEBUG=*:3 produced many warnings like this:
0:00:00.057568078 12862 0x7f23f80e86d0 WARN mpegaudioparse gstmpegaudioparse.c:475:gst_mpeg_audio_parse_head_check:<mpegaudioparse0> invalid bitrate: 0xf
A different file produced this:
0:00:00.058564737 12892 0x55fb9e837700 WARN discoverer gstdiscoverer.c:1584:handle_message:<mpegvparse0> Got an error [debug:gstbaseparse.c(3625): gst_base_parse_loop (): /GstPipeline:Discoverer/GstURIDecodeBin:discoverer-uri/GstDecodeBin:decodebin1/GstMpegvParse:mpegvparse0], [message:No valid frames found before end of stream]
Another produced a long stream of these warnings, and several seconds of high CPU usage:
0:00:05.267261435 2926 0x7f76780e76d0 WARN libav gstavauddec.c:756:gst_ffmpegauddec_handle_frame:<avdec_mp1float0> decoding error
Obviously the GstDiscover object is doing something wrong here.
We should do a fix on the stable branch for this. First we should specifically blacklist
image/x-dds files in
90-gstreamer-image-generic.rule. And, perhaps we could see if GstDiscoverer could be improved to avoid parsing image file formats with an MP3 decoder.