<?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>186215</bug_id>
          
          <creation_ts>2018-06-01 17:48:47 -0700</creation_ts>
          <short_desc>Editor can hold references to Documents after you navigate away</short_desc>
          <delta_ts>2018-06-23 16:08:11 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=186878</see_also>
          <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="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1429448</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-06-01 17:48:47 -0700</bug_when>
    <thetext>If a page triggers Editor VisibleSelection code—say, like:

            var selection = window.getSelection();
            var container = document.getElementById(&quot;container&quot;);
            selection.setPosition(container, 0);

— then Frame’s m_editor retains that Document after you navigate away from the page. It’s only released when the Frame is released:

  * frame #0: 0x000000010d3b4c5b WebCore`WebCore::Document::~Document(this=0x000000012ad00fb8) at Document.cpp:582
    frame #1: 0x000000010d757e55 WebCore`WebCore::HTMLDocument::~HTMLDocument(this=0x000000012ad00fb8) at HTMLDocument.cpp:95
    frame #2: 0x000000010d757e75 WebCore`WebCore::HTMLDocument::~HTMLDocument(this=0x000000012ad00fb8) at HTMLDocument.cpp:95
    frame #3: 0x000000010d757f19 WebCore`WebCore::HTMLDocument::~HTMLDocument(this=0x000000012ad00fb8) at HTMLDocument.cpp:95
    frame #4: 0x000000010d3b8590 WebCore`WebCore::Document::decrementReferencingNodeCount(this=0x000000012ad00fb8) at Document.h:361
    frame #5: 0x000000010d4e80b0 WebCore`WebCore::Node::~Node(this=0x000000012b400528) at Node.cpp:314
    frame #6: 0x000000010d38139d WebCore`WebCore::CharacterData::~CharacterData(this=0x000000012b400528) at CharacterData.h:29
    frame #7: 0x000000010d586135 WebCore`WebCore::Text::~Text(this=0x000000012b400528) at Text.cpp:56
    frame #8: 0x000000010d586155 WebCore`WebCore::Text::~Text(this=0x000000012b400528) at Text.cpp:56
    frame #9: 0x000000010d586179 WebCore`WebCore::Text::~Text(this=0x000000012b400528) at Text.cpp:56
    frame #10: 0x000000010d4e87fb WebCore`WebCore::Node::removedLastRef(this=0x000000012b400528) at Node.cpp:2557
    frame #11: 0x000000010d4e876c WebCore`WebCore::Node::deref(this=0x000000012b400528) at Node.cpp:365
    frame #12: 0x000000010b7b879e WebCore`void WTF::derefIfNotNull&lt;WebCore::Node&gt;(ptr=0x000000012b400528) at RefPtr.h:45
    frame #13: 0x000000010b7b8769 WebCore`WTF::RefPtr&lt;WebCore::Node, WTF::DumbPtrTraits&lt;WebCore::Node&gt; &gt;::~RefPtr(this=0x0000000124cf2900) at RefPtr.h:70
    frame #14: 0x000000010b7b7c05 WebCore`WTF::RefPtr&lt;WebCore::Node, WTF::DumbPtrTraits&lt;WebCore::Node&gt; &gt;::~RefPtr(this=0x0000000124cf2900) at RefPtr.h:70
    frame #15: 0x000000010b984bd5 WebCore`WebCore::Position::~Position(this=0x0000000124cf2900) at Position.h:55
    frame #16: 0x000000010b984bb5 WebCore`WebCore::Position::~Position(this=0x0000000124cf2900) at Position.h:55
    frame #17: 0x000000010ba7a3cc WebCore`WebCore::VisibleSelection::~VisibleSelection(this=0x0000000124cf2900) at VisibleSelection.h:38
    frame #18: 0x000000010ba75f65 WebCore`WebCore::VisibleSelection::~VisibleSelection(this=0x0000000124cf2900) at VisibleSelection.h:38
    frame #19: 0x000000010d6122a0 WebCore`WebCore::Editor::~Editor(this=0x0000000124cf2800) at Editor.cpp:1164
    frame #20: 0x000000010d612635 WebCore`WebCore::Editor::~Editor(this=0x0000000124cf2800) at Editor.cpp:1164
    frame #21: 0x000000010dd966eb WebCore`WTF::UniqueRef&lt;WebCore::Editor&gt;::~UniqueRef() [inlined] std::__1::default_delete&lt;WebCore::Editor&gt;::operator(this=0x0000000124cb5308, __ptr=0x0000000124cf2800)(WebCore::Editor*) const at memory:2239
    frame #22: 0x000000010dd966d0 WebCore`WTF::UniqueRef&lt;WebCore::Editor&gt;::~UniqueRef() [inlined] std::__1::unique_ptr&lt;WebCore::Editor, std::__1::default_delete&lt;WebCore::Editor&gt; &gt;::reset(this=0x0000000124cb5308, __p=0x0000000000000000) at memory:2552
    frame #23: 0x000000010dd96683 WebCore`WTF::UniqueRef&lt;WebCore::Editor&gt;::~UniqueRef() [inlined] std::__1::unique_ptr&lt;WebCore::Editor, std::__1::default_delete&lt;WebCore::Editor&gt; &gt;::~unique_ptr(this=0x0000000124cb5308) at memory:2506
    frame #24: 0x000000010dd96683 WebCore`WTF::UniqueRef&lt;WebCore::Editor&gt;::~UniqueRef() [inlined] std::__1::unique_ptr&lt;WebCore::Editor, std::__1::default_delete&lt;WebCore::Editor&gt; &gt;::~unique_ptr(this=0x0000000124cb5308) at memory:2506
    frame #25: 0x000000010dd96683 WebCore`WTF::UniqueRef&lt;WebCore::Editor&gt;::~UniqueRef(this=0x0000000124cb5308) at UniqueRef.h:42
    frame #26: 0x000000010dd70045 WebCore`WTF::UniqueRef&lt;WebCore::Editor&gt;::~UniqueRef(this=0x0000000124cb5308) at UniqueRef.h:42
    frame #27: 0x000000010dd6fb86 WebCore`WebCore::Frame::~Frame(this=0x0000000124cb5230) at Frame.cpp:231
    frame #28: 0x000000010dd70125 WebCore`WebCore::Frame::~Frame(this=0x0000000124cb5230) at Frame.cpp:214
    frame #29: 0x000000010dd70149 WebCore`WebCore::Frame::~Frame(this=0x0000000124cb5230) at Frame.cpp:214
    frame #30: 0x000000010b9e26cf WebCore`WTF::ThreadSafeRefCounted&lt;WebCore::AbstractFrame, (WTF::DestructionThread)0&gt;::deref(this=0x0000000124cb5238) const at ThreadSafeRefCounted.h:76
    frame #31: 0x000000010b9e2653 WebCore`WTF::Ref&lt;WebCore::Frame, WTF::DumbPtrTraits&lt;WebCore::Frame&gt; &gt;::~Ref(this=0x0000000124dfe098) at Ref.h:61
    frame #32: 0x000000010b9e2465 WebCore`WTF::Ref&lt;WebCore::Frame, WTF::DumbPtrTraits&lt;WebCore::Frame&gt; &gt;::~Ref(this=0x0000000124dfe098) at Ref.h:55
    frame #33: 0x000000010ddc3a13 WebCore`WebCore::Page::~Page(this=0x0000000124dfe000) at Page.cpp:337
    frame #34: 0x000000010ddc4ad5 WebCore`WebCore::Page::~Page(this=0x0000000124dfe000) at Page.cpp:293

