<?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>200504</bug_id>
          
          <creation_ts>2019-08-07 08:29:21 -0700</creation_ts>
          <short_desc>Fix thread safety issue under JSHistory::visitAdditionalChildren()</short_desc>
          <delta_ts>2019-08-07 13:30:29 -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>Bindings</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=172738</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>
          
          <blocked>200451</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1559123</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-07 08:29:21 -0700</bug_when>
    <thetext>Fix thread safety issue under JSHistory::visitAdditionalChildren():

Thread 7 Crashed:: Heap Helper Thread
0   com.apple.JavaScriptCore      	0x0000000109c4e9f0 WTFCrash + 16 (Assertions.cpp:305)
1   com.apple.WebCore             	0x000000011a3fb70b WTFCrashWithInfo(int, char const*, char const*, int) + 27
2   com.apple.WebCore             	0x000000011a5142a9 WTF::WeakPtr&lt;WebCore::DOMWindow&gt;::operator-&gt;() const + 153 (WeakPtr.h:115)
3   com.apple.WebCore             	0x000000011d24133f WebCore::DOMWindowProperty::frame() const + 47 (DOMWindowProperty.cpp:42)
4   com.apple.WebCore             	0x000000011d2f17f9 WebCore::History::stateInternal() const + 25 (History.cpp:100)
5   com.apple.WebCore             	0x000000011d2f1890 WebCore::History::stateChanged() const + 32 (History.cpp:111)
6   com.apple.WebCore             	0x000000011d2f1924 WebCore::History::cachedState() + 68 (History.cpp:116)
7   com.apple.WebCore             	0x000000011c1782c4 WebCore::JSHistory::visitAdditionalChildren(JSC::SlotVisitor&amp;) + 36 (JSHistoryCustom.cpp:49)
8   com.apple.WebCore             	0x000000011b076647 WebCore::JSHistory::visitOutputConstraints(JSC::JSCell*, JSC::SlotVisitor&amp;) + 439 (JSHistory.cpp:405)
9   com.apple.WebCore             	0x000000011c11f9d9 WebCore::DOMGCOutputConstraint::executeImpl(JSC::SlotVisitor&amp;)::$_0::operator()(JSC::Subspace&amp;) const::&apos;lambda&apos;(JSC::SlotVisitor&amp;, JSC::HeapCell*, JSC::HeapCell::Kind)::operator()(JSC::SlotVisitor&amp;, JSC::HeapCell*, JSC::HeapCell::Kind) const + 105 (DOMGCOutputConstraint.cpp:67)
10  com.apple.WebCore             	0x000000011c11f963 WTF::Ref&lt;WTF::SharedTask&lt;void (JSC::SlotVisitor&amp;)&gt;, WTF::DumbPtrTraits&lt;WTF::SharedTask&lt;void (JSC::SlotVisitor&amp;)&gt; &gt; &gt; JSC::Subspace::forEachMarkedCellInParallel&lt;WebCore::DOMGCOutputConstraint::executeImpl(JSC::SlotVisitor&amp;)::$_0::operator()(JSC::Subspace&amp;) const::&apos;lambda&apos;(JSC::SlotVisitor&amp;, JSC::HeapCell*, JSC::HeapCell::Kind)&gt;(WebCore::DOMGCOutputConstraint::executeImpl(JSC::SlotVisitor&amp;)::$_0::operator()(JSC::Subspace&amp;) const::&apos;lambda&apos;(JSC::SlotVisitor&amp;, JSC::HeapCell*, JSC::HeapCell::Kind) const&amp;)::Task::run(JSC::SlotVisitor&amp;)::&apos;lambda&apos;(unsigned long, JSC::HeapCell*, JSC::HeapCell::Kind)::operator()(unsigned long, JSC::HeapCell*, JSC::HeapCell::Kind) const + 67 (SubspaceInlines.h:105)
11  com.apple.WebCore             	0x000000011c11f820 JSC::IterationStatus JSC::MarkedBlock::Handle::forEachMarkedCell&lt;WTF::Ref&lt;WTF::SharedTask&lt;void (JSC::SlotVisitor&amp;)&gt;, WTF::DumbPtrTraits&lt;WTF::SharedTask&lt;void (JSC::SlotVisitor&amp;)&gt; &gt; &gt; JSC::Subspace::forEachMarkedCellInParallel&lt;WebCore::DOMGCOutputConstraint::executeImpl(JSC::SlotVisitor&amp;)::$_0::operator()(JSC::Subspace&amp;) const::&apos;lambda&apos;(JSC::SlotVisitor&amp;, JSC::HeapCell*, JSC::HeapCell::Kind)&gt;(WebCore::DOMGCOutputConstraint::executeImpl(JSC::SlotVisitor&amp;)::$_0::operator()(JSC::Subspace&amp;) const::&apos;lambda&apos;(JSC::SlotVisitor&amp;, JSC::HeapCell*, JSC::HeapCell::Kind) const&amp;)::Task::run(JSC::SlotVisitor&amp;)::&apos;lambda&apos;(unsigned long, JSC::HeapCell*, JSC::HeapCell::Kind)&gt;(WebCore::DOMGCOutputConstraint::executeImpl(JSC::SlotVisitor&amp;)::$_0::operator()(JSC::Subspace&amp;) const::&apos;lambda&apos;(JSC::SlotVisitor&amp;, JSC::HeapCell*, JSC::HeapCell::Kind) const&amp;) + 224 (MarkedBlockInlines.h:546)
12  com.apple.WebCore             	0x000000011c11f455 WTF::Ref&lt;WTF::SharedTask&lt;void (JSC::SlotVisitor&amp;)&gt;, WTF::DumbPtrTraits&lt;WTF::SharedTask&lt;void (JSC::SlotVisitor&amp;)&gt; &gt; &gt; JSC::Subspace::forEachMarkedCellInParallel&lt;WebCore::DOMGCOutputConstraint::executeImpl(JSC::SlotVisitor&amp;)::$_0::operator()(JSC::Subspace&amp;) const::&apos;lambda&apos;(JSC::SlotVisitor&amp;, JSC::HeapCell*, JSC::HeapCell::Kind)&gt;(WebCore::DOMGCOutputConstraint::executeImpl(JSC::SlotVisitor&amp;)::$_0::operator()(JSC::Subspace&amp;) const::&apos;lambda&apos;(JSC::SlotVisitor&amp;, JSC::HeapCell*, JSC::HeapCell::Kind) const&amp;)::Task::run(JSC::SlotVisitor&amp;) + 101 (SubspaceInlines.h:102)
13  com.apple.JavaScriptCore      	0x000000010ad28620 JSC::MarkingConstraint::doParallelWork(JSC::SlotVisitor&amp;, WTF::SharedTask&lt;void (JSC::SlotVisitor&amp;)&gt;&amp;) + 64 (MarkingConstraint.cpp:87)
14  com.apple.JavaScriptCore      	0x000000010ad2a2cd JSC::MarkingConstraintSolver::runExecutionThread(JSC::SlotVisitor&amp;, JSC::MarkingConstraintSolver::SchedulerPreference, WTF::ScopedLambda&lt;WTF::Optional&lt;unsigned int&gt; ()&gt;) + 477 (MarkingConstraintSolver.cpp:232)
15  com.apple.JavaScriptCore      	0x000000010ad39cc4 JSC::MarkingConstraintSolver::execute(JSC::MarkingConstraintSolver::SchedulerPreference, WTF::ScopedLambda&lt;WTF::Optional&lt;unsigned int&gt; ()&gt;)::$_30::operator()(JSC::SlotVisitor&amp;) const + 68 (MarkingConstraintSolver.cpp:68)
16  com.apple.JavaScriptCore      	0x000000010ad39c54 WTF::SharedTaskFunctor&lt;void (JSC::SlotVisitor&amp;), JSC::MarkingConstraintSolver::execute(JSC::MarkingConstraintSolver::SchedulerPreference, WTF::ScopedLambda&lt;WTF::Optional&lt;unsigned int&gt; ()&gt;)::$_30&gt;::run(JSC::SlotVisitor&amp;) + 52 (SharedTask.h:91)
17  com.apple.JavaScriptCore      	0x000000010ad3db31 JSC::SlotVisitor::drainFromShared(JSC::SlotVisitor::SharedDrainMode, WTF::MonotonicTime) + 1377 (SlotVisitor.cpp:692)
18  com.apple.JavaScriptCore      	0x000000010acde7ca JSC::Heap::runBeginPhase(JSC::GCConductor)::$_19::operator()() const + 234 (Heap.cpp:1319)
19  com.apple.JavaScriptCore      	0x000000010acde669 WTF::SharedTaskFunctor&lt;void (), JSC::Heap::runBeginPhase(JSC::GCConductor)::$_19&gt;::run() + 25 (SharedTask.h:91)
20  com.apple.JavaScriptCore      	0x0000000109cca1f1 WTF::ParallelHelperClient::runTask(WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt;, WTF::DumbPtrTraits&lt;WTF::SharedTask&lt;void ()&gt; &gt; &gt; const&amp;) + 241 (ParallelHelperPool.cpp:115)
21  com.apple.JavaScriptCore      	0x0000000109ccb2aa WTF::ParallelHelperPool::Thread::work() + 42 (ParallelHelperPool.cpp:200)
22  com.apple.JavaScriptCore      	0x0000000109c65a2f WTF::AutomaticThread::start(WTF::AbstractLocker const&amp;)::$_0::operator()() const + 671 (AutomaticThread.cpp:223)
23  com.apple.JavaScriptCore      	0x0000000109c65619 WTF::Detail::CallableWrapper&lt;WTF::AutomaticThread::start(WTF::AbstractLocker const&amp;)::$_0, void&gt;::call() + 25 (Function.h:52)
24  com.apple.JavaScriptCore      	0x0000000109c78fad WTF::Function&lt;void ()&gt;::operator()() const + 173 (Function.h:79)
25  com.apple.JavaScriptCore      	0x0000000109d12c93 WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*) + 419 (Threading.cpp:148)
26  com.apple.JavaScriptCore      	0x0000000109d1b4b5 WTF::wtfThreadEntryPoint(void*) + 21 (ThreadingPOSIX.cpp:200)
27  libsystem_pthread.dylib       	0x00007fff7432c661 _pthread_body + 340
28  libsystem_pthread.dylib       	0x00007fff7432c50d _pthread_start + 377
29  libsystem_pthread.dylib       	0x00007fff7432bbf9 thread_start + 13</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559124</commentid>
    <comment_count>1</comment_count>
      <attachid>375699</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-07 08:32:28 -0700</bug_when>
    <thetext>Created attachment 375699
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559154</commentid>
    <comment_count>2</comment_count>
      <attachid>375699</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-07 10:18:41 -0700</bug_when>
    <thetext>Comment on attachment 375699
