<?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>233025</bug_id>
          
          <creation_ts>2021-11-11 16:57:02 -0800</creation_ts>
          <short_desc>Defining a custom element should not cause global object&apos;s structure transitions</short_desc>
          <delta_ts>2022-08-11 07:23:30 -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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Shvayka">ashvayka</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</assigned_to>
          <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1814307</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-11-11 16:57:02 -0800</bug_when>
    <thetext>JSCustomElementInterface should keep strong references to constructor / callbacks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814309</commentid>
    <comment_count>1</comment_count>
      <attachid>444026</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-11-11 17:00:34 -0800</bug_when>
    <thetext>Created attachment 444026
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814502</commentid>
    <comment_count>2</comment_count>
      <attachid>444026</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-11-12 10:05:12 -0800</bug_when>
    <thetext>Comment on attachment 444026
Patch

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

&gt; Source/WebCore/bindings/js/JSCustomElementInterface.h:104
&gt; +    JSC::Strong&lt;JSC::JSObject&gt; m_constructor;
&gt; +    JSC::Strong&lt;JSC::JSObject&gt; m_connectedCallback;
&gt; +    JSC::Strong&lt;JSC::JSObject&gt; m_disconnectedCallback;
&gt; +    JSC::Strong&lt;JSC::JSObject&gt; m_adoptedCallback;
&gt; +    JSC::Strong&lt;JSC::JSObject&gt; m_attributeChangedCallback;

Unfortunately, it can&apos;t be this simple because this would create a retain cycle that can&apos;t be broken by GC.

I think you could achieve something similarly elegant if you used JSValueInWrappedObject, and had the global object or the document visit this registry and these values during GC, in visitAdditionalChildren.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814541</commentid>
    <comment_count>3</comment_count>
      <attachid>444026</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-11-12 11:35:22 -0800</bug_when>
    <thetext>Comment on attachment 444026
Patch

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

&gt;&gt; Source/WebCore/bindings/js/JSCustomElementInterface.h:104
&gt;&gt; +    JSC::Strong&lt;JSC::JSObject&gt; m_attributeChangedCallback;
&gt; 
&gt; Unfortunately, it can&apos;t be this simple because this would create a retain cycle that can&apos;t be broken by GC.
&gt; 
&gt; I think you could achieve something similarly elegant if you used JSValueInWrappedObject, and had the global object or the document visit this registry and these values during GC, in visitAdditionalChildren.

Also, we should create the test case that shows this. I made a lot of those when I first created JSValueInWrappedObject and started to deploy it to fix the retain cycles we had back then that can’t be broken by GC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815107</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-11-15 10:03:41 -0800</bug_when>
    <thetext>Dear Geoff and Darin,

Could you please help me understand adverse effects of having a strong reference in this particular case?

I agree that in general case this is bad, but JSCustomElementInterface can&apos;t possibly be destructed until a global object -- which holds a strong reference to never-destructible CustomElementRegistry, which in turn holds strong references to its JSCustomElementInterface -- is dead.

Custom element interfaces can&apos;t be removed from the registry per spec, only added. Even a cross-realm callback / constructor, which is only reference to its global object, can&apos;t be released per spec as custom element interface definition should hold a strong reference to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815116</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-11-15 10:24:05 -0800</bug_when>
    <thetext>If you can’t make a test showing a leak, then I think the leak probably doesn’t exist. I was taking Geoff’s word for it, and drawing analogy with other similar places, not assessing whether a strong reference was a problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816018</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-11-17 11:01:27 -0800</bug_when>
    <thetext>&gt; Custom element interfaces can&apos;t be removed from the registry per spec, only
&gt; added. Even a cross-realm callback / constructor, which is only reference to
&gt; its global object, can&apos;t be released per spec as custom element interface
&gt; definition should hold a strong reference to it.