Seen with LayoutTests/fast/css/counters/counter-before-content-not-incremented.html when testing with changes in bug 186214.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429449</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-06-01 17:49:03 -0700</bug_when>
    <thetext>rdar://problem/40736891</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429458</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-06-01 18:14:03 -0700</bug_when>
    <thetext>Also need to clean up Frame::selection()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429486</commentid>
    <comment_count>3</comment_count>
      <attachid>341820</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-06-01 20:21:43 -0700</bug_when>
    <thetext>Created attachment 341820
Fixes the leak</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429489</commentid>
    <comment_count>4</comment_count>
      <attachid>341821</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-06-01 20:24:22 -0700</bug_when>
    <thetext>Created attachment 341821
Fixes the leak</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429495</commentid>
    <comment_count>5</comment_count>
      <attachid>341821</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-06-01 20:50:16 -0700</bug_when>
    <thetext>Comment on attachment 341821
Fixes the leak

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

&gt; Source/WebCore/editing/Editor.cpp:1178
&gt; +    m_mark = VisibleSelection();
&gt; +    m_oldSelectionForEditorUIUpdate = VisibleSelection();

I think these can be foo = { };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429501</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-06-01 21:09:32 -0700</bug_when>
    <thetext>Committed r232434: &lt;https://trac.webkit.org/changeset/232434&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1435898</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-06-23 15:43:35 -0700</bug_when>
    <thetext>Hi Ryosuke, I&apos;m trying to debug this test with a patch I&apos;m working on and finding some interesting results. I&apos;d like your feedback. The patch I&apos;m working on makes our conservative stack scan a bit more conservative: it&apos;ll keep alive interior pointers to JSCells.

I did some experimenting with your test, and have found the following results.

I rolled out your change that you landed, and confirmed that this test fails with your change rolled out, and passes with your change rolled in. (This is a variant of your original test that&apos;s identical semantically in my understanding):
```
description(&apos;This tests navigating away from a document after setting a selection deletes the document.&apos;);
jsTestIsAsync = true;

function appendIframe()
{
    const iframe = document.createElement(&apos;iframe&apos;);
    document.body.appendChild(iframe);
    iframe.contentDocument.body.innerHTML = &apos;&lt;p&gt;hello&lt;/p&gt;&apos;;
    return iframe;
}

function setEditorStates(iframe)
{
    iframe.contentDocument.designMode = &apos;on&apos;;
    iframe.contentWindow.getSelection().setPosition(iframe.contentDocument.body, 1);
    iframe.contentDocument.execCommand(&apos;bold&apos;, false, null);
}

function wait(duration)
{
    return new Promise(function (resolve) {
        setTimeout(resolve, 0);
    });
}

var frame;
var initialDocumentCount;
async function runTest()
{
    let iframe = appendIframe();

    await wait(0); // Make sure the transient document created by inserting an iframe is removed.
    GCController.collect();

    setEditorStates(iframe);

    await wait(0); // Wait for UI update timer to fire.

    initialDocumentCount = internals.numberOfLiveDocuments();
    debug(`num live documents before setting src: ${internals.numberOfLiveDocuments()}`);
    iframe.src = &quot;resources/select-iframe-focusin-document-crash-frame.html&quot;;
    let resolve;
    let p = new Promise(function (r) { resolve = r; });
    iframe.onload = () =&gt; {
        GCController.collect();
        resolve(internals.numberOfLiveDocuments() === initialDocumentCount);
    }
    let result = await p;
    return result;
}

async function runGC() {
    await wait(0);
    GCController.collect();
}

async function loop() {
    let success = false;
    for (let i = 0; i &lt; 1; ++i) {
        let result = await runTest();
        if (result) {
            success = true;
            break;
        }
    }

    if (success)
        debug(&quot;Success!&quot;);
    else
        debug(&quot;Fail!&quot;);

    finishJSTest();                
}

if (!window.GCController || !window.internals) {
    debug(&apos;This test requires GCController and internals&apos;);
} else {
    if (window.testRunner)
        setTimeout(() =&gt; testRunner.notifyDone(), 3000);
    // Clear out any lingering documents from the previous tests.
    GCController.collect();
    GCController.collect();

    loop();
}
```