Patch

Do other JSValueInWrappedObject clients have the same kind of mistake?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559163</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-07 10:22:28 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 375699 [details]
&gt; Patch
&gt; 
&gt; Do other JSValueInWrappedObject clients have the same kind of mistake?

It does not look like it, the other users seem to have simple getters for the JSValueInWrappedObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559172</commentid>
    <comment_count>4</comment_count>
      <attachid>375699</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-07 10:31:17 -0700</bug_when>
    <thetext>Comment on attachment 375699
Patch

Clearing flags on attachment: 375699

Committed r248376: &lt;https://trac.webkit.org/changeset/248376&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559173</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-07 10:31:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559174</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-07 10:32:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/54039531&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559182</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-07 11:04:18 -0700</bug_when>
    <thetext>This bug is evidence that the JSValueInWrappedObject idiom isn’t foolproof enough. Might be worth thinking about how to make sure people are unlikely to make mistakes like this in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559187</commentid>
    <comment_count>8</comment_count>
      <attachid>375699</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-08-07 11:09:37 -0700</bug_when>
    <thetext>Comment on attachment 375699
Patch

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

&gt; Source/WebCore/page/History.h:56
&gt; +    JSValueInWrappedObject&amp; cachedStateForGC() { return m_cachedState; }

I think we decided to call functions like this cachedStateIfExists().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559214</commentid>
    <comment_count>9</comment_count>
      <attachid>375699</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-07 11:36:42 -0700</bug_when>
    <thetext>Comment on attachment 375699