I think this means that there&apos;s no noticeable memory leak for the duration of an individual window/document on screen, but once the window/document is off screen and otherwise unreachable, that&apos;s the case where the JSC::Strong will cause a noticeable memory leak. The easiest ways to trigger this condition in a test are: insert and &lt;iframe&gt; into a document and then remove it (repeatedly); or navigate an &lt;iframe&gt; (repeatedly).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816696</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-18 16:57:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/85574850&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1889281</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-08-05 17:12:30 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/3066</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1889283</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-08-05 17:13:09 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #6)
&gt; &gt; Custom element interfaces can&apos;t be removed from the registry per spec, only
&gt; &gt; added. Even a cross-realm callback / constructor, which is only reference to
&gt; &gt; its global object, can&apos;t be released per spec as custom element interface
&gt; &gt; definition should hold a strong reference to it.
&gt; 
&gt; I think this means that there&apos;s no noticeable memory leak for the duration
&gt; of an individual window/document on screen, but once the window/document is
&gt; off screen and otherwise unreachable, that&apos;s the case where the JSC::Strong
&gt; will cause a noticeable memory leak. The easiest ways to trigger this
&gt; condition in a test are: insert and &lt;iframe&gt; into a document and then remove
&gt; it (repeatedly); or navigate an &lt;iframe&gt; (repeatedly).

Thank you for your help on this, Geoff.

I&apos;ve managed to prove that Strong causes a memory leak with cross-realm callback and WeakRef.
Updated the patch to rely on visitAdditionalChildren() just as you suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1890577</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-08-11 07:23:29 -0700</bug_when>
    <thetext>Committed 253330@main (1b11bc2ebce8): &lt;https://commits.webkit.org/253330@main&gt;

Reviewed commits have been landed. Closing PR #3066 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444026</attachid>
            <date>2021-11-11 17:00:34 -0800</date>
            <delta_ts>2021-11-12 10:05:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233025-20211112010033.patch</filename>
            <type>text/plain</type>
            <size>9372</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NTY4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDIxLTExLTExICBBbGV4ZXkg
