<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>233230</bug_id>
          
          <creation_ts>2021-11-16 19:08:10 -0800</creation_ts>
          <short_desc>[GStreamer] MediaPlayerPrivateGStreamer mishandles failure to create WebKitTextCombiner</short_desc>
          <delta_ts>2022-03-02 17:04:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>Other</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>openaudible</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>adamw</cc>
    
    <cc>aperez</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>CraigFoote</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>jer.noble</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1815782</commentid>
    <comment_count>0</comment_count>
    <who name="">openaudible</who>
    <bug_when>2021-11-16 19:08:10 -0800</bug_when>
    <thetext>Webkit on ubuntu 21.10 is failing due to a missing gstreamer plugin called subenc, which provides WebVTT captioning. 

It is available in an package called: gstreamer1.0-plugins-bad 

The &quot;fix&quot; is to sudo apt install gstreamer1.0-plugins-bad

According to GStreamer, Bad Plug-ins is a set of plug-ins that aren&apos;t up to par compared to the rest. They might be close to being good quality, but they&apos;re missing something - be it a good code review, some documentation, a set of tests, a real live maintainer, or some actual wide use.

So when Ubuntu 21.10 doesn&apos;t include the bad libraries, and webkit assumes they are going to be available... there is a problem. I don&apos;t know whose problem exactly.

The code that fails is calling webkitTextCombinerNew() and asserting that the object returned is not null.
Error message is: &quot;WebKit wasn&apos;t able to find a WebVTT encoder. Not continuing without platform support for subtitles&quot;
And library quits on ASSERT failure.

A bug fix in webkit would be to not fail if the webVTT plugin isn&apos;t available.. or use a different plugin that is &quot;not bad&quot;? Or improve the error message to make it clear a GStreamer plugin that provides WebVTT is not installed. 


Code that fails is webkitTextCombinerNew() in Source/WebCore/platform/graphics/gstreamer/TextCombinerGStreamer.cpp
GstElement* webkitTextCombinerNew()
{
    // The combiner relies on webvttenc, fail early if it&apos;s not there.
    if (!isGStreamerPluginAvailable(&quot;subenc&quot;)) {
        WTFLogAlways(&quot;WebKit wasn&apos;t able to find a WebVTT encoder. Not continuing without platform support for subtitles.&quot;);
        return nullptr;
    }

    return GST_ELEMENT(g_object_new(WEBKIT_TYPE_TEXT_COMBINER, nullptr));
}

The plugin details for subenc are:
https://gstreamer.freedesktop.org/documentation/subenc/index.html?gi-language=c

