<?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>210873</bug_id>
          
          <creation_ts>2020-04-22 14:04:20 -0700</creation_ts>
          <short_desc>[iOS] Crash on RunningBoard process assertion invalidation</short_desc>
          <delta_ts>2024-10-15 10:27:15 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>aroben</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>g6n6ticb0bsl</cc>
    
    <cc>ggaren</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1644488</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-04-22 14:04:20 -0700</bug_when>
    <thetext>Crash on RunningBoard process assertion invalidation:
Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
[...]
9   WebKit                        	0x000000018cff590c invocation function for block in WebKit::ProcessAssertion::ProcessAssertion(int, WTF::ASCIILiteral, WebKit::ProcessAssertionType) + 168 (/Library/Caches/com.apple.xbs/Sources/WebKit2/WebKit2-7610.1.10/UIProcess/ios/ProcessAssertionIOS.mm:375)
10  ...g_rt.asan_ios_dynamic.dylib	0x0000000104068e2c __wrap_dispatch_async_block_invoke + 188 
11  libdispatch.dylib             	0x0000000184717878 _dispatch_call_block_and_release + 24 
12  libdispatch.dylib             	0x0000000184718840 _dispatch_client_callout + 16 
13  libdispatch.dylib             	0x00000001846fade8 _dispatch_main_queue_callback_4CF$VARIANT$armv81 + 856 
14  CoreFoundation                	0x00000001849d0e48 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
15  CoreFoundation                	0x00000001849cb790 __CFRunLoopRun + 1884
16  CoreFoundation                	0x00000001849cac50 CFRunLoopRunSpecific + 520
17  XCTest                        	0x0000000106089668 -[XCTWaiter waitForExpectations:timeout:enforceOrder:] + 808</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644489</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-04-22 14:04:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/62194917&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644502</commentid>
    <comment_count>2</comment_count>
      <attachid>397262</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-04-22 14:39:27 -0700</bug_when>
    <thetext>Created attachment 397262
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644506</commentid>
    <comment_count>3</comment_count>
      <attachid>397264</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-04-22 14:48:19 -0700</bug_when>
    <thetext>Created attachment 397264
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644516</commentid>
    <comment_count>4</comment_count>
      <attachid>397264</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-22 14:56:24 -0700</bug_when>
    <thetext>Comment on attachment 397264
Patch

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

&gt; Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm:293
&gt; +        if (weakSelf &amp;&amp; weakSelf.invalidationCallback)
&gt; +            weakSelf.invalidationCallback();

The pattern I see is that people copy such things into a strong pointer, so there’s no race with another process. I think that might be needed here.

&gt; Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm:424
&gt; +        m_delegate.get().invalidationCallback = nil;

I am mixed up a bit: What guarantees that the main queue thread didn’t already fetch the callback and then will call it some arbitrary length of time later when it was up?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644521</commentid>
    <comment_count>5</comment_count>
      <attachid>397264</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-04-22 15:02:15 -0700</bug_when>
    <thetext>Comment on attachment 397264
Patch

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

&gt;&gt; Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm:293
&gt;&gt; +            weakSelf.invalidationCallback();
&gt; 
&gt; The pattern I see is that people copy such things into a strong pointer, so there’s no race with another process. I think that might be needed here.

I am not sure I understand your comment. Do you want me to use a strongSelf? If so, it would work but I don&apos;t think it is necessary to keep WKRBSAssertionDelegate alive longer than the ProcessAssertion since we&apos;re only calling the ProcessAssertion&apos;s invalidationHandler.

&gt;&gt; Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm:424
&gt;&gt; +        m_delegate.get().invalidationCallback = nil;
&gt; 
&gt; I am mixed up a bit: What guarantees that the main queue thread didn’t already fetch the callback and then will call it some arbitrary length of time later when it was up?

The ProcessAssertion destructor always runs on the main thread. Both WKRBSAssertionDelegate and ProcessAssertion only set / access invalidationCallback on the main thread. Therefore, there is no race.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644542</commentid>
    <comment_count>6</comment_count>
      <attachid>397276</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-04-22 15:31:25 -0700</bug_when>
    <thetext>Created attachment 397276
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644546</commentid>
    <comment_count>7</comment_count>
      <attachid>397276</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-04-22 15:35:20 -0700</bug_when>
    <thetext>Comment on attachment 397276
Patch

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

&gt; Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm:286
&gt;  - (void)assertion:(RBSAssertion *)assertion didInvalidateWithError:(NSError *)error