However, I modified this test slightly, to do the GC and document count check after a few ticks of the runloop, and this test passes both with our without your change in this patch:

```
description(&apos;This tests navigating away from a document after setting a selection deletes the document.&apos;);
jsTestIsAsync = true;

function appendIframe()
{
    const iframe = document.createElement(&apos;iframe&apos;);
    document.body.appendChild(iframe);
    iframe.contentDocument.body.innerHTML = &apos;&lt;p&gt;hello&lt;/p&gt;&apos;;
    return iframe;
}

function setEditorStates(iframe)
{
    iframe.contentDocument.designMode = &apos;on&apos;;
    iframe.contentWindow.getSelection().setPosition(iframe.contentDocument.body, 1);
    iframe.contentDocument.execCommand(&apos;bold&apos;, false, null);
}

function wait(duration)
{
    return new Promise(function (resolve) {
        setTimeout(resolve, 0);
    });
}

var frame;
var initialDocumentCount;
async function runTest()
{
    let iframe = appendIframe();

    await wait(0); // Make sure the transient document created by inserting an iframe is removed.
    GCController.collect();

    setEditorStates(iframe);

    await wait(0); // Wait for UI update timer to fire.

    initialDocumentCount = internals.numberOfLiveDocuments();
    debug(`num live documents before setting src: ${internals.numberOfLiveDocuments()}`);
    iframe.src = &quot;resources/select-iframe-focusin-document-crash-frame.html&quot;;
    let resolve;
    let p = new Promise(function (r) { resolve = r; });
    iframe.onload = () =&gt; {
        resolve();
    }
    let result = await p;
    return result;
}

async function runGC() {
    await wait(0);
    GCController.collect();
}

async function loop() {
    let success = false;
    for (let i = 0; i &lt; 1; ++i) {
        await runTest();
        await runGC();
        if (initialDocumentCount === internals.numberOfLiveDocuments()) {
            success = true;
            break;
        }
    }

    if (success)
        debug(&quot;Success!&quot;);
    else
        debug(&quot;Fail!&quot;);

    finishJSTest();                
}

if (!window.GCController || !window.internals) {
    debug(&apos;This test requires GCController and internals&apos;);
} else {
    if (window.testRunner)
        setTimeout(() =&gt; testRunner.notifyDone(), 3000);
    // Clear out any lingering documents from the previous tests.
    GCController.collect();
    GCController.collect();

    loop();
}
```

So, I think there are at least a few things going on here (and probably more):
- Your original test is susceptible to spurious failure by having random stack values point to cells. As a matter of policy, we don&apos;t want tests like this, because they will eventually fail, because our conservative GC makes tests like this fail for a number of random reasons.
- The test itself may not be measuring exactly what you think it is, since doing the GC a few runloop ticks later will clean up the extra document. This is just a hypothesis, but I think you&apos;ll be able to analyze this better since you understand what the code is doing better than I do. I think the implication here might be that we either don&apos;t really need your change to clean up the document, or your change may help GCs happening in some more specific call stacks and not in the more general case.

Based on Simon&apos;s suggestion, I verified that the last document is indeed killed by the last GC in the above example. Based on your original description of the bug, I would have expected that not to happen. Based on these findings, I&apos;m probably going to mark this test as flaky or delete it in my GC crasher fix.

Do you have any thoughts on this data/test?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341820</attachid>
            <date>2018-06-01 20:21:43 -0700</date>
            <delta_ts>2018-06-01 20:24:21 -0700</delta_ts>
            <desc>Fixes the leak</desc>
            <filename>bug-186215-20180601202143.patch</filename>
            <type>text/plain</type>
            <size>8320</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMjQzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE4LTA2LTAxICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEVkaXRvciBjYW4gaG9sZCByZWZl