U2h2YXlrYSAgPGFzaHZheWthQGFwcGxlLmNvbT4KKworICAgICAgICBKU0N1c3RvbUVsZW1lbnRJ
bnRlcmZhY2Ugc2hvdWxkIGtlZXAgc3Ryb25nIHJlZmVyZW5jZXMgdG8gY29uc3RydWN0b3IgLyBj
YWxsYmFja3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzMzAyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFBhdGNoIGF1dGhvciBwcmVzdW1lcyB0aGF0IHNvbGUgcHVycG9zZSBvZiBoYWNreSBhZGRUb0ds
b2JhbE9iamVjdFdpdGhQcml2YXRlTmFtZSgpCisgICAgICAgIHdhcyB0byBhdm9pZCBjb25zdHJ1
Y3RvciAvIGNhbGxiYWNrcyB0byBiZSBHQ2VkLCBhbmQgcmVwbGFjZXMgaXQgd2l0aCBTdHJvbmc8
PiByZWZlcmVuY2VzLAorICAgICAgICB3aGljaCBzYXZlcyB1cCB0byA1IHN0cnVjdHVyZSB0cmFu
c2l0aW9ucyBwZXIgY3VzdG9tIGVsZW1lbnQgZGVmaW5pdGlvbi4KKworICAgICAgICBObyBuZXcg
dGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3Vz
dG9tRWxlbWVudEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbUVsZW1l
bnRJbnRlcmZhY2U6OkpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6OnNldENvbm5lY3RlZENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6c2V0RGlzY29ubmVjdGVkQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjpzZXRB
ZG9wdGVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21FbGVtZW50SW50ZXJm
YWNlOjpzZXRBdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9t
RWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUpOgorCiAyMDIxLTExLTExICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgVk06OndyaXRlQmFycmllcigpIGFuZCBWTTo6
bXV0YXRvckZlbmNlKCkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bUVsZW1lbnRJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAJKHJldmlzaW9uIDI4NTYzOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIEpT
Q3VzdG9tRWxlbWVudEludGVyZmFjZTo6SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKICAgICA6IEFjdGl2ZURPTUNhbGxiYWNrKGdsb2JhbE9iamVjdC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICwgbV9uYW1lKG5hbWUpCi0gICAgLCBtX2Nv
bnN0cnVjdG9yKGNvbnN0cnVjdG9yKQorICAgICwgbV9jb25zdHJ1Y3RvcihnbG9iYWxPYmplY3Qt
PnZtKCksIGNvbnN0cnVjdG9yKQogICAgICwgbV9pc29sYXRlZFdvcmxkKGdsb2JhbE9iamVjdC0+
d29ybGQoKSkKIHsKIH0KQEAgLTI2OCw5ICsyNjgsOSBAQCB2b2lkIEpTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZTo6aW52b2tlQ2FsCiAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBleGNlcHRpb24pOwogfQogCi12b2lkIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6
c2V0Q29ubmVjdGVkQ2FsbGJhY2soSlNDOjpKU09iamVjdCogY2FsbGJhY2spCit2b2lkIEpTQ3Vz
dG9tRWxlbWVudEludGVyZmFjZTo6c2V0Q29ubmVjdGVkQ2FsbGJhY2soVk0mIHZtLCBKU09iamVj
dCogY2FsbGJhY2spCiB7Ci0gICAgbV9jb25uZWN0ZWRDYWxsYmFjayA9IGNhbGxiYWNrOworICAg
IG1fY29ubmVjdGVkQ2FsbGJhY2suc2V0KHZtLCBjYWxsYmFjayk7CiB9CiAKIHZvaWQgSlNDdXN0
b21FbGVtZW50SW50ZXJmYWNlOjppbnZva2VDb25uZWN0ZWRDYWxsYmFjayhFbGVtZW50JiBlbGVt
ZW50KQpAQCAtMjc4LDkgKzI3OCw5IEBAIHZvaWQgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjpp
bnZva2VDb24KICAgICBpbnZva2VDYWxsYmFjayhlbGVtZW50LCBtX2Nvbm5lY3RlZENhbGxiYWNr
LmdldCgpKTsKIH0KIAotdm9pZCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6OnNldERpc2Nvbm5l
Y3RlZENhbGxiYWNrKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrKQordm9pZCBKU0N1c3RvbUVsZW1l
bnRJbnRlcmZhY2U6OnNldERpc2Nvbm5lY3RlZENhbGxiYWNrKFZNJiB2bSwgSlNPYmplY3QqIGNh
bGxiYWNrKQogewotICAgIG1fZGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBt
X2Rpc2Nvbm5lY3RlZENhbGxiYWNrLnNldCh2bSwgY2FsbGJhY2spOwogfQogCiB2b2lkIEpTQ3Vz
dG9tRWxlbWVudEludGVyZmFjZTo6aW52b2tlRGlzY29ubmVjdGVkQ2FsbGJhY2soRWxlbWVudCYg
ZWxlbWVudCkKQEAgLTI4OCw5ICsyODgsOSBAQCB2b2lkIEpTQ3VzdG9tRWxlbWVudEludGVyZmFj
ZTo6aW52b2tlRGlzCiAgICAgaW52b2tlQ2FsbGJhY2soZWxlbWVudCwgbV9kaXNjb25uZWN0ZWRD
YWxsYmFjay5nZXQoKSk7CiB9CiAKLXZvaWQgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjpzZXRB
ZG9wdGVkQ2FsbGJhY2soSlNDOjpKU09iamVjdCogY2FsbGJhY2spCit2b2lkIEpTQ3VzdG9tRWxl
bWVudEludGVyZmFjZTo6c2V0QWRvcHRlZENhbGxiYWNrKFZNJiB2bSwgSlNPYmplY3QqIGNhbGxi
YWNrKQogewotICAgIG1fYWRvcHRlZENhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgbV9hZG9wdGVk
Q2FsbGJhY2suc2V0KHZtLCBjYWxsYmFjayk7CiB9CiAKIHZvaWQgSlNDdXN0b21FbGVtZW50SW50
ZXJmYWNlOjppbnZva2VBZG9wdGVkQ2FsbGJhY2soRWxlbWVudCYgZWxlbWVudCwgRG9jdW1lbnQm
IG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCkBAIC0zMDEsOSArMzAxLDkgQEAg
dm9pZCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6Omludm9rZUFkbwogICAgIH0pOwogfQogCi12
b2lkIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6c2V0QXR0cmlidXRlQ2hhbmdlZENhbGxiYWNr
KEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgb2JzZXJ2ZWRB
dHRyaWJ1dGVzKQordm9pZCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6OnNldEF0dHJpYnV0ZUNo
YW5nZWRDYWxsYmFjayhWTSYgdm0sIEpTT2JqZWN0KiBjYWxsYmFjaywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIG9ic2VydmVkQXR0cmlidXRlcykKIHsKLSAgICBtX2F0dHJpYnV0ZUNoYW5nZWRDYWxs
YmFjayA9IGNhbGxiYWNrOworICAgIG1fYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrLnNldCh2bSwg
Y2FsbGJhY2spOwogICAgIG1fb2JzZXJ2ZWRBdHRyaWJ1dGVzLmNsZWFyKCk7CiAgICAgZm9yIChh
dXRvJiBuYW1lIDogb2JzZXJ2ZWRBdHRyaWJ1dGVzKQogICAgICAgICBtX29ic2VydmVkQXR0cmli
dXRlcy5hZGQobmFtZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bUVsZW1lbnRJbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuaAkocmV2aXNpb24gMjg1NjM4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDE5ICs2MiwxOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZ3JhZGVF
bGVtZW50KEVsZW1lbnQmKTsKIAotICAgIHZvaWQgc2V0Q29ubmVjdGVkQ2FsbGJhY2soSlNDOjpK
U09iamVjdCopOworICAgIHZvaWQgc2V0Q29ubmVjdGVkQ2FsbGJhY2soSlNDOjpWTSYsIEpTQzo6
SlNPYmplY3QqKTsKICAgICBib29sIGhhc0Nvbm5lY3RlZENhbGxiYWNrKCkgY29uc3QgeyByZXR1
cm4gISFtX2Nvbm5lY3RlZENhbGxiYWNrOyB9CiAgICAgdm9pZCBpbnZva2VDb25uZWN0ZWRDYWxs
YmFjayhFbGVtZW50Jik7CiAKLSAgICB2b2lkIHNldERpc2Nvbm5lY3RlZENhbGxiYWNrKEpTQzo6
SlNPYmplY3QqKTsKKyAgICB2b2lkIHNldERpc2Nvbm5lY3RlZENhbGxiYWNrKEpTQzo6Vk0mLCBK
U0M6OkpTT2JqZWN0Kik7CiAgICAgYm9vbCBoYXNEaXNjb25uZWN0ZWRDYWxsYmFjaygpIGNvbnN0
IHsgcmV0dXJuICEhbV9kaXNjb25uZWN0ZWRDYWxsYmFjazsgfQogICAgIHZvaWQgaW52b2tlRGlz
Y29ubmVjdGVkQ2FsbGJhY2soRWxlbWVudCYpOwogCi0gICAgdm9pZCBzZXRBZG9wdGVkQ2FsbGJh
Y2soSlNDOjpKU09iamVjdCopOworICAgIHZvaWQgc2V0QWRvcHRlZENhbGxiYWNrKEpTQzo6Vk0m
LCBKU0M6OkpTT2JqZWN0Kik7CiAgICAgYm9vbCBoYXNBZG9wdGVkQ2FsbGJhY2soKSBjb25zdCB7
IHJldHVybiAhIW1fYWRvcHRlZENhbGxiYWNrOyB9CiAgICAgdm9pZCBpbnZva2VBZG9wdGVkQ2Fs
bGJhY2soRWxlbWVudCYsIERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3Vt
ZW50KTsKIAotICAgIHZvaWQgc2V0QXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKEpTQzo6SlNPYmpl
Y3QqIGNhbGxiYWNrLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgb2JzZXJ2ZWRBdHRyaWJ1dGVzKTsK
KyAgICB2b2lkIHNldEF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhKU0M6OlZNJiwgSlNDOjpKU09i
amVjdCogY2FsbGJhY2ssIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvYnNlcnZlZEF0dHJpYnV0ZXMp
OwogICAgIGJvb2wgb2JzZXJ2ZXNBdHRyaWJ1dGUoY29uc3QgQXRvbVN0cmluZyYgbmFtZSkgY29u
c3QgeyByZXR1cm4gbV9vYnNlcnZlZEF0dHJpYnV0ZXMuY29udGFpbnMobmFtZSk7IH0KICAgICB2
b2lkIGludm9rZUF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhFbGVtZW50JiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9tU3RyaW5nJiBu
ZXdWYWx1ZSk7CiAKQEAgLTk3LDExICs5NywxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgaW52b2tl
Q2FsbGJhY2soRWxlbWVudCYsIEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBjb25zdCBGdW5jdGlv
bjx2b2lkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpTQzo6TWFy
a2VkQXJndW1lbnRCdWZmZXImKT4mIGFkZEFyZ3VtZW50cyA9IFtdKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXImKSB7IH0p
OwogCiAgICAgUXVhbGlmaWVkTmFtZSBtX25hbWU7Ci0gICAgSlNDOjpXZWFrPEpTQzo6SlNPYmpl
Y3Q+IG1fY29uc3RydWN0b3I7Ci0gICAgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+IG1fY29ubmVj
dGVkQ2FsbGJhY2s7Ci0gICAgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+IG1fZGlzY29ubmVjdGVk
Q2FsbGJhY2s7Ci0gICAgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+IG1fYWRvcHRlZENhbGxiYWNr
OwotICAgIEpTQzo6V2VhazxKU0M6OkpTT2JqZWN0PiBtX2F0dHJpYnV0ZUNoYW5nZWRDYWxsYmFj
azsKKyAgICBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBtX2NvbnN0cnVjdG9yOworICAgIEpT
Qzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IG1fY29ubmVjdGVkQ2FsbGJhY2s7CisgICAgSlNDOjpT
dHJvbmc8SlNDOjpKU09iamVjdD4gbV9kaXNjb25uZWN0ZWRDYWxsYmFjazsKKyAgICBKU0M6OlN0
cm9uZzxKU0M6OkpTT2JqZWN0PiBtX2Fkb3B0ZWRDYWxsYmFjazsKKyAgICBKU0M6OlN0cm9uZzxK
U0M6OkpTT2JqZWN0PiBtX2F0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjazsKICAgICBSZWY8RE9NV3Jh
cHBlcldvcmxkPiBtX2lzb2xhdGVkV29ybGQ7CiAgICAgVmVjdG9yPFJlZlB0cjxFbGVtZW50Piwg
MT4gbV9jb25zdHJ1Y3Rpb25TdGFjazsKICAgICBIYXNoU2V0PEF0b21TdHJpbmc+IG1fb2JzZXJ2
ZWRBdHRyaWJ1dGVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21F
bGVtZW50UmVnaXN0cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjg1
NjM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50UmVnaXN0
cnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTcgKzEzMSwxNyBAQCBKU1ZhbHVl
IEpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUoCiAKICAgICBhdXRvKiBjb25uZWN0ZWRD
YWxsYmFjayA9IGdldEN1c3RvbUVsZW1lbnRDYWxsYmFjayhsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjb25uZWN0ZWRDYWxs
YmFjayIpKTsKICAgICBpZiAoY29ubmVjdGVkQ2FsbGJhY2spCi0gICAgICAgIGVsZW1lbnRJbnRl
cmZhY2UtPnNldENvbm5lY3RlZENhbGxiYWNrKGNvbm5lY3RlZENhbGxiYWNrKTsKKyAgICAgICAg
ZWxlbWVudEludGVyZmFjZS0+c2V0Q29ubmVjdGVkQ2FsbGJhY2sodm0sIGNvbm5lY3RlZENhbGxi
YWNrKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAg
YXV0byogZGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2sobGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiZGlzY29ubmVjdGVkQ2FsbGJhY2siKSk7CiAgICAgaWYgKGRpc2Nvbm5lY3RlZENhbGxi
YWNrKQotICAgICAgICBlbGVtZW50SW50ZXJmYWNlLT5zZXREaXNjb25uZWN0ZWRDYWxsYmFjayhk
aXNjb25uZWN0ZWRDYWxsYmFjayk7CisgICAgICAgIGVsZW1lbnRJbnRlcmZhY2UtPnNldERpc2Nv
bm5lY3RlZENhbGxiYWNrKHZtLCBkaXNjb25uZWN0ZWRDYWxsYmFjayk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIGF1dG8qIGFkb3B0ZWRDYWxsYmFj
ayA9IGdldEN1c3RvbUVsZW1lbnRDYWxsYmFjayhsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm90b3R5
cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhZG9wdGVkQ2FsbGJhY2siKSk7
CiAgICAgaWYgKGFkb3B0ZWRDYWxsYmFjaykKLSAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0
QWRvcHRlZENhbGxiYWNrKGFkb3B0ZWRDYWxsYmFjayk7CisgICAgICAgIGVsZW1lbnRJbnRlcmZh
Y2UtPnNldEFkb3B0ZWRDYWxsYmFjayh2bSwgYWRvcHRlZENhbGxiYWNrKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgYXV0byogYXR0cmlidXRlQ2hh
bmdlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImF0dHJpYnV0
ZUNoYW5nZWRDYWxsYmFjayIpKTsKQEAgLTE1MiwyMyArMTUyLDEwIEBAIEpTVmFsdWUgSlNDdXN0
b21FbGVtZW50UmVnaXN0cnk6OmRlZmluZSgKICAgICAgICAgaWYgKCFvYnNlcnZlZEF0dHJpYnV0
ZXNWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgICAgICBhdXRvIG9ic2VydmVkQXR0cmli
dXRlcyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgb2JzZXJ2ZWRBdHRyaWJ1dGVzVmFsdWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKLSAgICAgICAgICAgIGVsZW1lbnRJbnRlcmZhY2Ut
PnNldEF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2ssIG9i
c2VydmVkQXR0cmlidXRlcyk7CisgICAgICAgICAgICBlbGVtZW50SW50ZXJmYWNlLT5zZXRBdHRy
aWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodm0sIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaywgb2JzZXJ2
ZWRBdHRyaWJ1dGVzKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1dG8gYWRkVG9HbG9iYWxP
YmplY3RXaXRoUHJpdmF0ZU5hbWUgPSBbJl0gKEpTT2JqZWN0KiBvYmplY3RUb0FkZCkgewotICAg
ICAgICBpZiAob2JqZWN0VG9BZGQpIHsKLSAgICAgICAgICAgIFByaXZhdGVOYW1lIHVuaXF1ZVBy
aXZhdGVOYW1lOwotICAgICAgICAgICAgZ2xvYmFsT2JqZWN0KCktPnB1dERpcmVjdCh2bSwgdW5p
cXVlUHJpdmF0ZU5hbWUsIG9iamVjdFRvQWRkKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBh
ZGRUb0dsb2JhbE9iamVjdFdpdGhQcml2YXRlTmFtZShjb25zdHJ1Y3Rvcik7Ci0gICAgYWRkVG9H
bG9iYWxPYmplY3RXaXRoUHJpdmF0ZU5hbWUoY29ubmVjdGVkQ2FsbGJhY2spOwotICAgIGFkZFRv
R2xvYmFsT2JqZWN0V2l0aFByaXZhdGVOYW1lKGRpc2Nvbm5lY3RlZENhbGxiYWNrKTsKLSAgICBh
ZGRUb0dsb2JhbE9iamVjdFdpdGhQcml2YXRlTmFtZShhZG9wdGVkQ2FsbGJhY2spOwotICAgIGFk
ZFRvR2xvYmFsT2JqZWN0V2l0aFByaXZhdGVOYW1lKGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayk7
Ci0KICAgICBpZiAoYXV0byBwcm9taXNlID0gcmVnaXN0cnkuYWRkRWxlbWVudERlZmluaXRpb24o
V1RGTW92ZShlbGVtZW50SW50ZXJmYWNlKSkpCiAgICAgICAgIHByb21pc2UtPnJlc29sdmVXaXRo
SlNWYWx1ZShjb25zdHJ1Y3Rvcik7CiAK
</data>
<flag name="review"
          id="468997"
          type_id="1"
          status="-"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="468938"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>