This may get called on a background thread, thus the dispatch_async below before accessing / calling invalidationCallback. invalidationCallback gets set on the main thread by the ProcessAssertion code and the ProcessAssertion expects the invalidation handler to get called on the main thread.

&gt; Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm:425
&gt; +        m_delegate.get().invalidationCallback = nil;

ProcessAssertion is a main thread object. It always gets constructed, destroyed on the main thread. 

m_delegate.get().invalidationCallback gets initialized in the ProcessAssertion constructor on the main thread.
m_delegate.get().invalidationCallback gets null out here in the destructor on the main thread.
m_delegate.get().invalidationCallback gets accessed in WKRBSAssertionDelegate.didInvalidateWithError on the main thread (enforced by our dispatch_async)

therefore, the invalidationCallback is always used on the main thread and there should be no race.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644552</commentid>
    <comment_count>8</comment_count>
      <attachid>397276</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-04-22 15:39:26 -0700</bug_when>
    <thetext>Comment on attachment 397276
Patch

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

&gt;&gt; Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm:425
&gt;&gt; +        m_delegate.get().invalidationCallback = nil;
&gt; 
&gt; ProcessAssertion is a main thread object. It always gets constructed, destroyed on the main thread. 
&gt; 
&gt; m_delegate.get().invalidationCallback gets initialized in the ProcessAssertion constructor on the main thread.
&gt; m_delegate.get().invalidationCallback gets null out here in the destructor on the main thread.
&gt; m_delegate.get().invalidationCallback gets accessed in WKRBSAssertionDelegate.didInvalidateWithError on the main thread (enforced by our dispatch_async)
&gt; 
&gt; therefore, the invalidationCallback is always used on the main thread and there should be no race.

Also note that ProcessAssertion retains the WKRBSAssertionDelegate via m_delegate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644558</commentid>
    <comment_count>9</comment_count>
      <attachid>397276</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-04-22 15:47:05 -0700</bug_when>
    <thetext>Comment on attachment 397276
Patch

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

&gt; Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm:292
&gt; +        WKRBSAssertionDelegate *strongSelf = weakSelf;

Hopefully this is what Darin meant by using strongSelf. Geoff recommended doing this to avoid races.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644581</commentid>
    <comment_count>10</comment_count>
      <attachid>397276</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-22 16:58:48 -0700</bug_when>
    <thetext>Comment on attachment 397276
Patch

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

&gt;&gt; Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm:292
&gt;&gt; +        WKRBSAssertionDelegate *strongSelf = weakSelf;
&gt; 
&gt; Hopefully this is what Darin meant by using strongSelf. Geoff recommended doing this to avoid races.

Yes, this is what I meant. Not sure it’s needed, but this is the pattern I have seen before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644584</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-22 17:04:31 -0700</bug_when>
    <thetext>Committed r260544: &lt;https://trac.webkit.org/changeset/260544&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 397276.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644608</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2020-04-22 18:05:04 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #10)
&gt; Comment on attachment 397276 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=397276&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm:292
&gt; &gt;&gt; +        WKRBSAssertionDelegate *strongSelf = weakSelf;
&gt; &gt; 
&gt; &gt; Hopefully this is what Darin meant by using strongSelf. Geoff recommended doing this to avoid races.
&gt; 
&gt; Yes, this is what I meant. Not sure it’s needed, but this is the pattern I
&gt; have seen before.

It also has a minor performance benefit since each use of a weak variable involves some locking and hash table lookups in the Objective-C runtime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644941</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-04-23 13:29:00 -0700</bug_when>
    <thetext>Committed r260595: &lt;https://trac.webkit.org/changeset/260595&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397262</attachid>
            <date>2020-04-22 14:39:27 -0700</date>
            <delta_ts>2020-04-22 14:48:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210873-20200422143926.patch</filename>
            <type>text/plain</type>
            <size>2459</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYzYWZiNGI2YzkzODMwYmVl
