<?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>228932</bug_id>
          
          <creation_ts>2021-08-09 16:34:40 -0700</creation_ts>
          <short_desc>ThreadSanitizer: data race in WTF::StringImpl::deref() under WebKit::WebProcessPool::setMediaAccessibilityPreferences()</short_desc>
          <delta_ts>2021-08-10 08:20:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          <dependson>227617</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1783020</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-08-09 16:34:40 -0700</bug_when>
    <thetext>ThreadSanitizer: data race in WTF::StringImpl::deref() under WebKit::WebProcessPool::setMediaAccessibilityPreferences().

In Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm, the following code sends a Vector&lt;WTF::String&gt; object from a background thread to the main thread without an isolated copy of the WTF::String objects:

#if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
void WebProcessPool::setMediaAccessibilityPreferences(WebProcessProxy&amp; process)
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), [weakProcess = makeWeakPtr(process)] {
        auto captionDisplayMode = WebCore::CaptionUserPreferencesMediaAF::platformCaptionDisplayMode();
        auto preferredLanguages = WebCore::CaptionUserPreferencesMediaAF::platformPreferredLanguages();
        callOnMainRunLoop([weakProcess, captionDisplayMode, preferredLanguages] {
            if (weakProcess)
                weakProcess-&gt;send(Messages::WebProcess::SetMediaAccessibilityPreferences(captionDisplayMode, preferredLanguages), 0);
        });
    });
}
#endif

--

Thread sanitizer warning while running LayoutTests/crypto/crypto-random-values-types.html with WebKit r280760:

WARNING: ThreadSanitizer: data race (pid=46345)
  Read of size 4 at 0x7b080000ea00 by main thread:
    #0 WTF::StringImpl::deref() &lt;null&gt; (WebKit:x86_64+0x7aca)
    #1 WTF::VectorDestructor&lt;true, WTF::String&gt;::destruct(WTF::String*, WTF::String*) &lt;null&gt; (WebKit:x86_64+0x9867)
    #2 WTF::VectorTypeOperations&lt;WTF::String&gt;::destruct(WTF::String*, WTF::String*) &lt;null&gt; (WebKit:x86_64+0x97b0)
    #3 WTF::Vector&lt;WTF::String, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt;::~Vector() &lt;null&gt; (WebKit:x86_64+0x974f)
    #4 WTF::Vector&lt;WTF::String, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt;::~Vector() &lt;null&gt; (WebKit:x86_64+0x6eb9)
    #5 WebKit::WebProcessPool::setMediaAccessibilityPreferences(WebKit::WebProcessProxy&amp;)::$_3::operator()() const::&apos;lambda&apos;()::~() &lt;null&gt; (WebKit:x86_64+0x10cc72a)
    #6 WebKit::WebProcessPool::setMediaAccessibilityPreferences(WebKit::WebProcessProxy&amp;)::$_3::operator()() const::&apos;lambda&apos;()::~() &lt;null&gt; (WebKit:x86_64+0x10cba49)
    #7 WTF::Detail::CallableWrapper&lt;WebKit::WebProcessPool::setMediaAccessibilityPreferences(WebKit::WebProcessProxy&amp;)::$_3::operator()() const::&apos;lambda&apos;(), void&gt;::~CallableWrapper() &lt;null&gt; (WebKit:x86_64+0x10cbe00)
    #8 WTF::Detail::CallableWrapper&lt;WebKit::WebProcessPool::setMediaAccessibilityPreferences(WebKit::WebProcessProxy&amp;)::$_3::operator()() const::&apos;lambda&apos;(), void&gt;::~CallableWrapper() &lt;null&gt; (WebKit:x86_64+0x10cbcc9)
    #9 WTF::Detail::CallableWrapper&lt;WebKit::WebProcessPool::setMediaAccessibilityPreferences(WebKit::WebProcessProxy&amp;)::$_3::operator()() const::&apos;lambda&apos;(), void&gt;::~CallableWrapper() &lt;null&gt; (WebKit:x86_64+0x10cbcf9)
    #10 std::__1::default_delete&lt;WTF::Detail::CallableWrapperBase&lt;void&gt; &gt;::operator()(WTF::Detail::CallableWrapperBase&lt;void&gt;*) const &lt;null&gt; (JavaScriptCore:x86_64+0x149c7)
    #11 std::__1::unique_ptr&lt;WTF::Detail::CallableWrapperBase&lt;void&gt;, std::__1::default_delete&lt;WTF::Detail::CallableWrapperBase&lt;void&gt; &gt; &gt;::reset(WTF::Detail::CallableWrapperBase&lt;void&gt;*) &lt;null&gt; (JavaScriptCore:x86_64+0x1492d)
    #12 std::__1::unique_ptr&lt;WTF::Detail::CallableWrapperBase&lt;void&gt;, std::__1::default_delete&lt;WTF::Detail::CallableWrapperBase&lt;void&gt; &gt; &gt;::~unique_ptr() &lt;null&gt; (JavaScriptCore:x86_64+0x148bb)
    #13 std::__1::unique_ptr&lt;WTF::Detail::CallableWrapperBase&lt;void&gt;, std::__1::default_delete&lt;WTF::Detail::CallableWrapperBase&lt;void&gt; &gt; &gt;::~unique_ptr() &lt;null&gt; (JavaScriptCore:x86_64+0x14889)
    #14 WTF::Function&lt;void ()&gt;::~Function() &lt;null&gt; (JavaScriptCore:x86_64+0x14859)
    #15 WTF::Function&lt;void ()&gt;::~Function() &lt;null&gt; (JavaScriptCore:x86_64+0x134a9)
    #16 WTF::RunLoop::performWork() &lt;null&gt; (JavaScriptCore:x86_64+0x8d9aa)
    #17 WTF::RunLoop::performWork(void*) &lt;null&gt; (JavaScriptCore:x86_64+0x9072a)
    #18 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ &lt;null&gt; (CoreFoundation:x86_64+0x81354)
    #19 WTR::TestController::runUntil(bool&amp;, WTF::Seconds) &lt;null&gt; (WebKitTestRunner:x86_64+0x100054a1b)
    #20 WTR::TestController::resetStateToConsistentValues(WTR::TestOptions const&amp;, WTR::TestController::ResetStage)::$_4::operator()() const &lt;null&gt; (WebKitTestRunner:x86_64+0x10005a0b8)
    #21 WTR::TestController::resetStateToConsistentValues(WTR::TestOptions const&amp;, WTR::TestController::ResetStage) &lt;null&gt; (WebKitTestRunner:x86_64+0x100059032)
    #22 WTR::TestController::ensureViewSupportsOptionsForTest(WTR::TestInvocation const&amp;) &lt;null&gt; (WebKitTestRunner:x86_64+0x1000587ae)
    #23 WTR::TestController::configureViewForTest(WTR::TestInvocation const&amp;) &lt;null&gt; (WebKitTestRunner:x86_64+0x10005b480)
    #24 WTR::TestInvocation::invoke() &lt;null&gt; (WebKitTestRunner:x86_64+0x10009784c)
    #25 WTR::TestController::runTest(char const*) &lt;null&gt; (WebKitTestRunner:x86_64+0x10005b66e)
    #26 WTR::TestController::runTestingServerLoop() &lt;null&gt; (WebKitTestRunner:x86_64+0x10005ba17)
    #27 WTR::TestController::run() &lt;null&gt; (WebKitTestRunner:x86_64+0x10005523d)
    #28 WTR::TestController::TestController(int, char const**) &lt;null&gt; (WebKitTestRunner:x86_64+0x100054d4b)
    #29 WTR::TestController::TestController(int, char const**) &lt;null&gt; (WebKitTestRunner:x86_64+0x1000552e9)
    #30 main &lt;null&gt; (WebKitTestRunner:x86_64+0x10000804a)

  Previous write of size 4 at 0x7b080000ea00 by thread T3:
    #0 WTF::StringImpl::deref() &lt;null&gt; (WebKit:x86_64+0x7ada)
    #1 WTF::VectorDestructor&lt;true, WTF::String&gt;::destruct(WTF::String*, WTF::String*) &lt;null&gt; (WebKit:x86_64+0x9867)
    #2 WTF::VectorTypeOperations&lt;WTF::String&gt;::destruct(WTF::String*, WTF::String*) &lt;null&gt; (WebKit:x86_64+0x97b0)
    #3 WTF::Vector&lt;WTF::String, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt;::~Vector() &lt;null&gt; (WebKit:x86_64+0x974f)
    #4 WTF::Vector&lt;WTF::String, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt;::~Vector() &lt;null&gt; (WebKit:x86_64+0x6eb9)
    #5 WebKit::WebProcessPool::setMediaAccessibilityPreferences(WebKit::WebProcessProxy&amp;)::$_3::operator()() const &lt;null&gt; (WebKit:x86_64+0x10988c3)
    #6 invocation function for block in WebKit::WebProcessPool::setMediaAccessibilityPreferences(WebKit::WebProcessProxy&amp;) &lt;null&gt; (WebKit:x86_64+0x109882d)
    #7 __tsan::invoke_and_release_block(void*) &lt;null&gt; (libclang_rt.tsan_osx_dynamic.dylib:x86_64+0x7377b)
    #8 _dispatch_client_callout &lt;null&gt; (libdispatch.dylib:x86_64+0x34ff)

  Location is heap block of size 24 at 0x7b080000ea00 allocated by thread T3:
    #0 __sanitizer_mz_malloc &lt;null&gt; (libclang_rt.tsan_osx_dynamic.dylib:x86_64+0x5168a)
    #1 _malloc_zone_malloc &lt;null&gt; (libsystem_malloc.dylib:x86_64+0x1cf80)
    #2 bmalloc::Cache::allocateSlowCaseNullCache(bmalloc::HeapKind, unsigned long) &lt;null&gt; (JavaScriptCore:x86_64+0x11d240)
    #3 bmalloc::Cache::allocate(bmalloc::HeapKind, unsigned long) &lt;null&gt; (JavaScriptCore:x86_64+0x37629)
    #4 WTF::fastMalloc(unsigned long) &lt;null&gt; (JavaScriptCore:x86_64+0x36e5b)
    #5 WTF::StringImpl::operator new(unsigned long) &lt;null&gt; (JavaScriptCore:x86_64+0x34b69)
    #6 WTF::StringImpl::adopt(WTF::StringBuffer&lt;unsigned char&gt;&amp;&amp;) &lt;null&gt; (JavaScriptCore:x86_64+0xa6374)
    #7 WTF::String::String(__CFString const*) &lt;null&gt; (JavaScriptCore:x86_64+0x9ca9e)
    #8 WTF::String::String(__CFString const*) &lt;null&gt; (JavaScriptCore:x86_64+0x9cd20)
    #9 WebCore::CaptionUserPreferencesMediaAF::platformPreferredLanguages() &lt;null&gt; (WebCore:x86_64+0x2de4689)
    #10 WebKit::WebProcessPool::setMediaAccessibilityPreferences(WebKit::WebProcessProxy&amp;)::$_3::operator()() const &lt;null&gt; (WebKit:x86_64+0x1098876)
    #11 invocation function for block in WebKit::WebProcessPool::setMediaAccessibilityPreferences(WebKit::WebProcessProxy&amp;) &lt;null&gt; (WebKit:x86_64+0x109882d)
    #12 __tsan::invoke_and_release_block(void*) &lt;null&gt; (libclang_rt.tsan_osx_dynamic.dylib:x86_64+0x7377b)
    #13 _dispatch_client_callout &lt;null&gt; (libdispatch.dylib:x86_64+0x34ff)

  Thread T3 (tid=12850431, running) is a GCD worker thread