cmVuY2VzIHRvIERvY3VtZW50cyBhZnRlciB5b3UgbmF2aWdhdGUgYXdheQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg2MjE1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYXIgdGhlIHZhcmlvdXMgbWVt
YmVyIHZhcmlhYmxlcyB0aGF0IGNhbiBob2xkIG9udG8gYSBkb2N1bWVudCBpbiBFZGl0b3I6OmNs
ZWFyIGFuZCBGcmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3RydWN0aW9uLgorCisgICAgICAg
IFRlc3Q6IGVkaXRpbmcvc2VsZWN0aW9uL25hdmlnYXRpb24tY2xlYXJzLWVkaXRvci1zdGF0ZS5o
dG1sCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmNsZWFyKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpw
cmVwYXJlRm9yRGVzdHJ1Y3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
aDoKKwogMjAxOC0wNi0wMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXNvdXJjZUxvYWRlcjo6Y2FuY2VsKCkgc2hvdWxkbid0IHN5bmNocm9ub3VzbHkgZmly
ZSBsb2FkIGV2ZW50IG9uIGRvY3VtZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CShyZXZpc2lvbiAyMzI0MjApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNjUsNiArMTE2NSw3IEBAIEVkaXRvcjo6fkVkaXRvcigpID0g
ZGVmYXVsdDsKIAogdm9pZCBFZGl0b3I6OmNsZWFyKCkKIHsKKyAgICBtX2xhc3RFZGl0Q29tbWFu
ZCA9IG51bGxwdHI7CiAgICAgaWYgKG1fY29tcG9zaXRpb25Ob2RlKSB7CiAgICAgICAgIG1fY29t
cG9zaXRpb25Ob2RlID0gbnVsbHB0cjsKICAgICAgICAgaWYgKEVkaXRvckNsaWVudCogY2xpZW50
ID0gdGhpcy0+Y2xpZW50KCkpCkBAIC0xMTczLDYgKzExNzQsMTQgQEAgdm9pZCBFZGl0b3I6OmNs
ZWFyKCkKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcy5jbGVhcigpOwogICAgIG1f
c2hvdWxkU3R5bGVXaXRoQ1NTID0gZmFsc2U7CiAgICAgbV9kZWZhdWx0UGFyYWdyYXBoU2VwYXJh
dG9yID0gRWRpdG9yUGFyYWdyYXBoU2VwYXJhdG9ySXNEaXY7CisgICAgbV9tYXJrID0gVmlzaWJs
ZVNlbGVjdGlvbigpOworICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlVcGRhdGUgPSBWaXNp
YmxlU2VsZWN0aW9uKCk7CisgICAgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyLnN0b3AoKTsKKworI2lm
IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPUykKKyAg
ICBtX3RlbGVwaG9uZU51bWJlckRldGVjdGlvblVwZGF0ZVRpbWVyLnN0b3AoKTsKKyAgICBtX2Rl
dGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzLmNsZWFyKCk7CisjZW5kaWYKIH0KIAogYm9vbCBF
ZGl0b3I6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdHJpZ2dlcmluZ0V2
ZW50LCBUZXh0RXZlbnRJbnB1dFR5cGUgaW5wdXRUeXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCShyZXZpc2lvbiAyMzI0MjApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01ODIsOCArNTgyLDYgQEAgcHJpdmF0ZToKICAgICBjb25z
dCBzdGQ6OnVuaXF1ZV9wdHI8UEFMOjpLaWxsUmluZz4gbV9raWxsUmluZzsKICAgICBjb25zdCBz
dGQ6OnVuaXF1ZV9wdHI8U3BlbGxDaGVja2VyPiBtX3NwZWxsQ2hlY2tlcjsKICAgICBjb25zdCBz
dGQ6OnVuaXF1ZV9wdHI8QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4gbV9hbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOwotICAgIFZpc2libGVTZWxlY3Rpb24gbV9tYXJrOwotICAgIGJvb2wgbV9h
cmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkIHsgZmFsc2UgfTsKICAgICBFZGl0b3JQYXJh
Z3JhcGhTZXBhcmF0b3IgbV9kZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yIHsgRWRpdG9yUGFyYWdy
YXBoU2VwYXJhdG9ySXNEaXYgfTsKICAgICBib29sIG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQgeyBm
YWxzZSB9OwogCkBAIC01OTIsNiArNTkwLDkgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PFN0cmlu
Zz4gbV9yZW1vdmVkQXR0YWNobWVudElkZW50aWZpZXJzOwogI2VuZGlmCiAKKyAgICBWaXNpYmxl
U2VsZWN0aW9uIG1fbWFyazsKKyAgICBib29sIG1fYXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGln
aHRlZCB7IGZhbHNlIH07CisKICAgICBWaXNpYmxlU2VsZWN0aW9uIG1fb2xkU2VsZWN0aW9uRm9y
RWRpdG9yVUlVcGRhdGU7CiAgICAgVGltZXIgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyOwogICAgIGJv
b2wgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyU2hvdWxkQ2hlY2tTcGVsbGluZ0FuZEdyYW1tYXIgeyBm
YWxzZSB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJ
KHJldmlzaW9uIDIzMjQyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDkgQEAgRnJhbWVTZWxlY3Rpb246
OkZyYW1lU2VsZWN0aW9uKEZyYW1lKiBmcgogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1f
eFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZp
Z2F0aW9uKCkpCiAgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQorI2lm
IEVOQUJMRShURVhUX0NBUkVUKQogICAgICwgbV9jYXJldEJsaW5rVGltZXIoKnRoaXMsICZGcmFt
ZVNlbGVjdGlvbjo6Y2FyZXRCbGlua1RpbWVyRmlyZWQpCisjZW5kaWYKICAgICAsIG1fYXBwZWFy
YW5jZVVwZGF0ZVRpbWVyKCp0aGlzLCAmRnJhbWVTZWxlY3Rpb246OmFwcGVhcmFuY2VVcGRhdGVU
aW1lckZpcmVkKQogICAgICwgbV9jYXJldEluc2lkZVBvc2l0aW9uRml4ZWQoZmFsc2UpCiAgICAg
LCBtX2Fic0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkKQEAgLTE1NDIsNiArMTU0NCw4IEBAIHZvaWQg
RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGkKIAogICAgIHNldFNlbGVjdGlvbldp
dGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoVmlzaWJsZVNlbGVjdGlvbigpLCBkZWZhdWx0U2V0U2Vs
ZWN0aW9uT3B0aW9ucygpLCBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIENoYXJhY3Rlckdy
YW51bGFyaXR5KTsKICAgICBtX3ByZXZpb3VzQ2FyZXROb2RlID0gbnVsbHB0cjsKKyAgICBtX3R5
cGluZ1N0eWxlID0gbnVsbHB0cjsKKyAgICBtX2FwcGVhcmFuY2VVcGRhdGVUaW1lci5zdG9wKCk7
CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFN0YXJ0KGNvbnN0IFZpc2libGVQb3NpdGlv
biAmcG9zLCBFVXNlclRyaWdnZXJlZCB0cmlnZ2VyKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uaAkocmV2aXNpb24gMjMyNDIwKQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNyArMzQxLDkg
QEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG1fdHlwaW5nU3R5bGU7CiAK
KyNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKICAgICBUaW1lciBtX2NhcmV0QmxpbmtUaW1lcjsKKyNl
bmRpZgogICAgIFRpbWVyIG1fYXBwZWFyYW5jZVVwZGF0ZVRpbWVyOwogICAgIC8vIFRoZSBwYWlu
dGVkIGJvdW5kcyBvZiB0aGUgY2FyZXQgaW4gYWJzb2x1dGUgY29vcmRpbmF0ZXMKICAgICBJbnRS
ZWN0IG1fYWJzQ2FyZXRCb3VuZHM7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzI0MjApCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxOC0w
Ni0wMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBFZGl0b3Ig
Y2FuIGhvbGQgcmVmZXJlbmNlcyB0byBEb2N1bWVudHMgYWZ0ZXIgeW91IG5hdmlnYXRlIGF3YXkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NjIxNQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEg
cmVncmVzc2lvbiB0ZXN0LgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbmF2aWdhdGlv
bi1jbGVhcnMtZWRpdG9yLXN0YXRlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRp
dGluZy9zZWxlY3Rpb24vbmF2aWdhdGlvbi1jbGVhcnMtZWRpdG9yLXN0YXRlLmh0bWw6IEFkZGVk
LgorCiAyMDE4LTA2LTAxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJlc291cmNlTG9hZGVyOjpjYW5jZWwoKSBzaG91bGRuJ3Qgc3luY2hyb25vdXNseSBmaXJl
IGxvYWQgZXZlbnQgb24gZG9jdW1lbnQKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0
aW9uL25hdmlnYXRpb24tY2xlYXJzLWVkaXRvci1zdGF0ZS1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbmF2aWdhdGlvbi1jbGVhcnMtZWRp
dG9yLXN0YXRlLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9lZGl0
aW5nL3NlbGVjdGlvbi9uYXZpZ2F0aW9uLWNsZWFycy1lZGl0b3Itc3RhdGUtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKK1RoaXMgdGVzdHMgbmF2aWdhdGluZyBh
d2F5IGZyb20gYSBkb2N1bWVudCBhZnRlciBzZXR0aW5nIGEgc2VsZWN0aW9uIGRlbGV0ZXMgdGhl
IGRvY3VtZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBpbnRlcm5h
bHMubnVtYmVyT2ZMaXZlRG9jdW1lbnRzKCkgaXMgMQorUEFTUyBpbml0aWFsRG9jdW1lbnRDb3Vu
dCBpcyAyCitQQVNTIGludGVybmFscy5udW1iZXJPZkxpdmVEb2N1bWVudHMoKSBpcyAyCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5
b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbmF2aWdhdGlvbi1jbGVhcnMtZWRpdG9yLXN0YXRl
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbmF2aWdh
dGlvbi1jbGVhcnMtZWRpdG9yLXN0YXRlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vbmF2aWdhdGlvbi1jbGVhcnMtZWRpdG9yLXN0YXRlLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
Kzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIG5hdmlnYXRpbmcgYXdheSBm
cm9tIGEgZG9jdW1lbnQgYWZ0ZXIgc2V0dGluZyBhIHNlbGVjdGlvbiBkZWxldGVzIHRoZSBkb2N1
bWVudC4nKTsKK2pzVGVzdElzQXN5bmMgPSB0cnVlOworCitmdW5jdGlvbiBhcHBlbmRJZnJhbWUo
KQoreworICAgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScp
OworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKKyAgICBpZnJhbWUuY29u
dGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJzxwPmhlbGxvPC9wPic7CisgICAgcmV0dXJu
IGlmcmFtZTsKK30KKworZnVuY3Rpb24gc2VsZWN0QWxsKGlmcmFtZSkKK3sKKyAgICBpZnJhbWUu
Y29udGVudFdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihpZnJhbWUuY29u
dGVudERvY3VtZW50LmJvZHkpOworfQorCitmdW5jdGlvbiBzZWxlY3RGaXJzdFBvc2l0aW9uKGlm
cmFtZSkKK3sKKyAgICBpZnJhbWUuY29udGVudFdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRQb3Np
dGlvbihpZnJhbWUuY29udGVudERvY3VtZW50LmJvZHksIDApOworfQorCitmdW5jdGlvbiB3YWl0
KGR1cmF0aW9uKQoreworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkg
eworICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIDApOworICAgIH0pOworfQorCithc3luYyBm
dW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBzaG91bGRCZSgnaW50ZXJuYWxzLm51bWJlck9mTGl2
ZURvY3VtZW50cygpJywgJzEnKTsKKyAgICBjb25zdCBpZnJhbWUgPSBhcHBlbmRJZnJhbWUoKTsK
KworICAgIGF3YWl0IHdhaXQoMCk7IC8vIE1ha2Ugc3VyZSB0aGUgdHJhbnNpZW50IGRvY3VtZW50
IGNyZWF0ZWQgYnkgaW5zZXJ0aW5nIGFuIGlmcmFtZSBpcyByZW1vdmVkLgorICAgIEdDQ29udHJv
bGxlci5jb2xsZWN0KCk7CisKKyAgICBpbml0aWFsRG9jdW1lbnRDb3VudCA9IGludGVybmFscy5u
dW1iZXJPZkxpdmVEb2N1bWVudHMoKTsKKyAgICBzaG91bGRCZSgnaW5pdGlhbERvY3VtZW50Q291
bnQnLCAnMicpOworICAgIHNlbGVjdEFsbChpZnJhbWUpOworCisgICAgYXdhaXQgd2FpdCgwKTsg
Ly8gV2FpdCBmb3IgVUkgdXBkYXRlIHRpbWVyIHRvIGZpcmUuCisKKyAgICBpZnJhbWUuc3JjID0g
InJlc291cmNlcy9zZWxlY3QtaWZyYW1lLWZvY3VzaW4tZG9jdW1lbnQtY3Jhc2gtZnJhbWUuaHRt
bCI7CisgICAgaWZyYW1lLm9ubG9hZCA9ICgpID0+IHsKKyAgICAgICAgR0NDb250cm9sbGVyLmNv
bGxlY3QoKTsKKyAgICAgICAgR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKyAgICAgICAgc2hvdWxk
QmUoJ2ludGVybmFscy5udW1iZXJPZkxpdmVEb2N1bWVudHMoKScsICcyJyk7CisgICAgICAgIGZp
bmlzaEpTVGVzdCgpOyAgICAgICAgICAgICAgICAKKyAgICB9Cit9CisKK2lmICghd2luZG93LkdD
Q29udHJvbGxlciB8fCAhd2luZG93LmludGVybmFscykgeworICAgIGRlYnVnKCdUaGlzIHRlc3Qg
cmVxdWlyZXMgR0NDb250cm9sbGVyIGFuZCBpbnRlcm5hbHMnKTsKK30gZWxzZSB7CisgICAgLy8g
Q2xlYXIgb3V0IGFueSBsaW5nZXJpbmcgZG9jdW1lbnRzIGZyb20gdGhlIHByZXZpb3VzIHRlc3Rz
LgorICAgIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7CisgICAgR0NDb250cm9sbGVyLmNvbGxlY3Qo
KTsKKyAgICBydW5UZXN0KCk7CisKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341821</attachid>
            <date>2018-06-01 20:24:22 -0700</date>
            <delta_ts>2018-06-01 20:46:58 -0700</delta_ts>
            <desc>Fixes the leak</desc>
            <filename>bug-186215-20180601202421.patch</filename>
            <type>text/plain</type>
            <size>8287</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMjQzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE4LTA2LTAxICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEVkaXRvciBjYW4gaG9sZCByZWZl