ZjU3YjM1MWIzOGU5ZjY2MTdmYWE1ODYuLmRiOGZkZjc2ZTVlMDZhMTk5OWFkYWQ3ZGU5Y2QxNGQ2
OTlmZTYzMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjAtMDQtMjIgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBDcmFzaCBvbiBSdW5uaW5n
Qm9hcmQgcHJvY2VzcyBhc3NlcnRpb24gaW52YWxpZGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTA4NzMKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzYyMTk0OTE3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVUlQcm9jZXNzL2lvcy9Qcm9jZXNzQXNzZXJ0aW9uSU9TLm1tOgorICAgICAgICAo
LVtXS1JCU0Fzc2VydGlvbkRlbGVnYXRlIGFzc2VydGlvbjpkaWRJbnZhbGlkYXRlV2l0aEVycm9y
Ol0pOgorICAgICAgICBDYXB0dXJlIGEgd2VhayBwb2ludGVyIHRvIHNlbGYgYW5kIG1ha2Ugc3Vy
ZSB3ZSBvbmx5IGFjY2VzcyB0aGUgaW52YWxpZGF0aW9uIGhhbmRsZXIgb24KKyAgICAgICAgdGhl
IG1haW4gdGhyZWFkIGlmIHxzZWxmfCBpcyBzdGlsbCBhbGl2ZS4KKworICAgICAgICAoV2ViS2l0
OjpQcm9jZXNzQXNzZXJ0aW9uOjp+UHJvY2Vzc0Fzc2VydGlvbik6CisgICAgICAgIE51bGwgb3V0
IHRoZSBXS1JCU0Fzc2VydGlvbkRlbGVnYXRlJ3Mgb2JzZXJ2ZXIgaW4gdGhlIFByb2Nlc3NBc3Nl
cnRpb24gZGVzdHJ1Y3RvciwgdG8KKyAgICAgICAgbWFrZSBzdXJlIHByb2Nlc3NBc3NlcnRpb25X
YXNJbnZhbGlkYXRlZCgpIGNhbm5vdCBnZXQgY2FsbGVkIGFmdGVyIHRoZSBQcm9jZXNzQXNzZXJ0
aW9uCisgICAgICAgIGhhcyBiZWVuIGRlc3Ryb3llZC4KKwogMjAyMC0wNC0yMiAgRGF2aWQgS2ls
emVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIElQQzo6ZGVjb2RlU2hhcmVkQnVm
ZmVyKCkgc2hvdWxkIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgU2hhcmVkTWVtb3J5OjptYXAo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1Byb2Nlc3NBc3NlcnRp
b25JT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUHJvY2Vzc0Fzc2VydGlvbklP
Uy5tbQppbmRleCBjOWUxZTlhYWYzZDc2NWQyY2RhYTcxN2IxYTkzNzdlOGQ5NWUwMzFiLi5kN2Qw
YTVlM2FlZWFmNDk4MTBlNGUzNjNlMWVmOWVmZGI3ZjRkZjc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvUHJvY2Vzc0Fzc2VydGlvbklPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvUHJvY2Vzc0Fzc2VydGlvbklPUy5tbQpAQCAtMjg2LDggKzI4
NiwxMCBAQCAtICh2b2lkKWFzc2VydGlvbldpbGxJbnZhbGlkYXRlOihSQlNBc3NlcnRpb24gKilh
c3NlcnRpb24KIC0gKHZvaWQpYXNzZXJ0aW9uOihSQlNBc3NlcnRpb24gKilhc3NlcnRpb24gZGlk
SW52YWxpZGF0ZVdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCiB7CiAgICAgUkVMRUFTRV9MT0co
UHJvY2Vzc1N1c3BlbnNpb24sICIlcCAtIFdLUkJTQXNzZXJ0aW9uRGVsZWdhdGU6IGFzc2VydGlv
biB3YXMgaW52YWxpZGF0ZWQsIGVycm9yOiAle3B1YmxpY31AIiwgZXJyb3IsIHNlbGYpOworCisg
ICAgX193ZWFrIHR5cGVvZihzZWxmKSB3ZWFrU2VsZiA9IHNlbGY7CiAgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgaWYgKF9pbnZhbGlkYXRp
b25DYWxsYmFjaykKKyAgICAgICAgaWYgKHdlYWtTZWxmICYmIF9pbnZhbGlkYXRpb25DYWxsYmFj
aykKICAgICAgICAgICAgIF9pbnZhbGlkYXRpb25DYWxsYmFjaygpOwogICAgIH0pOwogfQpAQCAt
NDE5LDYgKzQyMSw5IEBAIFByb2Nlc3NBc3NlcnRpb246On5Qcm9jZXNzQXNzZXJ0aW9uKCkKICAg
ICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIiVwIC0gflByb2Nlc3NBc3NlcnRpb24o
KSBSZWxlYXNpbmcgcHJvY2VzcyBhc3NlcnRpb24gZm9yIHByb2Nlc3Mgd2l0aCBQSUQgJWQiLCB0
aGlzLCBtX3BpZCk7CiAKICAgICBpZiAobV9yYnNBc3NlcnRpb24pIHsKKyAgICAgICAgbV9kZWxl
Z2F0ZS5nZXQoKS5pbnZhbGlkYXRpb25DYWxsYmFjayA9IG5pbDsKKyAgICAgICAgbV9kZWxlZ2F0
ZSA9IG5pbDsKKwogICAgICAgICBbbV9yYnNBc3NlcnRpb24gcmVtb3ZlT2JzZXJ2ZXI6bV9kZWxl
Z2F0ZS5nZXQoKV07CiAgICAgICAgIFttX3Jic0Fzc2VydGlvbiBpbnZhbGlkYXRlXTsKICAgICB9
IGVsc2Ugewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397264</attachid>
            <date>2020-04-22 14:48:19 -0700</date>
            <delta_ts>2020-04-22 15:31:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210873-20200422144818.patch</filename>
            <type>text/plain</type>
            <size>2519</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYzYWZiNGI2YzkzODMwYmVl