Patch

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

&gt;&gt; Source/WebCore/page/History.h:56
&gt;&gt; +    JSValueInWrappedObject&amp; cachedStateForGC() { return m_cachedState; }
&gt; 
&gt; I think we decided to call functions like this cachedStateIfExists().

I prefer cachedForGC() given what it&apos;s used for. Also note that the existing cachedState() method is NOT an &quot;ensure&quot; method, it actually clears m_cachedState when it is out of date.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559236</commentid>
    <comment_count>10</comment_count>
      <attachid>375699</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-07 12:13:13 -0700</bug_when>
    <thetext>Comment on attachment 375699
Patch

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

&gt;&gt;&gt; Source/WebCore/page/History.h:56
&gt;&gt;&gt; +    JSValueInWrappedObject&amp; cachedStateForGC() { return m_cachedState; }
&gt;&gt; 
&gt;&gt; I think we decided to call functions like this cachedStateIfExists().
&gt; 
&gt; I prefer cachedForGC() given what it&apos;s used for. Also note that the existing cachedState() method is NOT an &quot;ensure&quot; method, it actually clears m_cachedState when it is out of date.

Given the specific behavior, another accurate name besides cachedStateForGC could be cachedStateWithoutRevalidation.

As I said, it might be more important to come up with a great idiom for correctly using JSValueInWrappedObject; I’m irritated that it’s easy to accidentally use it wrong, and there might be a simple way to make it better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559281</commentid>
    <comment_count>11</comment_count>
      <attachid>375699</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-08-07 13:23:35 -0700</bug_when>
    <thetext>Comment on attachment 375699
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/page/History.h:56
&gt;&gt;&gt;&gt; +    JSValueInWrappedObject&amp; cachedStateForGC() { return m_cachedState; }
&gt;&gt;&gt; 
&gt;&gt;&gt; I think we decided to call functions like this cachedStateIfExists().
&gt;&gt; 
&gt;&gt; I prefer cachedForGC() given what it&apos;s used for. Also note that the existing cachedState() method is NOT an &quot;ensure&quot; method, it actually clears m_cachedState when it is out of date.
&gt; 
&gt; Given the specific behavior, another accurate name besides cachedStateForGC could be cachedStateWithoutRevalidation.
&gt; 
&gt; As I said, it might be more important to come up with a great idiom for correctly using JSValueInWrappedObject; I’m irritated that it’s easy to accidentally use it wrong, and there might be a simple way to make it better.