Was googling and didn&apos;t find anyone discussing this issue or the simple apt install &quot;fix&quot;. It was non-trivial to figure out. 
Reproduce with fresh ubuntu 21.10 follow along with https://github.com/openaudible/openaudible/issues/757 
I am mostly posting this bug report as a way to let the search engines guide users to the solution... So feel free to close as somewhat resolved..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815928</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-11-17 07:13:16 -0800</bug_when>
    <thetext>(In reply to openaudible from comment #0)
&gt; The code that fails is calling webkitTextCombinerNew() and asserting that
&gt; the object returned is not null.
&gt; Error message is: &quot;WebKit wasn&apos;t able to find a WebVTT encoder. Not
&gt; continuing without platform support for subtitles&quot;

So far so good from WebKit&apos;s perspective. Printing an error message when the optional package is missing is the right thing to do.

CC: Berto because it&apos;s worth checking the Debian packaging to ensure it has a Recommends: to ensure this isn&apos;t broken by default. In Fedora I have Recommends: on both gst-plugins-good and gst-plugins-bad. I see you have a Requires: on gst-plugins-good in Debian (a little aggressive, but OK), and a Recommends: ${gst:Recommends}. I wonder what that ${gst:Recommends} evaluates to. gst-plugins-good and -bad are both optional in case users want to uninstall them, but important to have by default.

&gt; And library quits on ASSERT failure.

That would be a WebKit bug: it shouldn&apos;t crash. But you didn&apos;t provide any info that would tell us where the problem is. Please provide a backtrace taken with gdb following the instructions at https://blogs.gnome.org/mcatanzaro/2021/09/18/creating-quality-backtraces-for-crash-reports/. Thanks.

&gt; A bug fix in webkit would be to not fail if the webVTT plugin isn&apos;t
&gt; available.. or use a different plugin that is &quot;not bad&quot;? Or improve the
&gt; error message to make it clear a GStreamer plugin that provides WebVTT is
&gt; not installed. 

From an upstream perspective, we just need to make it not crash. I think the error message is sufficiently detailed that somebody who has intentionally chosen not to install recommended packages should be able to figure out that a GStreamer element is missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815971</commentid>
    <comment_count>2</comment_count>
    <who name="">openaudible</who>
    <bug_when>2021-11-17 09:34:54 -0800</bug_when>
    <thetext>I think webkitTextCombinerNew() is called just once in the code base.

Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2760

Current code is:

    GstElement* textCombiner = webkitTextCombinerNew();
    ASSERT(textCombiner);
    g_object_set(m_pipeline.get(), &quot;text-stream-combiner&quot;, textCombiner, nullptr);

Crash would be in the ASSERT(textCombiner);

You might be able to change ASSERT(textCombiner); to if (textCombiner) 

The older 2.4.0 code is quite a bit different, but also just uses ASSERT... 

This does seem like a dependency issue-- when installing webkit, one of the dependences it now needs to have is the bad plugin.. I don&apos;t entirely know who made a change that ultimately broke things.

I think just having some google results when searching for the error message will be a big help.

Thanks and good luck.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815979</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-11-17 09:48:23 -0800</bug_when>
    <thetext>You&apos;re not hitting that ASSERT because that&apos;s a debug assert. It&apos;s disabled in release builds.

&gt; And library quits on ASSERT failure.

How do you know this is happening? Does WebKit print something indicating that an assertion failed?

(In reply to openaudible from comment #2)
&gt; You might be able to change ASSERT(textCombiner); to if (textCombiner) 

Probably, yes. I looked up GstPlayBin3:text-stream-combiner and it is not nullable, so that is indeed a WebKit bug. We still want to see a backtrace for your crash, though, to figure out what goes wrong next. None of that should trigger a crash, and it&apos;s not obvious where the crash occurs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816091</commentid>
    <comment_count>4</comment_count>
    <who name="">openaudible</who>
    <bug_when>2021-11-17 13:40:33 -0800</bug_when>
    <thetext>I am not sure about much. I do know installing the missing library fixes it. I don’t know the exact code used on a new Ubuntu 21.10. 

If it wasn’t an assert, it would be a null pointer dereference, I assume. 

If you know how to get an html page to create an element that calls the newTextCombiner, it should fail on a fresh Ubuntu 21.10. You might also be able to reproduce by removing the bad gs library. Or temporarily return null and see if tests pass. It is possible it is already fixed in latest code but breaks in whatever source is used for 21.10. 

Apologize I don’t have better notes or skills. Was not able to build from source with debugging enabled. So do not have a full stack trace.  (A docker build would be nice for non c programmers!)

I just know it started to affect a few users of my app that uses eclipse swt browser that uses WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816155</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-11-17 15:25:08 -0800</bug_when>
    <thetext>(In reply to openaudible from comment #4)
&gt; If it wasn’t an assert, it would be a null pointer dereference, I assume. 

We&apos;ll find out for sure when you post a backtrace.

&gt; If you know how to get an html page to create an element that calls the newTextCombiner,

I don&apos;t tbh, I have no idea what text combiner does either. Subtitles? Once you post a backtrace, I&apos;ll take a look again and we&apos;ll see what to do.

&gt; Was not able to build from source with debugging enabled.

Oh no, don&apos;t try building it yourself! That&apos;s an unreasonable amount of effort to expect for a simple bug report. I do expect you to install the debug symbols provided by Ubuntu and generate a backtrace, though, since otherwise we&apos;d rather go look at crash reports that do have backtraces instead. See the section &quot;Debuginfo Installation&quot; in my blog post. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816157</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-11-17 15:27:07 -0800</bug_when>
    <thetext>There are instructions for Ubuntu here: https://wiki.ubuntu.com/DebuggingProgramCrash</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816185</commentid>
    <comment_count>7</comment_count>
    <who name="Alberto Garcia">berto</who>
    <bug_when>2021-11-17 16:19:55 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #1)
&gt; CC: Berto because it&apos;s worth checking the Debian packaging to ensure it has
&gt; a Recommends: to ensure this isn&apos;t broken by default. In Fedora I have
&gt; Recommends: on both gst-plugins-good and gst-plugins-bad. I see you have a
&gt; Requires: on gst-plugins-good in Debian (a little aggressive, but OK), and a
&gt; Recommends: ${gst:Recommends}. I wonder what that ${gst:Recommends}
&gt; evaluates to. gst-plugins-good and -bad are both optional in case users want
&gt; to uninstall them, but important to have by default.

In Debian we depend on -base and -good, and recommend -gl, -bad and -libav

I don&apos;t remember the exact discussion at the moment, but I think I
depended on -good in order to have an audio sink available, otherwise
we were hitting this assertion:

https://salsa.debian.org/webkit-team/webkit/-/blob/debian/2.32.1-1_deb10u1/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp#L1322

The recommended packages are necessary in order to play videos
(YouTube etc).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816257</commentid>
    <comment_count>8</comment_count>
    <who name="">openaudible</who>
    <bug_when>2021-11-17 18:13:05 -0800</bug_when>
    <thetext>Here is the stack trace. I&apos;ve never used apport-retrace. 

#0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=139724797575232) at pthread_kill.c:44
#1  __pthread_kill_internal (signo=6, threadid=139724797575232) at pthread_kill.c:80
#2  __GI___pthread_kill (threadid=139724797575232, signo=signo@entry=6) at pthread_kill.c:91
#3  0x00007f143d884476 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#4  0x00007f143d86a7b7 in __GI_abort () at abort.c:79
#5  0x00007f143e09d260 in CRASH_WITH_INFO(...) () at WTF/Headers/wtf/Assertions.h:750
#6  WebCore::makeGStreamerElement () at ../Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:508
#7  0x00007f14401e736e in WebCore::MediaPlayerPrivateGStreamer::createVideoSink () at ../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3428
#8  0x00007f14401efef1 in WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin () at ../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2741
#9  0x00007f14401f0aeb in WebCore::MediaPlayerPrivateGStreamer::load () at ../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:313
#10 0x00007f143fb3c91e in WebCore::MediaPlayerPrivateInterface::load () at ../Source/WebCore/platform/graphics/MediaPlayerPrivate.h:44
#11 WebCore::MediaPlayer::loadWithNextMediaEngine () at ../Source/WebCore/platform/graphics/MediaPlayer.cpp:595
#12 0x00007f143fb3cf11 in WebCore::MediaPlayer::load () at ../Source/WebCore/platform/graphics/MediaPlayer.cpp:474
#13 0x00007f143f5ffafb in WebCore::HTMLMediaElement::loadResource () at ../Source/WebCore/html/HTMLMediaElement.cpp:1576
#14 0x00007f143f600ab5 in WebCore::HTMLMediaElement::loadNextSourceChild () at ../Source/WebCore/html/HTMLMediaElement.cpp:1449
#15 0x00007f143f3ff72a in WTF::Function&lt;void ()&gt;::operator()() const () at WTF/Headers/wtf/Function.h:82
#16 WebCore::EventLoopFunctionDispatchTask::execute () at ../Source/WebCore/dom/EventLoop.cpp:159
#17 WebCore::EventLoop::run () at ../Source/WebCore/dom/EventLoop.cpp:123
#18 0x00007f143f4897d1 in WebCore::WindowEventLoop::didReachTimeToRun () at ../Source/WebCore/dom/WindowEventLoop.cpp:120
#19 0x00007f143fa96de9 in WebCore::ThreadTimers::sharedTimerFiredInternal () at ../Source/WebCore/platform/ThreadTimers.cpp:127
#20 WebCore::ThreadTimers::sharedTimerFiredInternal () at ../Source/WebCore/platform/ThreadTimers.cpp:99
#21 0x00007f143d076415 in operator() () at ../Source/WTF/wtf/glib/RunLoopGLib.cpp:177

If I&apos;m reading the right source, I should get a friendly message saying &quot;GStreamer element %s not found. Please install it&quot;... ? But don&apos;t see it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816325</commentid>
    <comment_count>9</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2021-11-17 23:20:28 -0800</bug_when>
    <thetext>(In reply to openaudible from comment #8)
&gt; Here is the stack trace. I&apos;ve never used apport-retrace. 
&gt; 
&gt; #0  __pthread_kill_implementation (no_tid=0, signo=6,
&gt; threadid=139724797575232) at pthread_kill.c:44
&gt; #1  __pthread_kill_internal (signo=6, threadid=139724797575232) at
&gt; pthread_kill.c:80
&gt; #2  __GI___pthread_kill (threadid=139724797575232, signo=signo@entry=6) at
&gt; pthread_kill.c:91
&gt; #3  0x00007f143d884476 in __GI_raise (sig=sig@entry=6) at
&gt; ../sysdeps/posix/raise.c:26
&gt; #4  0x00007f143d86a7b7 in __GI_abort () at abort.c:79
&gt; #5  0x00007f143e09d260 in CRASH_WITH_INFO(...) () at
&gt; WTF/Headers/wtf/Assertions.h:750
&gt; #6  WebCore::makeGStreamerElement () at
&gt; ../Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:508
&gt; #7  0x00007f14401e736e in
&gt; WebCore::MediaPlayerPrivateGStreamer::createVideoSink () at
&gt; ../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.
&gt; cpp:3428
&gt; #8  0x00007f14401efef1 in
&gt; WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin () at
&gt; ../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.
&gt; cpp:2741
&gt; #9  0x00007f14401f0aeb in WebCore::MediaPlayerPrivateGStreamer::load () at
&gt; ../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.
&gt; cpp:313
&gt; #10 0x00007f143fb3c91e in WebCore::MediaPlayerPrivateInterface::load () at
&gt; ../Source/WebCore/platform/graphics/MediaPlayerPrivate.h:44
&gt; #11 WebCore::MediaPlayer::loadWithNextMediaEngine () at
&gt; ../Source/WebCore/platform/graphics/MediaPlayer.cpp:595
&gt; #12 0x00007f143fb3cf11 in WebCore::MediaPlayer::load () at
&gt; ../Source/WebCore/platform/graphics/MediaPlayer.cpp:474
&gt; #13 0x00007f143f5ffafb in WebCore::HTMLMediaElement::loadResource () at
&gt; ../Source/WebCore/html/HTMLMediaElement.cpp:1576
&gt; #14 0x00007f143f600ab5 in WebCore::HTMLMediaElement::loadNextSourceChild ()
&gt; at ../Source/WebCore/html/HTMLMediaElement.cpp:1449
&gt; #15 0x00007f143f3ff72a in WTF::Function&lt;void ()&gt;::operator()() const () at
&gt; WTF/Headers/wtf/Function.h:82
&gt; #16 WebCore::EventLoopFunctionDispatchTask::execute () at
&gt; ../Source/WebCore/dom/EventLoop.cpp:159
&gt; #17 WebCore::EventLoop::run () at ../Source/WebCore/dom/EventLoop.cpp:123
&gt; #18 0x00007f143f4897d1 in WebCore::WindowEventLoop::didReachTimeToRun () at
&gt; ../Source/WebCore/dom/WindowEventLoop.cpp:120
&gt; #19 0x00007f143fa96de9 in WebCore::ThreadTimers::sharedTimerFiredInternal ()
&gt; at ../Source/WebCore/platform/ThreadTimers.cpp:127
&gt; #20 WebCore::ThreadTimers::sharedTimerFiredInternal () at
&gt; ../Source/WebCore/platform/ThreadTimers.cpp:99
&gt; #21 0x00007f143d076415 in operator() () at
&gt; ../Source/WTF/wtf/glib/RunLoopGLib.cpp:177
&gt; 
&gt; If I&apos;m reading the right source, I should get a friendly message saying
&gt; &quot;GStreamer element %s not found. Please install it&quot;... ? But don&apos;t see it.

This should be stored in the journal or wherever logs go, but it&apos;s crashing in a RELEASE_ASSERT because WebKit can&apos;t function for that operation without the required GStreamer plugin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816374</commentid>
    <comment_count>10</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2021-11-18 03:24:51 -0800</bug_when>
    <thetext>(In reply to openaudible from comment #8)
&gt; Here is the stack trace. I&apos;ve never used apport-retrace. 
&gt; 
&gt; #0  __pthread_kill_implementation (no_tid=0, signo=6,
&gt; threadid=139724797575232) at pthread_kill.c:44
&gt; #1  __pthread_kill_internal (signo=6, threadid=139724797575232) at
&gt; pthread_kill.c:80
&gt; #2  __GI___pthread_kill (threadid=139724797575232, signo=signo@entry=6) at
&gt; pthread_kill.c:91
&gt; #3  0x00007f143d884476 in __GI_raise (sig=sig@entry=6) at
&gt; ../sysdeps/posix/raise.c:26
&gt; #4  0x00007f143d86a7b7 in __GI_abort () at abort.c:79
&gt; #5  0x00007f143e09d260 in CRASH_WITH_INFO(...) () at
&gt; WTF/Headers/wtf/Assertions.h:750
&gt; #6  WebCore::makeGStreamerElement () at
&gt; ../Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:508
&gt; #7  0x00007f14401e736e in
&gt; WebCore::MediaPlayerPrivateGStreamer::createVideoSink () at
&gt; ../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.
&gt; cpp:3428
&gt; #8  0x00007f14401efef1 in
&gt; WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin () at
&gt; ../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.
&gt; cpp:2741
&gt; #9  0x00007f14401f0aeb in WebCore::MediaPlayerPrivateGStreamer::load () at
&gt; ../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.
&gt; cpp:313
&gt; #10 0x00007f143fb3c91e in WebCore::MediaPlayerPrivateInterface::load () at
&gt; ../Source/WebCore/platform/graphics/MediaPlayerPrivate.h:44
&gt; #11 WebCore::MediaPlayer::loadWithNextMediaEngine () at
&gt; ../Source/WebCore/platform/graphics/MediaPlayer.cpp:595
&gt; #12 0x00007f143fb3cf11 in WebCore::MediaPlayer::load () at
&gt; ../Source/WebCore/platform/graphics/MediaPlayer.cpp:474
&gt; #13 0x00007f143f5ffafb in WebCore::HTMLMediaElement::loadResource () at
&gt; ../Source/WebCore/html/HTMLMediaElement.cpp:1576
&gt; #14 0x00007f143f600ab5 in WebCore::HTMLMediaElement::loadNextSourceChild ()
&gt; at ../Source/WebCore/html/HTMLMediaElement.cpp:1449
&gt; #15 0x00007f143f3ff72a in WTF::Function&lt;void ()&gt;::operator()() const () at
&gt; WTF/Headers/wtf/Function.h:82
&gt; #16 WebCore::EventLoopFunctionDispatchTask::execute () at
&gt; ../Source/WebCore/dom/EventLoop.cpp:159
&gt; #17 WebCore::EventLoop::run () at ../Source/WebCore/dom/EventLoop.cpp:123
&gt; #18 0x00007f143f4897d1 in WebCore::WindowEventLoop::didReachTimeToRun () at
&gt; ../Source/WebCore/dom/WindowEventLoop.cpp:120
&gt; #19 0x00007f143fa96de9 in WebCore::ThreadTimers::sharedTimerFiredInternal ()
&gt; at ../Source/WebCore/platform/ThreadTimers.cpp:127
&gt; #20 WebCore::ThreadTimers::sharedTimerFiredInternal () at
&gt; ../Source/WebCore/platform/ThreadTimers.cpp:99
&gt; #21 0x00007f143d076415 in operator() () at
&gt; ../Source/WTF/wtf/glib/RunLoopGLib.cpp:177
&gt; 
&gt; If I&apos;m reading the right source, I should get a friendly message saying
&gt; &quot;GStreamer element %s not found. Please install it&quot;... ? But don&apos;t see it.

That comes from the makeGStreamerElement() helper function (source in
Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp) indeed,
and as Michael mentioned it typically goes to the journal. As

From your backtrace and knowing that you are running Ubuntu 21.10, that
means it&apos;s WebKitGTK 2.34.0 or 2.34.1, which means frame #7 is doing this:

    if (!m_player-&gt;isVideoPlayer()) {
        m_videoSink = makeGStreamerElement(&quot;fakevideosink&quot;, nullptr);
        return m_videoSink.get();
    }

This element comes from libgstdebugutilsbad.so, which is part of the
gstreamer1.0-plugins-bad Ubuntu package. It looks to me like a packaging
issue, and that distro packages should depend on -bad, not only recommend
it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816425</commentid>
    <comment_count>11</comment_count>
    <who name="">openaudible</who>
    <bug_when>2021-11-18 07:34:55 -0800</bug_when>
    <thetext>Great. I don&apos;t know what/where the journal is.. but a message stderr/stdout would be nice in WTFCrashWithInfo.

I do think there is just a dependency issue going on. Make bad plugins required? That missing plug-in &quot;might&quot; be causing other bugs I didn&apos;t uncover. 

Thanks for looking into this and your hard work. I don&apos;t envy all those bugs in your tracker. 

Cheers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816464</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-11-18 08:53:35 -0800</bug_when>
    <thetext>(In reply to Adrian Perez from comment #10)
&gt; This element comes from libgstdebugutilsbad.so, which is part of the
&gt; gstreamer1.0-plugins-bad Ubuntu package. It looks to me like a packaging
&gt; issue, and that distro packages should depend on -bad, not only recommend
&gt; it.

Well that&apos;s for Calvaris and the other WebKit/GStreamer developers to decide, certainly not for me. I have no strong opinion either way. I&apos;m fine with changing Fedora&apos;s packaging to use Requires instead of Recommends if crashing is the desired behavior when the plugins are missing. But look at this:

    // The combiner relies on webvttenc, fail early if it&apos;s not there.
    if (!isGStreamerPluginAvailable(&quot;subenc&quot;)) {
        WTFLogAlways(&quot;WebKit wasn&apos;t able to find a WebVTT encoder. Not continuing without platform support for subtitles.&quot;);
        return nullptr;
    }

The existence of this check sort of implies the plugin is optional, and expected behavior if missing is to fail gracefully without crashing, right? Whichever strategy is adopted to handle missing GStreamer elements, the code should be consistent. I could be wrong, but I thought the strategy was that we can crash if base elements are missing, since WebKit cannot build without those, but -good or -bad elements use runtime checks since those could be easily forgotten by mistake. If the strategy is to always crash, that&apos;s fine too and I&apos;ll adjust our packaging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816466</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-11-18 08:54:26 -0800</bug_when>
    <thetext>(In reply to openaudible from comment #8)
&gt; Here is the stack trace.

That helps, thanks. That&apos;s a good stacktrace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816510</commentid>
    <comment_count>14</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2021-11-18 10:51:09 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #12)
&gt; (In reply to Adrian Perez from comment #10)
&gt; &gt; This element comes from libgstdebugutilsbad.so, which is part of the
&gt; &gt; gstreamer1.0-plugins-bad Ubuntu package. It looks to me like a packaging
&gt; &gt; issue, and that distro packages should depend on -bad, not only recommend
&gt; &gt; it.
&gt; 
&gt; Well that&apos;s for Calvaris and the other WebKit/GStreamer developers to
&gt; decide, certainly not for me. I have no strong opinion either way. I&apos;m fine
&gt; with changing Fedora&apos;s packaging to use Requires instead of Recommends if
&gt; crashing is the desired behavior when the plugins are missing. But look at
&gt; this:
&gt; 
&gt;     // The combiner relies on webvttenc, fail early if it&apos;s not there.
&gt;     if (!isGStreamerPluginAvailable(&quot;subenc&quot;)) {
&gt;         WTFLogAlways(&quot;WebKit wasn&apos;t able to find a WebVTT encoder. Not
&gt; continuing without platform support for subtitles.&quot;);
&gt;         return nullptr;
&gt;     }
&gt; 
&gt; The existence of this check sort of implies the plugin is optional, and
&gt; expected behavior if missing is to fail gracefully without crashing, right?
&gt; Whichever strategy is adopted to handle missing GStreamer elements, the code
&gt; should be consistent. I could be wrong, but I thought the strategy was that
&gt; we can crash if base elements are missing, since WebKit cannot build without
&gt; those, but -good or -bad elements use runtime checks since those could be
&gt; easily forgotten by mistake. If the strategy is to always crash, that&apos;s fine
&gt; too and I&apos;ll adjust our packaging.

I think that I did not manage to make my point clear earlier..

 * WebVTT (subtitles) support is optional, and as you correctly point out
   there is a runtime check on the “subenc“ element.

 * OTOH gst-plugins-bad is *NOT* optional because media elements which do
   not have video (I guess they are audio-only) will use “fakevideosink“
   unconditionally. Line 3428 in MediaPlayerPrivateGStreamer.cpp (frame #7)
   from the Very Good Indeed™ stacktrace is using makeGStreamerElement(),
   which will assert that the element was created.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816585</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-11-18 13:12:48 -0800</bug_when>
    <thetext>(In reply to Adrian Perez from comment #14)
&gt;  * WebVTT (subtitles) support is optional, and as you correctly point out
&gt;    there is a runtime check on the “subenc“ element.
&gt; 
&gt;  * OTOH gst-plugins-bad is *NOT* optional because media elements which do
&gt;    not have video (I guess they are audio-only) will use “fakevideosink“
&gt;    unconditionally. Line 3428 in MediaPlayerPrivateGStreamer.cpp (frame #7)
&gt;    from the Very Good Indeed™ stacktrace is using makeGStreamerElement(),
&gt;    which will assert that the element was created.

What I don&apos;t understand is whether this crash is the desired behavior or not. Clearly both Berto and myself assumed otherwise, or we would have had Requires in our packaging. If this is the desired end result, then we can say I was wrong about it being optional, close the WebKit bug here, and go add our downstream Requires. But it seems inconsistent with how we handle other missing GStreamer elements, yes?

Anyway... yeah, it&apos;s a good stacktrace. :P The place where the crash happens is not even close to where OP thought it was happening. That&apos;s why we need stacktraces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826562</commentid>
    <comment_count>16</comment_count>
      <attachid>447881</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-12-23 09:38:59 -0800</bug_when>
    <thetext>Created attachment 447881
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826563</commentid>
    <comment_count>17</comment_count>
      <attachid>447882</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-12-23 09:44:08 -0800</bug_when>
    <thetext>Created attachment 447882
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826591</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-12-23 11:58:53 -0800</bug_when>
    <thetext>Can you confirm that we should add Requires for gst-plugins-bad to downstream packaging, in addition to both -good and -base?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826604</commentid>
    <comment_count>19</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-12-23 12:34:49 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #18)
&gt; Can you confirm that we should add Requires for gst-plugins-bad to
&gt; downstream packaging, in addition to both -good and -base?

Yes, due mostly to fakevideosink, I&apos;m afraid (and some day for GstWebRTC, unless it moves elsewhere).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826615</commentid>
    <comment_count>20</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-23 12:57:43 -0800</bug_when>
    <thetext>Committed r287410 (245545@main): &lt;https://commits.webkit.org/245545@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 447882.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826616</commentid>
    <comment_count>21</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-23 12:58:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/86863068&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838871</commentid>
    <comment_count>22</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-02-08 14:08:45 -0800</bug_when>
    <thetext>Due to some downstream complaints about increased install media size, I&apos;ll ask one more time just to be perfectly sure we have this correct:

Option 1: if GStreamer elements are missing, WebKit will print a warning, fail to play media, and not crash. This corresponds to a Recommends dependency downstream.

Option 2: if GStreamer elements are missing, WebKit will gracefully crash. This corresponds to a Requires dependency downstream.

I&apos;ve implemented Option 2 downstream per feedback in this bug, but that doesn&apos;t seem entirely consistent with WebKit&apos;s actual behavior. Do you still agree that Option 2 (Requires) is what we are aiming for?

In retrospect, Option 1 seemed nicer to me, but of course that&apos;s up to GStreamer port maintainers to decide, not up to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838893</commentid>
    <comment_count>23</comment_count>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2022-02-08 14:45:30 -0800</bug_when>
    <thetext>Just to chime in with a few more notes from the downstream issue here - https://bugzilla.redhat.com/show_bug.cgi?id=2031213 : the actual use case here is the Fedora (and RHEL) installer. In this environment yelp (GNOME&apos;s help browser) is installed so that we can display the installer&apos;s own help pages to the user. yelp uses webkit for rendering.

There is no general-purpose web browser in the environment. There are no video or audio files for webkit to play. There are only help pages to be displayed in yelp.

So it&apos;s a bit sad that we now have a dozen entirely useless libraries related to audio and video playback pulled into the installer environment, which needs to be as streamlined as possible.

We do have a mechanism by which we can override the dependencies and rip the packages back out when build the installer, but this is somewhat fragile if the package names change. We&apos;ll have to do that if webkit isn&apos;t going to fail more gracefully in this kind of case, I guess, but it&apos;d be nice not to have to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1839016</commentid>
    <comment_count>24</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2022-02-08 22:10:01 -0800</bug_when>
    <thetext>(In reply to Adam Williamson from comment #23)
&gt; Just to chime in with a few more notes from the downstream issue here -
&gt; https://bugzilla.redhat.com/show_bug.cgi?id=2031213 : the actual use case
&gt; here is the Fedora (and RHEL) installer. In this environment yelp (GNOME&apos;s
&gt; help browser) is installed so that we can display the installer&apos;s own help
&gt; pages to the user. yelp uses webkit for rendering.
&gt; 
&gt; There is no general-purpose web browser in the environment. There are no
&gt; video or audio files for webkit to play. There are only help pages to be
&gt; displayed in yelp.
&gt; 
&gt; So it&apos;s a bit sad that we now have a dozen entirely useless libraries
&gt; related to audio and video playback pulled into the installer environment,
&gt; which needs to be as streamlined as possible.
&gt; 
&gt; We do have a mechanism by which we can override the dependencies and rip the
&gt; packages back out when build the installer, but this is somewhat fragile if
&gt; the package names change. We&apos;ll have to do that if webkit isn&apos;t going to
&gt; fail more gracefully in this kind of case, I guess, but it&apos;d be nice not to
&gt; have to.

If it&apos;s in the installer, I guess you can build WebKit without the VIDEO option active maybe even as a static library.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1839041</commentid>
    <comment_count>25</comment_count>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2022-02-09 00:23:12 -0800</bug_when>
    <thetext>Unfortunately that&apos;s not an option - we don&apos;t build the installer components separately, the image is built out of the regular distro packages.

If there&apos;s nothing else that can be done we can strip the packages out in the &apos;cleanup&apos; phase of the installer build, it&apos;s just slightly sucky :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1839111</commentid>
    <comment_count>26</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-09 06:09:58 -0800</bug_when>
    <thetext>incoming patch to gracefully handle missing fakevideosink</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1839112</commentid>
    <comment_count>27</comment_count>
      <attachid>451364</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-09 06:12:11 -0800</bug_when>
    <thetext>Created attachment 451364
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1839115</commentid>
    <comment_count>28</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-02-09 06:17:45 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #22)
&gt; Option 1: if GStreamer elements are missing, WebKit will print a warning,
&gt; fail to play media, and not crash. This corresponds to a Recommends
&gt; dependency downstream.

I&apos;ll let Calvaris or another multimedia reviewer approve this. But it looks good to me.

For avoidance of doubt, this implements Option 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1839207</commentid>
    <comment_count>29</comment_count>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2022-02-09 09:13:37 -0800</bug_when>
    <thetext>That&apos;s awesome, thanks very much!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1839250</commentid>
    <comment_count>30</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-09 10:14:08 -0800</bug_when>
    <thetext>Committed r289480 (247022@main): &lt;https://commits.webkit.org/247022@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 451364.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847684</commentid>
    <comment_count>31</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-03-02 17:04:01 -0800</bug_when>
    <thetext>*** Bug 237383 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447881</attachid>
            <date>2021-12-23 09:38:59 -0800</date>
            <delta_ts>2021-12-23 09:43:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233230-20211223093858.patch</filename>
            <type>text/plain</type>
            <size>2026</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGI1M2U5ZWQ3YTlmOGZj
YzhhZGQyYzY5YzUxMGVmYzk4MzJmM2NiYy4uMTM2ZjQyZTY2ZTY5YTc2YWI1Mzc2NjdiODNlZjlh
YTNkYWM3Y2RmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTEyLTIzICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgbWlzaGFuZGxlcyBmYWlsdXJlIHRvIGNyZWF0
ZSBXZWJLaXRUZXh0Q29tYmluZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzMzIzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEdyYWNlZnVsbHkgZmFpbCB3aGVuIHRoZSBzdWJlbmMgcGx1Z2luIGlzIG5v
dCBhdmFpbGFibGUuIEl0IGlzIG9wdGlvbmFsLCB3ZSBzaG91bGQgbm90CisgICAgICAgIGFzc2Vy
dCBvciBjcmFzaCBpZiBpdCdzIG5vdCBmb3VuZC4gVHdvIHdhcm5pbmdzIGFyZSBsb2dnZWQgYWxy
ZWFkeSB3aGVuIGl0J3Mgbm90IGZvdW5kLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4pOgorCiAy
MDIxLTEyLTIzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbR1RLXVthMTF5XSBUZXN0IGFjY2Vzc2liaWxpdHkvc3ZnLXJlbW90ZS1lbGVtZW50
Lmh0bWwgY3Jhc2hlcyB3aXRoIEFUU1BJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDJkZTJkODQ2MGQ1OGYwYTFiOWI4MzEzMzVhZDY1OWEz
N2RmMjM2NzMuLmZiMmYwMGVmODI0YTlmNzg2MWQ0NmVkZDU3YjY1NzZjMTgxM2E4MjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0yNzU5
LDkgKzI3NTksOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NU
UGxheUJpbihjb25zdCBVUkwmIHVybCkKICAgICBpZiAobV9pc0xlZ2FjeVBsYXliaW4pCiAgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5lLmdldCgpLCAidGV4dC1jaGFu
Z2VkIiwgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAKLSAgICBHc3RF
bGVtZW50KiB0ZXh0Q29tYmluZXIgPSB3ZWJraXRUZXh0Q29tYmluZXJOZXcoKTsKLSAgICBBU1NF
UlQodGV4dENvbWJpbmVyKTsKLSAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgInRl
eHQtc3RyZWFtLWNvbWJpbmVyIiwgdGV4dENvbWJpbmVyLCBudWxscHRyKTsKKyAgICBpZiAoYXV0
byogdGV4dENvbWJpbmVyID0gd2Via2l0VGV4dENvbWJpbmVyTmV3KCkpCisgICAgICAgIGdfb2Jq
ZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAidGV4dC1zdHJlYW0tY29tYmluZXIiLCB0ZXh0Q29t
YmluZXIsIG51bGxwdHIpOwogCiAgICAgbV90ZXh0U2luayA9IHdlYmtpdFRleHRTaW5rTmV3KCp0
aGlzKTsKICAgICBBU1NFUlQobV90ZXh0U2luayk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447882</attachid>
            <date>2021-12-23 09:44:08 -0800</date>
            <delta_ts>2022-02-09 06:37:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233230-20211223094405.patch</filename>
            <type>text/plain</type>
            <size>2910</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGI1M2U5ZWQ3YTlmOGZj
YzhhZGQyYzY5YzUxMGVmYzk4MzJmM2NiYy4uMTM2ZjQyZTY2ZTY5YTc2YWI1Mzc2NjdiODNlZjlh
YTNkYWM3Y2RmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTEyLTIzICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgbWlzaGFuZGxlcyBmYWlsdXJlIHRvIGNyZWF0
ZSBXZWJLaXRUZXh0Q29tYmluZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzMzIzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEdyYWNlZnVsbHkgZmFpbCB3aGVuIHRoZSBzdWJlbmMgcGx1Z2luIGlzIG5v
dCBhdmFpbGFibGUuIEl0IGlzIG9wdGlvbmFsLCB3ZSBzaG91bGQgbm90CisgICAgICAgIGFzc2Vy
dCBvciBjcmFzaCBpZiBpdCdzIG5vdCBmb3VuZC4gVHdvIHdhcm5pbmdzIGFyZSBsb2dnZWQgYWxy
ZWFkeSB3aGVuIGl0J3Mgbm90IGZvdW5kLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4pOgorCiAy
MDIxLTEyLTIzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbR1RLXVthMTF5XSBUZXN0IGFjY2Vzc2liaWxpdHkvc3ZnLXJlbW90ZS1lbGVtZW50
Lmh0bWwgY3Jhc2hlcyB3aXRoIEFUU1BJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDJkZTJkODQ2MGQ1OGYwYTFiOWI4MzEzMzVhZDY1OWEz
N2RmMjM2NzMuLmZiMmYwMGVmODI0YTlmNzg2MWQ0NmVkZDU3YjY1NzZjMTgxM2E4MjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0yNzU5
LDkgKzI3NTksOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NU
UGxheUJpbihjb25zdCBVUkwmIHVybCkKICAgICBpZiAobV9pc0xlZ2FjeVBsYXliaW4pCiAgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5lLmdldCgpLCAidGV4dC1jaGFu
Z2VkIiwgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAKLSAgICBHc3RF
bGVtZW50KiB0ZXh0Q29tYmluZXIgPSB3ZWJraXRUZXh0Q29tYmluZXJOZXcoKTsKLSAgICBBU1NF
UlQodGV4dENvbWJpbmVyKTsKLSAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgInRl
eHQtc3RyZWFtLWNvbWJpbmVyIiwgdGV4dENvbWJpbmVyLCBudWxscHRyKTsKKyAgICBpZiAoYXV0
byogdGV4dENvbWJpbmVyID0gd2Via2l0VGV4dENvbWJpbmVyTmV3KCkpCisgICAgICAgIGdfb2Jq
ZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAidGV4dC1zdHJlYW0tY29tYmluZXIiLCB0ZXh0Q29t
YmluZXIsIG51bGxwdHIpOwogCiAgICAgbV90ZXh0U2luayA9IHdlYmtpdFRleHRTaW5rTmV3KCp0
aGlzKTsKICAgICBBU1NFUlQobV90ZXh0U2luayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVGV4dENvbWJpbmVyR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0Q29tYmluZXJH
U3RyZWFtZXIuY3BwCmluZGV4IGRkMTBmMWEyZTUzMjZhNWNlMTVkYjE2OTYxN2EyYTg5YzcwNmUz
ZTguLjc4ZmZjMjVmZTFjNmQ2NDRjNTAyMzUxNjNhODBlZmRkMmY1ZGU0ZmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0Q29tYmluZXJH
U3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9UZXh0Q29tYmluZXJHU3RyZWFtZXIuY3BwCkBAIC0yMTksNyArMjE5LDcgQEAgR3N0RWxl
bWVudCogd2Via2l0VGV4dENvbWJpbmVyTmV3KCkKIHsKICAgICAvLyBUaGUgY29tYmluZXIgcmVs
aWVzIG9uIHdlYnZ0dGVuYywgZmFpbCBlYXJseSBpZiBpdCdzIG5vdCB0aGVyZS4KICAgICBpZiAo
IWlzR1N0cmVhbWVyUGx1Z2luQXZhaWxhYmxlKCJzdWJlbmMiKSkgewotICAgICAgICBXVEZMb2dB
bHdheXMoIldlYktpdCB3YXNuJ3QgYWJsZSB0byBmaW5kIGEgV2ViVlRUIGVuY29kZXIuIE5vdCBj
b250aW51aW5nIHdpdGhvdXQgcGxhdGZvcm0gc3VwcG9ydCBmb3Igc3VidGl0bGVzLiIpOworICAg
ICAgICBXVEZMb2dBbHdheXMoIldlYktpdCB3YXNuJ3QgYWJsZSB0byBmaW5kIGEgV2ViVlRUIGVu
Y29kZXIuIFN1YnRpdGxlcyBoYW5kbGluZyB3aWxsIGJlIGRlZ3JhZGVkIHVubGVzcyBnc3QtcGx1
Z2lucy1iYWQgaXMgaW5zdGFsbGVkLiIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451364</attachid>
            <date>2022-02-09 06:12:11 -0800</date>
            <delta_ts>2022-02-09 10:14:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233230-20220209061210.patch</filename>
            <type>text/plain</type>
            <size>3487</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5NDY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQxMThhMjEwNzBiZWJh
Y2I3YzU4YmUxZWEyZjg0YThhNmRkNWU4Ny4uNTk3MTIxMWRlOTBlZjYxODY1NjQ5M2FkM2FiZjRm
MTE2ZWYzNTZmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDIyLTAyLTA5ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgbWlzaGFuZGxlcyBmYWlsdXJlIHRvIGNyZWF0
ZSBXZWJLaXRUZXh0Q29tYmluZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzMzIzMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODY4NjMwNjg+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmFsbGJhY2sg
dG8gZmFrZXNpbmsgaW4gY2FzZSBmYWtldmlkZW9zaW5rIGlzIG5vdCBhdmFpbGFibGUuIEFsc28g
bm8gbG9uZ2VyIFJFTEVBU0VfQVNTRVJUCisgICAgICAgIGluIG1ha2VHU3RyZWFtZXJFbGVtZW50
IGFuZCBtYWtlR1N0cmVhbWVyQmluLiBXZSBzaG91bGQgZ3JhY2VmdWxseSBoYW5kbGUgY2FsbCBz
aXRlcyB3aGVuCisgICAgICAgIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gbnVsbHB0ci4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZUdTdHJlYW1lckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZUdTdHJlYW1lckJpbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2luayk6CisKIDIwMjItMDIt
MDkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtDU1MgQ29u
dGFpbmVyIFF1ZXJpZXNdIEltcGxlbWVudCBpbmxpbmUtc2l6ZSBjb250YWlubWVudApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1l
ckNvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
R1N0cmVhbWVyQ29tbW9uLmNwcAppbmRleCA5ZWNiZmU4M2NiZWJhYzU5YjVhNjU0ODYzODRjYjFj
NDY3NTZjNGYyLi45ZjQ5NWRkZjkwMmRmNGZmZGY1M2FmZThjMGY2NzRmNTZjYmY1ZmUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVh
bWVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcApAQCAtNTQ0LDcgKzU0NCw4IEBAIEdzdEJ1ZmZlciog
Z3N0QnVmZmVyTmV3V3JhcHBlZEZhc3Qodm9pZCogZGF0YSwgc2l6ZV90IGxlbmd0aCkKIEdzdEVs
ZW1lbnQqIG1ha2VHU3RyZWFtZXJFbGVtZW50KGNvbnN0IGNoYXIqIGZhY3RvcnlOYW1lLCBjb25z
dCBjaGFyKiBuYW1lKQogewogICAgIGF1dG8qIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5
X21ha2UoZmFjdG9yeU5hbWUsIG5hbWUpOwotICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FH
RShlbGVtZW50LCAiR1N0cmVhbWVyIGVsZW1lbnQgJXMgbm90IGZvdW5kLiBQbGVhc2UgaW5zdGFs
bCBpdCIsIGZhY3RvcnlOYW1lKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIFdURkxvZ0Fs
d2F5cygiR1N0cmVhbWVyIGVsZW1lbnQgJXMgbm90IGZvdW5kLiBQbGVhc2UgaW5zdGFsbCBpdCIs
IGZhY3RvcnlOYW1lKTsKICAgICByZXR1cm4gZWxlbWVudDsKIH0KIApAQCAtNTUyLDcgKzU1Myw4
IEBAIEdzdEVsZW1lbnQqIG1ha2VHU3RyZWFtZXJCaW4oY29uc3QgY2hhciogZGVzY3JpcHRpb24s
IGJvb2wgZ2hvc3RVbmxpbmtlZFBhZHMpCiB7CiAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVy
cm9yOwogICAgIGF1dG8qIGJpbiA9IGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbihkZXNj
cmlwdGlvbiwgZ2hvc3RVbmxpbmtlZFBhZHMsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKGJpbiwgIlVuYWJsZSB0byBjcmVhdGUgYmluIGZvciBkZXNj
cmlwdGlvbjogXCIlc1wiLiBFcnJvcjogJXMiLCBkZXNjcmlwdGlvbiwgZXJyb3ItPm1lc3NhZ2Up
OworICAgIGlmICghYmluKQorICAgICAgICBXVEZMb2dBbHdheXMoIlVuYWJsZSB0byBjcmVhdGUg
YmluIGZvciBkZXNjcmlwdGlvbjogXCIlc1wiLiBFcnJvcjogJXMiLCBkZXNjcmlwdGlvbiwgZXJy
b3ItPm1lc3NhZ2UpOwogICAgIHJldHVybiBiaW47CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggZmYwZmFkNWYwNGI3NDhjMjg0YmI1
ZjU5Y2I4MDEwZTZmZmNmZTkzOS4uNTNmM2E4MDEyYTMyZjdiYjAwOTlkYTRlZDkwZGVlMmExZmY2
Nzk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAKQEAgLTM0OTEsNiArMzQ5MSwxMiBAQCBHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2luaygpCiAKICAgICBpZiAoIW1fcGxheWVyLT5pc1ZpZGVv
UGxheWVyKCkpIHsKICAgICAgICAgbV92aWRlb1NpbmsgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgi
ZmFrZXZpZGVvc2luayIsIG51bGxwdHIpOworICAgICAgICBpZiAoIW1fdmlkZW9TaW5rKSB7Cisg
ICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJGYWxsaW5nIGJh
Y2sgdG8gZmFrZXNpbmsgZm9yIHZpZGVvIHJlbmRlcmluZyIpOworICAgICAgICAgICAgbV92aWRl
b1NpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImZha2VzaW5rIiwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBnX29iamVjdF9zZXQobV92aWRlb1NpbmsuZ2V0KCksICJzeW5jIiwgVFJVRSwg
bnVsbHB0cik7CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gbV92aWRlb1NpbmsuZ2V0KCk7
CiAgICAgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>