cmVuY2VzIHRvIERvY3VtZW50cyBhZnRlciB5b3UgbmF2aWdhdGUgYXdheQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg2MjE1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYXIgdGhlIHZhcmlvdXMgbWVt
YmVyIHZhcmlhYmxlcyB0aGF0IGNhbiBob2xkIG9udG8gYSBkb2N1bWVudCBpbiBFZGl0b3I6OmNs
ZWFyIGFuZCBGcmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3RydWN0aW9uLgorCisgICAgICAg
IFRlc3Q6IGVkaXRpbmcvc2VsZWN0aW9uL25hdmlnYXRpb24tY2xlYXJzLWVkaXRvci1zdGF0ZS5o
dG1sCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmNsZWFyKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OkZyYW1lU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpw
cmVwYXJlRm9yRGVzdHJ1Y3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
aDoKKwogMjAxOC0wNi0wMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXNvdXJjZUxvYWRlcjo6Y2FuY2VsKCkgc2hvdWxkbid0IHN5bmNocm9ub3VzbHkgZmly
ZSBsb2FkIGV2ZW50IG9uIGRvY3VtZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CShyZXZpc2lvbiAyMzI0MjApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNjUsNiArMTE2NSw3IEBAIEVkaXRvcjo6fkVkaXRvcigpID0g
ZGVmYXVsdDsKIAogdm9pZCBFZGl0b3I6OmNsZWFyKCkKIHsKKyAgICBtX2xhc3RFZGl0Q29tbWFu
ZCA9IG51bGxwdHI7CiAgICAgaWYgKG1fY29tcG9zaXRpb25Ob2RlKSB7CiAgICAgICAgIG1fY29t
cG9zaXRpb25Ob2RlID0gbnVsbHB0cjsKICAgICAgICAgaWYgKEVkaXRvckNsaWVudCogY2xpZW50
ID0gdGhpcy0+Y2xpZW50KCkpCkBAIC0xMTczLDYgKzExNzQsMTQgQEAgdm9pZCBFZGl0b3I6OmNs
ZWFyKCkKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcy5jbGVhcigpOwogICAgIG1f
c2hvdWxkU3R5bGVXaXRoQ1NTID0gZmFsc2U7CiAgICAgbV9kZWZhdWx0UGFyYWdyYXBoU2VwYXJh
dG9yID0gRWRpdG9yUGFyYWdyYXBoU2VwYXJhdG9ySXNEaXY7CisgICAgbV9tYXJrID0gVmlzaWJs
ZVNlbGVjdGlvbigpOworICAgIG1fb2xkU2VsZWN0aW9uRm9yRWRpdG9yVUlVcGRhdGUgPSBWaXNp
YmxlU2VsZWN0aW9uKCk7CisgICAgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyLnN0b3AoKTsKKworI2lm
IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPUykKKyAg
ICBtX3RlbGVwaG9uZU51bWJlckRldGVjdGlvblVwZGF0ZVRpbWVyLnN0b3AoKTsKKyAgICBtX2Rl
dGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzLmNsZWFyKCk7CisjZW5kaWYKIH0KIAogYm9vbCBF
ZGl0b3I6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdHJpZ2dlcmluZ0V2
ZW50LCBUZXh0RXZlbnRJbnB1dFR5cGUgaW5wdXRUeXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCShyZXZpc2lvbiAyMzI0MjApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01ODIsOCArNTgyLDYgQEAgcHJpdmF0ZToKICAgICBjb25z
dCBzdGQ6OnVuaXF1ZV9wdHI8UEFMOjpLaWxsUmluZz4gbV9raWxsUmluZzsKICAgICBjb25zdCBz
dGQ6OnVuaXF1ZV9wdHI8U3BlbGxDaGVja2VyPiBtX3NwZWxsQ2hlY2tlcjsKICAgICBjb25zdCBz
dGQ6OnVuaXF1ZV9wdHI8QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4gbV9hbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOwotICAgIFZpc2libGVTZWxlY3Rpb24gbV9tYXJrOwotICAgIGJvb2wgbV9h
cmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkIHsgZmFsc2UgfTsKICAgICBFZGl0b3JQYXJh
Z3JhcGhTZXBhcmF0b3IgbV9kZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yIHsgRWRpdG9yUGFyYWdy
YXBoU2VwYXJhdG9ySXNEaXYgfTsKICAgICBib29sIG1fb3ZlcndyaXRlTW9kZUVuYWJsZWQgeyBm
YWxzZSB9OwogCkBAIC01OTIsNiArNTkwLDkgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PFN0cmlu
Zz4gbV9yZW1vdmVkQXR0YWNobWVudElkZW50aWZpZXJzOwogI2VuZGlmCiAKKyAgICBWaXNpYmxl
U2VsZWN0aW9uIG1fbWFyazsKKyAgICBib29sIG1fYXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGln
aHRlZCB7IGZhbHNlIH07CisKICAgICBWaXNpYmxlU2VsZWN0aW9uIG1fb2xkU2VsZWN0aW9uRm9y
RWRpdG9yVUlVcGRhdGU7CiAgICAgVGltZXIgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyOwogICAgIGJv
b2wgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyU2hvdWxkQ2hlY2tTcGVsbGluZ0FuZEdyYW1tYXIgeyBm
YWxzZSB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJ
KHJldmlzaW9uIDIzMjQyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDkgQEAgRnJhbWVTZWxlY3Rpb246
OkZyYW1lU2VsZWN0aW9uKEZyYW1lKiBmcgogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1f
eFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZp
Z2F0aW9uKCkpCiAgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQorI2lm
IEVOQUJMRShURVhUX0NBUkVUKQogICAgICwgbV9jYXJldEJsaW5rVGltZXIoKnRoaXMsICZGcmFt
ZVNlbGVjdGlvbjo6Y2FyZXRCbGlua1RpbWVyRmlyZWQpCisjZW5kaWYKICAgICAsIG1fYXBwZWFy
YW5jZVVwZGF0ZVRpbWVyKCp0aGlzLCAmRnJhbWVTZWxlY3Rpb246OmFwcGVhcmFuY2VVcGRhdGVU
aW1lckZpcmVkKQogICAgICwgbV9jYXJldEluc2lkZVBvc2l0aW9uRml4ZWQoZmFsc2UpCiAgICAg
LCBtX2Fic0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkKQEAgLTE1NDIsNiArMTU0NCw4IEBAIHZvaWQg
RnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGkKIAogICAgIHNldFNlbGVjdGlvbldp
dGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoVmlzaWJsZVNlbGVjdGlvbigpLCBkZWZhdWx0U2V0U2Vs
ZWN0aW9uT3B0aW9ucygpLCBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIENoYXJhY3Rlckdy
YW51bGFyaXR5KTsKICAgICBtX3ByZXZpb3VzQ2FyZXROb2RlID0gbnVsbHB0cjsKKyAgICBtX3R5
cGluZ1N0eWxlID0gbnVsbHB0cjsKKyAgICBtX2FwcGVhcmFuY2VVcGRhdGVUaW1lci5zdG9wKCk7
CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFN0YXJ0KGNvbnN0IFZpc2libGVQb3NpdGlv
biAmcG9zLCBFVXNlclRyaWdnZXJlZCB0cmlnZ2VyKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uaAkocmV2aXNpb24gMjMyNDIwKQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNyArMzQxLDkg
QEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG1fdHlwaW5nU3R5bGU7CiAK
KyNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKICAgICBUaW1lciBtX2NhcmV0QmxpbmtUaW1lcjsKKyNl
bmRpZgogICAgIFRpbWVyIG1fYXBwZWFyYW5jZVVwZGF0ZVRpbWVyOwogICAgIC8vIFRoZSBwYWlu
dGVkIGJvdW5kcyBvZiB0aGUgY2FyZXQgaW4gYWJzb2x1dGUgY29vcmRpbmF0ZXMKICAgICBJbnRS
ZWN0IG1fYWJzQ2FyZXRCb3VuZHM7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzI0MjApCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxOC0w
Ni0wMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBFZGl0b3Ig
Y2FuIGhvbGQgcmVmZXJlbmNlcyB0byBEb2N1bWVudHMgYWZ0ZXIgeW91IG5hdmlnYXRlIGF3YXkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NjIxNQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEg
cmVncmVzc2lvbiB0ZXN0LgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbmF2aWdhdGlv
bi1jbGVhcnMtZWRpdG9yLXN0YXRlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRp
dGluZy9zZWxlY3Rpb24vbmF2aWdhdGlvbi1jbGVhcnMtZWRpdG9yLXN0YXRlLmh0bWw6IEFkZGVk
LgorCiAyMDE4LTA2LTAxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJlc291cmNlTG9hZGVyOjpjYW5jZWwoKSBzaG91bGRuJ3Qgc3luY2hyb25vdXNseSBmaXJl
IGxvYWQgZXZlbnQgb24gZG9jdW1lbnQKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0
aW9uL25hdmlnYXRpb24tY2xlYXJzLWVkaXRvci1zdGF0ZS1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbmF2aWdhdGlvbi1jbGVhcnMtZWRp
dG9yLXN0YXRlLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9lZGl0
aW5nL3NlbGVjdGlvbi9uYXZpZ2F0aW9uLWNsZWFycy1lZGl0b3Itc3RhdGUtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKK1RoaXMgdGVzdHMgbmF2aWdhdGluZyBh
d2F5IGZyb20gYSBkb2N1bWVudCBhZnRlciBzZXR0aW5nIGEgc2VsZWN0aW9uIGRlbGV0ZXMgdGhl
IGRvY3VtZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBpbnRlcm5h
bHMubnVtYmVyT2ZMaXZlRG9jdW1lbnRzKCkgaXMgMQorUEFTUyBpbml0aWFsRG9jdW1lbnRDb3Vu
dCBpcyAyCitQQVNTIGludGVybmFscy5udW1iZXJPZkxpdmVEb2N1bWVudHMoKSBpcyAyCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5
b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbmF2aWdhdGlvbi1jbGVhcnMtZWRpdG9yLXN0YXRl
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbmF2aWdh
dGlvbi1jbGVhcnMtZWRpdG9yLXN0YXRlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vbmF2aWdhdGlvbi1jbGVhcnMtZWRpdG9yLXN0YXRlLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
Kzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIG5hdmlnYXRpbmcgYXdheSBm
cm9tIGEgZG9jdW1lbnQgYWZ0ZXIgc2V0dGluZyBhIHNlbGVjdGlvbiBkZWxldGVzIHRoZSBkb2N1
bWVudC4nKTsKK2pzVGVzdElzQXN5bmMgPSB0cnVlOworCitmdW5jdGlvbiBhcHBlbmRJZnJhbWUo
KQoreworICAgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScp
OworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKKyAgICBpZnJhbWUuY29u
dGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJzxwPmhlbGxvPC9wPic7CisgICAgcmV0dXJu
IGlmcmFtZTsKK30KKworZnVuY3Rpb24gc2VsZWN0QWxsKGlmcmFtZSkKK3sKKyAgICBpZnJhbWUu
Y29udGVudFdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihpZnJhbWUuY29u
dGVudERvY3VtZW50LmJvZHkpOworfQorCitmdW5jdGlvbiBzZWxlY3RGaXJzdFBvc2l0aW9uKGlm
cmFtZSkKK3sKKyAgICBpZnJhbWUuY29udGVudFdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRQb3Np
dGlvbihpZnJhbWUuY29udGVudERvY3VtZW50LmJvZHksIDApOworfQorCitmdW5jdGlvbiB3YWl0
KGR1cmF0aW9uKQoreworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkg
eworICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIDApOworICAgIH0pOworfQorCithc3luYyBm
dW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBzaG91bGRCZSgnaW50ZXJuYWxzLm51bWJlck9mTGl2
ZURvY3VtZW50cygpJywgJzEnKTsKKyAgICBjb25zdCBpZnJhbWUgPSBhcHBlbmRJZnJhbWUoKTsK
KworICAgIGF3YWl0IHdhaXQoMCk7IC8vIE1ha2Ugc3VyZSB0aGUgdHJhbnNpZW50IGRvY3VtZW50
IGNyZWF0ZWQgYnkgaW5zZXJ0aW5nIGFuIGlmcmFtZSBpcyByZW1vdmVkLgorICAgIEdDQ29udHJv
bGxlci5jb2xsZWN0KCk7CisKKyAgICBpbml0aWFsRG9jdW1lbnRDb3VudCA9IGludGVybmFscy5u
dW1iZXJPZkxpdmVEb2N1bWVudHMoKTsKKyAgICBzaG91bGRCZSgnaW5pdGlhbERvY3VtZW50Q291
bnQnLCAnMicpOworICAgIHNlbGVjdEFsbChpZnJhbWUpOworCisgICAgYXdhaXQgd2FpdCgwKTsg
Ly8gV2FpdCBmb3IgVUkgdXBkYXRlIHRpbWVyIHRvIGZpcmUuCisKKyAgICBpZnJhbWUuc3JjID0g
InJlc291cmNlcy9zZWxlY3QtaWZyYW1lLWZvY3VzaW4tZG9jdW1lbnQtY3Jhc2gtZnJhbWUuaHRt
bCI7CisgICAgaWZyYW1lLm9ubG9hZCA9ICgpID0+IHsKKyAgICAgICAgR0NDb250cm9sbGVyLmNv
bGxlY3QoKTsKKyAgICAgICAgc2hvdWxkQmUoJ2ludGVybmFscy5udW1iZXJPZkxpdmVEb2N1bWVu
dHMoKScsICcyJyk7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOyAgICAgICAgICAgICAgICAKKyAg
ICB9Cit9CisKK2lmICghd2luZG93LkdDQ29udHJvbGxlciB8fCAhd2luZG93LmludGVybmFscykg
eworICAgIGRlYnVnKCdUaGlzIHRlc3QgcmVxdWlyZXMgR0NDb250cm9sbGVyIGFuZCBpbnRlcm5h
bHMnKTsKK30gZWxzZSB7CisgICAgLy8gQ2xlYXIgb3V0IGFueSBsaW5nZXJpbmcgZG9jdW1lbnRz
IGZyb20gdGhlIHByZXZpb3VzIHRlc3RzLgorICAgIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7Cisg
ICAgR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKyAgICBydW5UZXN0KCk7CisKK30KKworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="359984"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>