SUMMARY: ThreadSanitizer: data race (WebKitBuild/WebKit.framework/Versions/A/WebKit:x86_64+0x7aca) in WTF::StringImpl::deref()+0x1a</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1783023</commentid>
    <comment_count>1</comment_count>
      <attachid>435225</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-08-09 16:37:52 -0700</bug_when>
    <thetext>Created attachment 435225
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1783024</commentid>
    <comment_count>2</comment_count>
      <attachid>435225</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-08-09 16:39:47 -0700</bug_when>
    <thetext>Comment on attachment 435225
Patch v1

View in context: https://bugs.webkit.org/attachment.cgi?id=435225&amp;action=review

&gt; Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm:192
&gt; -        callOnMainRunLoop([weakProcess, captionDisplayMode, preferredLanguages] {
&gt; +        callOnMainRunLoop([weakProcess, captionDisplayMode, preferredLanguages = preferredLanguages.isolatedCopy()] {

I opted to make an isolatedCopy() here because the other use of WebCore::CaptionUserPreferencesMediaAF::platformPreferredLanguages() in Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm didn&apos;t involve separate threads:

#if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
void WebProcessPool::mediaAccessibilityPreferencesChangedCallback(CFNotificationCenterRef, void *observer, CFStringRef name, const void *, CFDictionaryRef userInfo)
{
    auto* pool = reinterpret_cast&lt;WebProcessPool*&gt;(observer);
    auto captionDisplayMode = WebCore::CaptionUserPreferencesMediaAF::platformCaptionDisplayMode();
    auto preferredLanguages = WebCore::CaptionUserPreferencesMediaAF::platformPreferredLanguages();
    pool-&gt;sendToAllProcesses(Messages::WebProcess::SetMediaAccessibilityPreferences(captionDisplayMode, preferredLanguages));
}
#endif</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1783027</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-09 16:47:58 -0700</bug_when>
    <thetext>&lt;rdar://problem/81718915&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1783030</commentid>
    <comment_count>4</comment_count>
      <attachid>435225</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-08-09 16:50:41 -0700</bug_when>
    <thetext>Comment on attachment 435225
Patch v1

View in context: https://bugs.webkit.org/attachment.cgi?id=435225&amp;action=review

r=me

&gt;&gt; Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm:192
&gt;&gt; +        callOnMainRunLoop([weakProcess, captionDisplayMode, preferredLanguages = preferredLanguages.isolatedCopy()] {
&gt; 
&gt; I opted to make an isolatedCopy() here because the other use of WebCore::CaptionUserPreferencesMediaAF::platformPreferredLanguages() in Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm didn&apos;t involve separate threads:
&gt; 
&gt; #if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
&gt; void WebProcessPool::mediaAccessibilityPreferencesChangedCallback(CFNotificationCenterRef, void *observer, CFStringRef name, const void *, CFDictionaryRef userInfo)
&gt; {
&gt;     auto* pool = reinterpret_cast&lt;WebProcessPool*&gt;(observer);
&gt;     auto captionDisplayMode = WebCore::CaptionUserPreferencesMediaAF::platformCaptionDisplayMode();
&gt;     auto preferredLanguages = WebCore::CaptionUserPreferencesMediaAF::platformPreferredLanguages();
&gt;     pool-&gt;sendToAllProcesses(Messages::WebProcess::SetMediaAccessibilityPreferences(captionDisplayMode, preferredLanguages));
&gt; }
&gt; #endif

nit: WTFMove(preferredLanguages).isolatedCopy() may be more efficient in some cases because of this version of isolatedCopy():
template&lt;typename U = T&gt; Vector&lt;U&gt; isolatedCopy() &amp;&amp;;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1783040</commentid>
    <comment_count>5</comment_count>
      <attachid>435227</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-08-09 17:38:01 -0700</bug_when>
    <thetext>Created attachment 435227
Patch v2 for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1783046</commentid>
    <comment_count>6</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-08-09 18:06:19 -0700</bug_when>
    <thetext>Regressed in r279591:

    Collect Accessibility preferences on a background queue
    https://bugs.webkit.org/show_bug.cgi?id=227617
    https://trac.webkit.org/changeset/279591/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1783170</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-08-10 08:20:45 -0700</bug_when>
    <thetext>Committed r280841 (240392@main): &lt;https://commits.webkit.org/240392@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 435227.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435225</attachid>
            <date>2021-08-09 16:37:52 -0700</date>
            <delta_ts>2021-08-10 08:16:08 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-228932-20210809163751.patch</filename>
            <type>text/plain</type>
            <size>2182</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMDIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDczMDQ1ZmViMWMxYjZlMDE2
ZTAwZjhlMWI5M2VlZDliYTk1YTAyYjguLmRlN2E4YWEwNGE0YWY2YTU5NGJlMDBlZjM1YTcxZDcz
MmI3MjVmMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDgtMDkgIERhdmlkIEtp
bHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KKworICAgICAgICBUaHJlYWRTYW5pdGl6ZXI6IGRh
dGEgcmFjZSBpbiBXVEY6OlN0cmluZ0ltcGw6OmRlcmVmKCkgdW5kZXIgV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6c2V0TWVkaWFBY2Nlc3NpYmlsaXR5UHJlZmVyZW5jZXMoKQorICAgICAgICA8aHR0
cHM6Ly93ZWJraXQub3JnL2IvMjI4OTMyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENvdmVyZWQgYnkgbnVtZXJvdXMgbGF5b3V0IHRlc3RzIHJ1bm5p
bmcgd2l0aCBUU2FuIGluY2x1ZGluZzoKKyAgICAgICAgICAgIGNyeXB0by9jcnlwdG8tcmFuZG9t
LXZhbHVlcy10eXBlcy5odG1sCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE1lZGlh
QWNjZXNzaWJpbGl0eVByZWZlcmVuY2VzKToKKyAgICAgICAgLSBNYWtlIGFuIGlzb2xhdGVkQ29w
eSgpIG9mIFZlY3RvcjxTdHJpbmc+IG9iamVjdCBiZWZvcmUgcGFzc2luZworICAgICAgICAgIGl0
IHRvIHRoZSBtYWluIHRocmVhZC4KKwogMjAyMS0wNy0xOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29u
X2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBbQVhdIEtleWJvYXJkIHRleHQgY2Fu
ZGlkYXRlcyBkb24ndCB1cGRhdGUgd2hlbiBjaGFuZ2luZyBzZWxlY3Rpb24gdXNpbmcgU3dpdGNo
IENvbnRyb2wKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBy
b2Nlc3NQb29sQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9j
ZXNzUG9vbENvY29hLm1tCmluZGV4IDJlNmI0YzEzNzYxOTJhYTYxMDljNGE5MThmMzQzZjQ0MzNh
MmIxYzMuLmJhMmE5MDhhZTU3ODI4MTI2MzQ0NTYxOTNmYTIyMDNhMTUzYmQ3YjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5t
bQpAQCAtMTg5LDcgKzE4OSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldE1lZGlhQWNjZXNz
aWJpbGl0eVByZWZlcmVuY2VzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZ
X0RFRkFVTFQsIDApLCBbd2Vha1Byb2Nlc3MgPSBtYWtlV2Vha1B0cihwcm9jZXNzKV0gewogICAg
ICAgICBhdXRvIGNhcHRpb25EaXNwbGF5TW9kZSA9IFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNZWRpYUFGOjpwbGF0Zm9ybUNhcHRpb25EaXNwbGF5TW9kZSgpOwogICAgICAgICBhdXRv
IHByZWZlcnJlZExhbmd1YWdlcyA9IFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGOjpwbGF0Zm9ybVByZWZlcnJlZExhbmd1YWdlcygpOwotICAgICAgICBjYWxsT25NYWluUnVu
TG9vcChbd2Vha1Byb2Nlc3MsIGNhcHRpb25EaXNwbGF5TW9kZSwgcHJlZmVycmVkTGFuZ3VhZ2Vz
XSB7CisgICAgICAgIGNhbGxPbk1haW5SdW5Mb29wKFt3ZWFrUHJvY2VzcywgY2FwdGlvbkRpc3Bs
YXlNb2RlLCBwcmVmZXJyZWRMYW5ndWFnZXMgPSBwcmVmZXJyZWRMYW5ndWFnZXMuaXNvbGF0ZWRD
b3B5KCldIHsKICAgICAgICAgICAgIGlmICh3ZWFrUHJvY2VzcykKICAgICAgICAgICAgICAgICB3
ZWFrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0TWVkaWFBY2Nlc3NpYmls
aXR5UHJlZmVyZW5jZXMoY2FwdGlvbkRpc3BsYXlNb2RlLCBwcmVmZXJyZWRMYW5ndWFnZXMpLCAw
KTsKICAgICAgICAgfSk7Cg==
</data>
<flag name="review"
          id="457948"
          type_id="1"
          status="+"
          setter="cdumez"
    />
    <flag name="commit-queue"
          id="457964"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435227</attachid>
            <date>2021-08-09 17:38:01 -0700</date>
            <delta_ts>2021-08-10 08:20:46 -0700</delta_ts>
            <desc>Patch v2 for landing</desc>
            <filename>bug-228932-20210809173800.patch</filename>
            <type>text/plain</type>
            <size>2188</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMDIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDczMDQ1ZmViMWMxYjZlMDE2
ZTAwZjhlMWI5M2VlZDliYTk1YTAyYjguLmQwNjA1Y2QzZGY0M2ViYmZkNTY4YzBmOTAzMzUzN2Fj
ZmZkMjM3ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDgtMDkgIERhdmlkIEtp
bHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KKworICAgICAgICBUaHJlYWRTYW5pdGl6ZXI6IGRh
dGEgcmFjZSBpbiBXVEY6OlN0cmluZ0ltcGw6OmRlcmVmKCkgdW5kZXIgV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6c2V0TWVkaWFBY2Nlc3NpYmlsaXR5UHJlZmVyZW5jZXMoKQorICAgICAgICA8aHR0
cHM6Ly93ZWJraXQub3JnL2IvMjI4OTMyPgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1
bWV6LgorCisgICAgICAgIENvdmVyZWQgYnkgbnVtZXJvdXMgbGF5b3V0IHRlc3RzIHJ1bm5pbmcg
d2l0aCBUU2FuIGluY2x1ZGluZzoKKyAgICAgICAgICAgIGNyeXB0by9jcnlwdG8tcmFuZG9tLXZh
bHVlcy10eXBlcy5odG1sCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bv
b2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldE1lZGlhQWNj
ZXNzaWJpbGl0eVByZWZlcmVuY2VzKToKKyAgICAgICAgLSBNYWtlIGFuIGlzb2xhdGVkQ29weSgp
IG9mIFZlY3RvcjxTdHJpbmc+IG9iamVjdCBiZWZvcmUgcGFzc2luZworICAgICAgICAgIGl0IHRv
IHRoZSBtYWluIHRocmVhZC4KKwogMjAyMS0wNy0xOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hz
aWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBbQVhdIEtleWJvYXJkIHRleHQgY2FuZGlk
YXRlcyBkb24ndCB1cGRhdGUgd2hlbiBjaGFuZ2luZyBzZWxlY3Rpb24gdXNpbmcgU3dpdGNoIENv
bnRyb2wKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nl
c3NQb29sQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNz
UG9vbENvY29hLm1tCmluZGV4IDJlNmI0YzEzNzYxOTJhYTYxMDljNGE5MThmMzQzZjQ0MzNhMmIx
YzMuLjBjMzBhODBhMjVmMDI4MDY4ZmNhZjEzMzYzMDVjZGJkMmIzYjQyMTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpA
QCAtMTg5LDcgKzE4OSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldE1lZGlhQWNjZXNzaWJp
bGl0eVByZWZlcmVuY2VzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RF
RkFVTFQsIDApLCBbd2Vha1Byb2Nlc3MgPSBtYWtlV2Vha1B0cihwcm9jZXNzKV0gewogICAgICAg
ICBhdXRvIGNhcHRpb25EaXNwbGF5TW9kZSA9IFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGOjpwbGF0Zm9ybUNhcHRpb25EaXNwbGF5TW9kZSgpOwogICAgICAgICBhdXRvIHBy
ZWZlcnJlZExhbmd1YWdlcyA9IFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFG
OjpwbGF0Zm9ybVByZWZlcnJlZExhbmd1YWdlcygpOwotICAgICAgICBjYWxsT25NYWluUnVuTG9v
cChbd2Vha1Byb2Nlc3MsIGNhcHRpb25EaXNwbGF5TW9kZSwgcHJlZmVycmVkTGFuZ3VhZ2VzXSB7
CisgICAgICAgIGNhbGxPbk1haW5SdW5Mb29wKFt3ZWFrUHJvY2VzcywgY2FwdGlvbkRpc3BsYXlN
b2RlLCBwcmVmZXJyZWRMYW5ndWFnZXMgPSBXVEZNb3ZlKHByZWZlcnJlZExhbmd1YWdlcykuaXNv
bGF0ZWRDb3B5KCldIHsKICAgICAgICAgICAgIGlmICh3ZWFrUHJvY2VzcykKICAgICAgICAgICAg
ICAgICB3ZWFrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0TWVkaWFBY2Nl
c3NpYmlsaXR5UHJlZmVyZW5jZXMoY2FwdGlvbkRpc3BsYXlNb2RlLCBwcmVmZXJyZWRMYW5ndWFn
ZXMpLCAwKTsKICAgICAgICAgfSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>