In the past, I&apos;ve suggested using suffix &quot;concurrently&quot; since what&apos;s significant here is the fact it can be called concurrently not so much that it&apos;s used by GC.
Someone may come to this code and change it again to be something not thread safe in the future again if the person didn&apos;t understand that our GC does things concurrently.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375699</attachid>
            <date>2019-08-07 08:32:28 -0700</date>
            <delta_ts>2019-08-07 10:31:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200504-20190807083227.patch</filename>
            <type>text/plain</type>
            <size>2300</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4MzY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQ2MjFjM2E3MGY5N2Yz
NzZkMzQ1ZDRiOTY4MjdkMDE2Y2UyMzI5Yy4uZjAyZTg4ZjFlODkyMTFjNjMyNjY4ZDgyYWE5ZDIw
YmViMjUwYWRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE5LTA4LTA3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgRml4IHRocmVhZCBzYWZldHkg
aXNzdWUgdW5kZXIgSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbigpCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA1MDQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBKU0hpc3Rvcnk6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKCkgaXMgY2FsbGVkIGZyb20gYSBHQyB0aHJlYWQgYW5kIHdhcyBj
YWxsaW5nCisgICAgICAgIEhpc3Rvcnk6OmNhY2hlZFN0YXRlKCkgd2hvc2UgaW1wbGVtZW50YXRp
b24gZ29lcyBkZWVwIGludG8gV2ViQ29yZQorICAgICAgICAoRnJhbWVMb2FkZXIgLyBIaXN0b3J5
Q29udHJvbGxlcikuIEFtb25nIG90aGVyIHRoaW5ncywgaXQgbnVsbCBjaGVja3MgbV93aW5kb3cK
KyAgICAgICAgd2hpY2ggaXMgYSBXZWFrUHRyIGFuZCB0aGVuIGxhdGVyIGRlcmVmZXJlbmNlcyBp
dCB0byBnZXQgdGhlIEZyYW1lIG9iamVjdCwgd2hpY2gKKyAgICAgICAgaXMgbm90IHNhZmUgZnJv
bSB0aGUgbm9uLW1haW4gdGhyZWFkLgorCisgICAgICAgIFRvIGFkZHJlc3MgdGhlIGlzc3VlLCBp
bnRyb2R1Y2UgYSBzaW1wbGVyIGNhY2hlZFN0YXRlRm9yR0MoKSBnZXR0ZXIgd2hpY2ggaXMKKyAg
ICAgICAgdGhyZWFkIHNhZmUsIGFuZCB1c2UgaXQgaW4gSlNIaXN0b3J5Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbigpLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGlzdG9yeTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4p
OgorICAgICAgICAqIHBhZ2UvSGlzdG9yeS5oOgorCiAyMDE5LTA4LTA3ICBaYWxhbiBCdWp0YXMg
IDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gSW50cm9kdWNlIExheW91dDo6UGhh
c2UgY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9y
eUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20u
Y3BwCmluZGV4IGNhNTE3MzY1MTNiYWUyZTA0ZjVjZjI1ZWQ4OGRiZTlhNjVlZWFhNmMuLjFiYTky
OGU1ZDhjNGU5Y2U2Yzk2MjhlNjJiNDEzYmY5ODhjZGFhY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcApAQCAtNDYsNyArNDYsNyBAQCBKU1Zh
bHVlIEpTSGlzdG9yeTo6c3RhdGUoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIAogdm9pZCBKU0hp
c3Rvcnk6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewot
ICAgIHdyYXBwZWQoKS5jYWNoZWRTdGF0ZSgpLnZpc2l0KHZpc2l0b3IpOworICAgIHdyYXBwZWQo
KS5jYWNoZWRTdGF0ZUZvckdDKCkudmlzaXQodmlzaXRvcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmgKaW5kZXggYzU2NTRiYWUxZWFhZGU5YjUxZDlkZjgz
Njk2ZWIzMDAxMTFhMWYzYS4uMDE1YzY3ZjYzOGZhZTdlYjcwNTliOTg4OTJmMWQ2MWNkM2FjYzBm
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9IaXN0b3J5LmgKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogCiAgICAg
U2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzdGF0ZSgpOwogICAgIEpTVmFsdWVJbldyYXBwZWRPYmpl
Y3QmIGNhY2hlZFN0YXRlKCk7CisgICAgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgY2FjaGVkU3Rh
dGVGb3JHQygpIHsgcmV0dXJuIG1fY2FjaGVkU3RhdGU7IH0KIAogICAgIHZvaWQgYmFjaygpOwog
ICAgIHZvaWQgZm9yd2FyZCgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>