ZjU3YjM1MWIzOGU5ZjY2MTdmYWE1ODYuLmRiOGZkZjc2ZTVlMDZhMTk5OWFkYWQ3ZGU5Y2QxNGQ2
OTlmZTYzMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjAtMDQtMjIgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBDcmFzaCBvbiBSdW5uaW5n
Qm9hcmQgcHJvY2VzcyBhc3NlcnRpb24gaW52YWxpZGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTA4NzMKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzYyMTk0OTE3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVUlQcm9jZXNzL2lvcy9Qcm9jZXNzQXNzZXJ0aW9uSU9TLm1tOgorICAgICAgICAo
LVtXS1JCU0Fzc2VydGlvbkRlbGVnYXRlIGFzc2VydGlvbjpkaWRJbnZhbGlkYXRlV2l0aEVycm9y
Ol0pOgorICAgICAgICBDYXB0dXJlIGEgd2VhayBwb2ludGVyIHRvIHNlbGYgYW5kIG1ha2Ugc3Vy
ZSB3ZSBvbmx5IGFjY2VzcyB0aGUgaW52YWxpZGF0aW9uIGhhbmRsZXIgb24KKyAgICAgICAgdGhl
IG1haW4gdGhyZWFkIGlmIHxzZWxmfCBpcyBzdGlsbCBhbGl2ZS4KKworICAgICAgICAoV2ViS2l0
OjpQcm9jZXNzQXNzZXJ0aW9uOjp+UHJvY2Vzc0Fzc2VydGlvbik6CisgICAgICAgIE51bGwgb3V0
IHRoZSBXS1JCU0Fzc2VydGlvbkRlbGVnYXRlJ3Mgb2JzZXJ2ZXIgaW4gdGhlIFByb2Nlc3NBc3Nl
cnRpb24gZGVzdHJ1Y3RvciwgdG8KKyAgICAgICAgbWFrZSBzdXJlIHByb2Nlc3NBc3NlcnRpb25X
YXNJbnZhbGlkYXRlZCgpIGNhbm5vdCBnZXQgY2FsbGVkIGFmdGVyIHRoZSBQcm9jZXNzQXNzZXJ0
aW9uCisgICAgICAgIGhhcyBiZWVuIGRlc3Ryb3llZC4KKwogMjAyMC0wNC0yMiAgRGF2aWQgS2ls
emVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIElQQzo6ZGVjb2RlU2hhcmVkQnVm
ZmVyKCkgc2hvdWxkIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgU2hhcmVkTWVtb3J5OjptYXAo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1Byb2Nlc3NBc3NlcnRp
b25JT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUHJvY2Vzc0Fzc2VydGlvbklP
Uy5tbQppbmRleCBjOWUxZTlhYWYzZDc2NWQyY2RhYTcxN2IxYTkzNzdlOGQ5NWUwMzFiLi5jY2Yz
Y2Y1NzNkN2M0Yzg5NzQ5MGFkOWRjMDI3YWZhMjViMmRkNWUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvUHJvY2Vzc0Fzc2VydGlvbklPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvUHJvY2Vzc0Fzc2VydGlvbklPUy5tbQpAQCAtMjg2LDkgKzI4
NiwxMSBAQCAtICh2b2lkKWFzc2VydGlvbldpbGxJbnZhbGlkYXRlOihSQlNBc3NlcnRpb24gKilh
c3NlcnRpb24KIC0gKHZvaWQpYXNzZXJ0aW9uOihSQlNBc3NlcnRpb24gKilhc3NlcnRpb24gZGlk
SW52YWxpZGF0ZVdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCiB7CiAgICAgUkVMRUFTRV9MT0co
UHJvY2Vzc1N1c3BlbnNpb24sICIlcCAtIFdLUkJTQXNzZXJ0aW9uRGVsZWdhdGU6IGFzc2VydGlv
biB3YXMgaW52YWxpZGF0ZWQsIGVycm9yOiAle3B1YmxpY31AIiwgZXJyb3IsIHNlbGYpOworCisg
ICAgX193ZWFrIHR5cGVvZihzZWxmKSB3ZWFrU2VsZiA9IHNlbGY7CiAgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgaWYgKF9pbnZhbGlkYXRp
b25DYWxsYmFjaykKLSAgICAgICAgICAgIF9pbnZhbGlkYXRpb25DYWxsYmFjaygpOworICAgICAg
ICBpZiAod2Vha1NlbGYgJiYgd2Vha1NlbGYuaW52YWxpZGF0aW9uQ2FsbGJhY2spCisgICAgICAg
ICAgICB3ZWFrU2VsZi5pbnZhbGlkYXRpb25DYWxsYmFjaygpOwogICAgIH0pOwogfQogQGVuZApA
QCAtNDE5LDYgKzQyMSw5IEBAIFByb2Nlc3NBc3NlcnRpb246On5Qcm9jZXNzQXNzZXJ0aW9uKCkK
ICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIiVwIC0gflByb2Nlc3NBc3NlcnRp
b24oKSBSZWxlYXNpbmcgcHJvY2VzcyBhc3NlcnRpb24gZm9yIHByb2Nlc3Mgd2l0aCBQSUQgJWQi
LCB0aGlzLCBtX3BpZCk7CiAKICAgICBpZiAobV9yYnNBc3NlcnRpb24pIHsKKyAgICAgICAgbV9k
ZWxlZ2F0ZS5nZXQoKS5pbnZhbGlkYXRpb25DYWxsYmFjayA9IG5pbDsKKyAgICAgICAgbV9kZWxl
Z2F0ZSA9IG5pbDsKKwogICAgICAgICBbbV9yYnNBc3NlcnRpb24gcmVtb3ZlT2JzZXJ2ZXI6bV9k
ZWxlZ2F0ZS5nZXQoKV07CiAgICAgICAgIFttX3Jic0Fzc2VydGlvbiBpbnZhbGlkYXRlXTsKICAg
ICB9IGVsc2Ugewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397276</attachid>
            <date>2020-04-22 15:31:25 -0700</date>
            <delta_ts>2020-04-22 17:04:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210873-20200422153124.patch</filename>
            <type>text/plain</type>
            <size>2592</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYzYWZiNGI2YzkzODMwYmVl
ZjU3YjM1MWIzOGU5ZjY2MTdmYWE1ODYuLmRiOGZkZjc2ZTVlMDZhMTk5OWFkYWQ3ZGU5Y2QxNGQ2
OTlmZTYzMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjAtMDQtMjIgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBDcmFzaCBvbiBSdW5uaW5n
Qm9hcmQgcHJvY2VzcyBhc3NlcnRpb24gaW52YWxpZGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTA4NzMKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzYyMTk0OTE3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVUlQcm9jZXNzL2lvcy9Qcm9jZXNzQXNzZXJ0aW9uSU9TLm1tOgorICAgICAgICAo
LVtXS1JCU0Fzc2VydGlvbkRlbGVnYXRlIGFzc2VydGlvbjpkaWRJbnZhbGlkYXRlV2l0aEVycm9y
Ol0pOgorICAgICAgICBDYXB0dXJlIGEgd2VhayBwb2ludGVyIHRvIHNlbGYgYW5kIG1ha2Ugc3Vy
ZSB3ZSBvbmx5IGFjY2VzcyB0aGUgaW52YWxpZGF0aW9uIGhhbmRsZXIgb24KKyAgICAgICAgdGhl
IG1haW4gdGhyZWFkIGlmIHxzZWxmfCBpcyBzdGlsbCBhbGl2ZS4KKworICAgICAgICAoV2ViS2l0
OjpQcm9jZXNzQXNzZXJ0aW9uOjp+UHJvY2Vzc0Fzc2VydGlvbik6CisgICAgICAgIE51bGwgb3V0
IHRoZSBXS1JCU0Fzc2VydGlvbkRlbGVnYXRlJ3Mgb2JzZXJ2ZXIgaW4gdGhlIFByb2Nlc3NBc3Nl
cnRpb24gZGVzdHJ1Y3RvciwgdG8KKyAgICAgICAgbWFrZSBzdXJlIHByb2Nlc3NBc3NlcnRpb25X
YXNJbnZhbGlkYXRlZCgpIGNhbm5vdCBnZXQgY2FsbGVkIGFmdGVyIHRoZSBQcm9jZXNzQXNzZXJ0
aW9uCisgICAgICAgIGhhcyBiZWVuIGRlc3Ryb3llZC4KKwogMjAyMC0wNC0yMiAgRGF2aWQgS2ls
emVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIElQQzo6ZGVjb2RlU2hhcmVkQnVm
ZmVyKCkgc2hvdWxkIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgU2hhcmVkTWVtb3J5OjptYXAo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1Byb2Nlc3NBc3NlcnRp
b25JT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUHJvY2Vzc0Fzc2VydGlvbklP
Uy5tbQppbmRleCBjOWUxZTlhYWYzZDc2NWQyY2RhYTcxN2IxYTkzNzdlOGQ5NWUwMzFiLi4zYzUy
MWQ1ZTJlOTI5YmFkNjdiNGZjNDczNDIzMDBmMzE5YjYyOTg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvUHJvY2Vzc0Fzc2VydGlvbklPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvUHJvY2Vzc0Fzc2VydGlvbklPUy5tbQpAQCAtMjg2LDkgKzI4
NiwxMiBAQCAtICh2b2lkKWFzc2VydGlvbldpbGxJbnZhbGlkYXRlOihSQlNBc3NlcnRpb24gKilh
c3NlcnRpb24KIC0gKHZvaWQpYXNzZXJ0aW9uOihSQlNBc3NlcnRpb24gKilhc3NlcnRpb24gZGlk
SW52YWxpZGF0ZVdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCiB7CiAgICAgUkVMRUFTRV9MT0co
UHJvY2Vzc1N1c3BlbnNpb24sICIlcCAtIFdLUkJTQXNzZXJ0aW9uRGVsZWdhdGU6IGFzc2VydGlv
biB3YXMgaW52YWxpZGF0ZWQsIGVycm9yOiAle3B1YmxpY31AIiwgZXJyb3IsIHNlbGYpOworCisg
ICAgX193ZWFrIFdLUkJTQXNzZXJ0aW9uRGVsZWdhdGUgKndlYWtTZWxmID0gc2VsZjsKICAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBpZiAo
X2ludmFsaWRhdGlvbkNhbGxiYWNrKQotICAgICAgICAgICAgX2ludmFsaWRhdGlvbkNhbGxiYWNr
KCk7CisgICAgICAgIFdLUkJTQXNzZXJ0aW9uRGVsZWdhdGUgKnN0cm9uZ1NlbGYgPSB3ZWFrU2Vs
ZjsKKyAgICAgICAgaWYgKHN0cm9uZ1NlbGYgJiYgc3Ryb25nU2VsZi5pbnZhbGlkYXRpb25DYWxs
YmFjaykKKyAgICAgICAgICAgIHN0cm9uZ1NlbGYuaW52YWxpZGF0aW9uQ2FsbGJhY2soKTsKICAg
ICB9KTsKIH0KIEBlbmQKQEAgLTQxOSw2ICs0MjIsOSBAQCBQcm9jZXNzQXNzZXJ0aW9uOjp+UHJv
Y2Vzc0Fzc2VydGlvbigpCiAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICIlcCAt
IH5Qcm9jZXNzQXNzZXJ0aW9uKCkgUmVsZWFzaW5nIHByb2Nlc3MgYXNzZXJ0aW9uIGZvciBwcm9j
ZXNzIHdpdGggUElEICVkIiwgdGhpcywgbV9waWQpOwogCiAgICAgaWYgKG1fcmJzQXNzZXJ0aW9u
KSB7CisgICAgICAgIG1fZGVsZWdhdGUuZ2V0KCkuaW52YWxpZGF0aW9uQ2FsbGJhY2sgPSBuaWw7
CisgICAgICAgIG1fZGVsZWdhdGUgPSBuaWw7CisKICAgICAgICAgW21fcmJzQXNzZXJ0aW9uIHJl
bW92ZU9ic2VydmVyOm1fZGVsZWdhdGUuZ2V0KCldOwogICAgICAgICBbbV9yYnNBc3NlcnRpb24g
aW52YWxpZGF0ZV07CiAgICAgfSBlbHNlIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>