<?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>37181</bug_id>
          
          <creation_ts>2010-04-06 17:52:11 -0700</creation_ts>
          <short_desc>REGRESSION (r54400): Hangs when doing AJAX update with large amount of data</short_desc>
          <delta_ts>2010-04-09 09:35:45 -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 JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://catalog.castle104.com/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Naofumi Kagami">naofumi</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>ap</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>209354</commentid>
    <comment_count>0</comment_count>
    <who name="Naofumi Kagami">naofumi</who>
    <bug_when>2010-04-06 17:52:11 -0700</bug_when>
    <thetext>Regression introduced in Nightly #54415. Works fine with Nightly #54326 and current Safari release.

How to reproduce:

Go to http://catalog.castle104.com/
In the lower portion of the page, scroll down until you see the the link at the bottom which says something like &quot;7594ページすべてのリンクを表示する&quot; (the number may vary). This button sends an AJAX request that returns HTML for more than 7,000 links.

On the current Safari release and Nightly up till #54326, this works fine. However, since Nightly #54415, this hangs WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209428</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-06 20:56:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/7835374&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209779</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-04-07 12:26:25 -0700</bug_when>
    <thetext>~/webkit/JavaScriptCore$ cat /tmp/RealSafari_3191.Ga4mEa.sample.txt 
Analysis of sampling RealSafari (pid 3191) every 1 millisecond
Call graph:
    7757 Thread_115733   DispatchQueue_1: com.apple.main-thread  (serial)
      7756 0x102ec77c0
        7756 JSC::Interpreter::execute(JSC::EvalExecutable*, JSC::ExecState*, JSC::JSObject*, int, JSC::ScopeChainNode*, JSC::JSValue*)
          7756 0x2a7db4cc31fa
            7756 cti_op_put_by_id_generic
              7756 WebCore::JSHTMLDivElement::put(JSC::ExecState*, JSC::Identifier const&amp;, JSC::JSValue, JSC::PutPropertySlot&amp;)
                7756 WebCore::JSHTMLElement::put(JSC::ExecState*, JSC::Identifier const&amp;, JSC::JSValue, JSC::PutPropertySlot&amp;)
                  7756 WebCore::setJSHTMLElementInnerHTML(JSC::ExecState*, JSC::JSObject*, JSC::JSValue)
                    7756 WebCore::HTMLElement::setInnerHTML(WebCore::String const&amp;, int&amp;)
                      7756 WebCore::HTMLElement::createContextualFragment(WebCore::String const&amp;, WebCore::FragmentScriptingPermission)
                        7756 WebCore::Element::createContextualFragment(WebCore::String const&amp;, WebCore::FragmentScriptingPermission)
                          7756 WebCore::parseHTMLDocumentFragment(WebCore::String const&amp;, WebCore::DocumentFragment*, WebCore::FragmentScriptingPermission)
                            7756 WebCore::HTMLTokenizer::write(WebCore::SegmentedString const&amp;, bool)
                              7756 WebCore::HTMLTokenizer::parseTag(WebCore::SegmentedString&amp;, WebCore::HTMLTokenizer::State)
                                7756 WebCore::HTMLTokenizer::processToken()
                                  7756 WebCore::HTMLParser::parseToken(WebCore::Token*)
                                    7756 WebCore::Element::setAttributeMap(WTF::PassRefPtr&lt;WebCore::NamedNodeMap&gt;, WebCore::FragmentScriptingPermission)
                                      7756 WebCore::StyledElement::attributeChanged(WebCore::Attribute*, bool)
                                        7756 WebCore::HTMLAnchorElement::parseMappedAttribute(WebCore::MappedAttribute*)
                                          7756 WebCore::HTMLElement::parseMappedAttribute(WebCore::MappedAttribute*)
                                            7756 WebCore::createAttributeEventListener(WebCore::Node*, WebCore::Attribute*)
                                              7756 WebCore::createWrapper(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WebCore::Node*)
                                                7756 WebCore::createJSHTMLWrapper(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WTF::PassRefPtr&lt;WebCore::HTMLElement&gt;)
                                                  7756 WebCore::createHTMLAnchorElementWrapper(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WTF::PassRefPtr&lt;WebCore::HTMLElement&gt;)
                                                    7756 JSC::Heap::allocate(unsigned long)
                                                      7756 JSC::Heap::reset()
                                                        7756 JSC::Heap::markRoots()
                                                          7756 JSC::Heap::markStackObjectsConservatively(JSC::MarkStack&amp;)
                                                            7756 JSC::Heap::markCurrentThreadConservatively(JSC::MarkStack&amp;)
                                                              7756 JSC::Heap::markCurrentThreadConservativelyInternal(JSC::MarkStack&amp;)
                                                                7756 JSC::Heap::markConservatively(JSC::MarkStack&amp;, void*, void*)
                                                                  7650 JSC::MarkStack::markChildren(JSC::JSCell*)
                                                                    7650 WebCore::JSElement::markChildren(JSC::MarkStack&amp;)
                                                                      7649 WebCore::JSNode::markChildren(JSC::MarkStack&amp;)
                                                                        6708 WebCore::markDOMNodeWrapper(JSC::MarkStack&amp;, WebCore::Document*, WebCore::Node*)
                                                                          4521 WebCore::markDOMNodeWrapper(JSC::MarkStack&amp;, WebCore::Document*, WebCore::Node*)
                                                                          2187 WTF::HashMap&lt;WebCore::Node*, WebCore::JSNode*, WTF::PtrHash&lt;WebCore::Node*&gt;, WTF::HashTraits&lt;WebCore::Node*&gt;, WTF::HashTraits&lt;WebCore::JSNode*&gt; &gt;::get(WebCore::Node* const&amp;) const
                                                                        772 WebCore::Node::traverseNextNode(WebCore::Node const*) const
                                                                        165 WebCore::JSNode::markChildren(JSC::MarkStack&amp;)
                                                                        2 WebCore::Node::eventTargetData()
                                                                          1 WebCore::Node::eventTargetData()
                                                                          1 WebCore::Node::rareData() const
                                                                            1 WTF::HashMap&lt;WebCore::Node const*, WebCore::NodeRareData*, WTF::PtrHash&lt;WebCore::Node const*&gt;, WTF::HashTraits&lt;WebCore::Node const*&gt;, WTF::HashTraits&lt;WebCore::NodeRareData*&gt; &gt;::get(WebCore::Node const* const&amp;) const
                                                                        1 JSC::JSObject::markChildren(JSC::MarkStack&amp;)
                                                                        1 WebCore::hasCachedDOMNodeWrapperUnchecked(WebCore::Document*, WebCore::Node*)
                                                                      1 WebCore::markDOMObjectWrapper(JSC::MarkStack&amp;, JSC::JSGlobalData&amp;, void*)
                                                                        1 WTF::HashMap&lt;void*, WebCore::DOMObject*, WTF::PtrHash&lt;void*&gt;, WTF::HashTraits&lt;void*&gt;, WTF::HashTraits&lt;WebCore::DOMObject*&gt; &gt;::get(void* const&amp;) const
                                                                  106 JSC::Heap::markConservatively(JSC::MarkStack&amp;, void*, void*)
      1 0x841f0f
        1 JSC::JSArray::~JSArray()
          1 0x7bf
            1 JSC::MarkStack::markChildren(JSC::JSCell*)
              1 WebCore::JSElement::markChildren(JSC::MarkStack&amp;)
    7757 Thread_115744   DispatchQueue_2: com.apple.libdispatch-manager  (serial)
      7757 start_wqthread
        7757 _pthread_wqthread
          7757 _dispatch_worker_thread2
            7757 _dispatch_queue_invoke
              7757 _dispatch_mgr_invoke
                7757 kevent
    7757 Thread_115747: WebCore: IconDatabase
      7757 thread_start
        7757 _pthread_start
          7757 WebCore::IconDatabase::iconDatabaseSyncThread()
            7757 WebCore::IconDatabase::syncThreadMainLoop()
              7757 _pthread_cond_wait
                7757 __semwait_signal
    7757 Thread_115749: Safari: SafeBrowsingManager
      7757 thread_start
        7757 _pthread_start
          7757 0x100025873
            7757 0x1000258e3
              7757 CFRunLoopRunSpecific
                7757 __CFRunLoopRun
                  7757 mach_msg
                    7757 mach_msg_trap
    7757 Thread_115750: Safari: SnapshotStore
      7757 thread_start
        7757 _pthread_start
          7757 0x100040f81
            7757 0x100041101
              7757 0x1001a1c21
                7757 WTF::ThreadCondition::timedWait(WTF::Mutex&amp;, double)
                  7757 _pthread_cond_wait
                    7757 __semwait_signal
    7757 Thread_115760
      7757 thread_start
        7757 _pthread_start
          7757 __NSThread__main__
            7757 +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:]
              7757 CFRunLoopRunSpecific
                7757 __CFRunLoopRun
                  7757 mach_msg
                    7757 mach_msg_trap
    7757 Thread_115764
      7757 thread_start
        7757 _pthread_start
          7757 __CFSocketManager
            7757 select$DARWIN_EXTSN
    7756 Thread_115745
      7756 start_wqthread
        7756 _pthread_wqthread
          7756 __workq_kernreturn
    1 Thread_115745   DispatchQueue_24: com.apple.CFURLCACHE_work_queue  (serial)
      1 start_wqthread
        1 _pthread_wqthread
          1 _dispatch_worker_thread2
            1 _dispatch_queue_invoke
              1 _dispatch_queue_drain
                1 _dispatch_queue_invoke
                  1 _dispatch_source_invoke
                    1 __CFURLCacheCreate_block_invoke_3
                      1 _CFURLCacheTimerCallback(void*)
                        1 asl_log
                          1 asl_vlog
                            1 _asl_send_level_message
                              1 notify_get_state
                                1 _notify_server_get_state
                                  1 mach_msg
                                    1 mach_msg_trap

Total number in stack (recursive counted multiple, when &gt;=5):
        5       _pthread_start
        5       thread_start

Sort by top of stack, same collapsed (when &gt;= 5):
        mach_msg_trap        15515
        __semwait_signal        15514
        kevent        7757
        select$DARWIN_EXTSN        7757
        __workq_kernreturn        7756
        WebCore::markDOMNodeWrapper(JSC::MarkStack&amp;, WebCore::Document*, WebCore::Node*)        4521
        WTF::HashMap&lt;WebCore::Node*, WebCore::JSNode*, WTF::PtrHash&lt;WebCore::Node*&gt;, WTF::HashTraits&lt;WebCore::Node*&gt;, WTF::HashTraits&lt;WebCore::JSNode*&gt; &gt;::get(WebCore::Node* const&amp;) const        2187
        WebCore::Node::traverseNextNode(WebCore::Node const*) const        772
        WebCore::JSNode::markChildren(JSC::MarkStack&amp;)        165
        JSC::Heap::markConservatively(JSC::MarkStack&amp;, void*, void*)        106
~/webkit/JavaScriptCore$</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209924</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-07 17:02:52 -0700</bug_when>
    <thetext>This doesn&apos;t look like an infinite loop - just an incredibly slow operation. We do actually return from GC to HTMLTokenizer::write().

It&apos;s much slower in debug builds - due to locking in HashMap checking code, we never return from GC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209952</commentid>
    <comment_count>4</comment_count>
      <attachid>52816</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-07 18:00:04 -0700</bug_when>
    <thetext>Created attachment 52816
reduced test case (will hang)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210212</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-04-08 08:28:45 -0700</bug_when>
    <thetext>One obvious missing optimization here, though probably not the main problem, is that markDOMNodeWrapper is missing the optimization in getCachedDOMNodeWrapper, which, for the normal world, gets a node&apos;s wrapper directly from the node, instead of doing a hash table lookup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210216</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-04-08 08:33:03 -0700</bug_when>
    <thetext>The main problem seems to be that WebCore::markDOMNodeWrapper is called more than once for the same Node*, which probably makes this algorithm n^2 at least.

If you set breakpoints on JSC::Collector::markRoots and WebCore::markDOMNodeWrapper, pick a Node* at random, and do a text search in the scrollback, you&apos;ll see your node appear many times. My current count is 9.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210350</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-08 13:26:02 -0700</bug_when>
    <thetext>Adding a check to JSNode::markChildren fixes this:

    if (Heap::isCellMarked(this))
        return;

I have no idea if it&apos;s a sensible approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210516</commentid>
    <comment_count>8</comment_count>
      <attachid>52926</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-08 18:04:20 -0700</bug_when>
    <thetext>Created attachment 52926
proposed fix

Geoff helped find a better solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210765</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-09 09:35:45 -0700</bug_when>
    <thetext>Fixed in &lt;http://trac.webkit.org/changeset/57340&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>52816</attachid>
            <date>2010-04-07 18:00:04 -0700</date>
            <delta_ts>2010-04-07 18:00:04 -0700</delta_ts>
            <desc>reduced test case (will hang)</desc>
            <filename>main.html</filename>
            <type>text/html</type>
            <size>392</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PGJvZHk+CjxwPlNob3VsZCBzYXkgUEFTUzo8L3A+CjxkaXYgaWQ9dGVzdCBzdHlsZT0iZGlzcGxh
eTpub25lIj48L2Rpdj4KPHNjcmlwdD4KZnVuY3Rpb24gZ2V0U3RyaW5nKGkpCnsKICAgIHJldHVy
biAnPGRpdj4nICsgCiAgICAgICAgJzxhIGhyZWY9IiIgIG9uY2xpY2s9IlByb2R1Y3RQYWdlLmxv
YWRQYWdlKCcgKyBpICsgJyk7IHJldHVybiBmYWxzZTsiPiA8L2E+JyArCiAgICAgICAgJzwvZGl2
Pic7Cn0KCnZhciBzdHJpbmcgPSAiIjsKZm9yIChpID0gMDsgaSA8IDEwMDAwOyArK2kpCiAgICBz
dHJpbmcgKz0gZ2V0U3RyaW5nKGkpOwoKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3QiKS5p
bm5lckhUTUwgPSBzdHJpbmc7Cgo8L3NjcmlwdD4KPHA+UEFTUzwvcD4KPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52926</attachid>
            <date>2010-04-08 18:04:20 -0700</date>
            <delta_ts>2010-04-08 18:17:43 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>GCFreeze.txt</filename>
            <type>text/plain</type>
            <size>5662</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzMxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTAtMDQtMDggIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MTgxCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83ODM1Mzc0PiBSRUdSRVNTSU9OIChyNTQ0MDApOiBIYW5ncyB3aGVuIGRv
aW5nIEFKQVggdXBkYXRlIHdpdGggbGFyZ2UgYW1vdW50IG9mIGRhdGEKKworICAgICAgICBUZXN0
OiBmYXN0L2V2ZW50cy9nYy1mcmVlemUtd2l0aC1hdHRyaWJ1dGUtbGlzdGVuZXJzLmh0bWwKKwor
ICAgICAgICBUaGUgcHJvYmxlbSB3YXMgdGhhdCB3ZSB3ZXJlIGNyZWF0aW5nIEpTIHdyYXBwZXJz
IGZvciBub2RlcyB3aXRoIGF0dHJpYnV0ZSBldmVudCBsaXN0ZW5lcnMsCisgICAgICAgIGFuZCBH
QyBpcyB2ZXJ5IHNsb3cgaWYgdGhlcmUgYXJlIG5vZGVzIHdpdGggd3JhcHBlcnMgaW4gYSBkZXRh
Y2hlZCB0cmVlIHdob3NlIHJvb3QgZG9lcyBub3QKKyAgICAgICAgaGF2ZSBhIHdyYXBwZXIuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcDogKFdlYkNvcmU6
OmNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIpOiBEb24ndCBjcmVhdGUKKyAgICAgICAgd3Jh
cHBlcnMgZm9yIGF0dHJpYnV0ZSBldmVudCBsaXN0ZW5lcnMgLSBpZiB0aGVyZSBpcyBhIG5vZGUs
IEpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0Z1bmN0aW9uKCkKKyAgICAgICAgd2ls
bCBjcmVhdGUgb25lLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcDog
KFdlYkNvcmU6OkpTTm9kZTo6bWFya0NoaWxkcmVuKTogQWRkZWQgYSBGSVhNRSBhYm91dCB0aGUg
cHJvYmxlbQorICAgICAgICB3ZSBhcmUgc3RlcHBpbmcgYXJvdW5kIG5vdy4KKwogMjAxMC0wMy0y
OSAgQW50b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5j
cHAJKHJldmlzaW9uIDU3Mjg0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNiArMTYyLDggQEAgdm9pZCBKU05vZGU6Om1hcmtD
aGlsZHJlbihNYXJrU3RhY2smIG1hcgogICAgIC8vIGNhc2UsIHRoZSByb290IG9mIHRoZSBkZXRh
Y2hlZCBzdWJ0cmVlIGhhcyBhIHdyYXBwZXIsIHNvIHRoZSB0cmVlIHdpbGwgb25seQogICAgIC8v
IGdldCBtYXJrZWQgb25jZS4gTm9kZXMgdGhhdCBhcmVuJ3Qgb3V0ZXJtb3N0IG5lZWQgdG8gbWFy
ayB0aGUgb3V0ZXJtb3N0CiAgICAgLy8gaW4gY2FzZSBpdCBpcyBvdGhlcndpc2UgdW5yZWFjaGFi
bGUuCisgICAgLy8gRklYTUU6IEluIHRoZSBub24tY29tbW9uIGNhc2Ugb2Ygcm9vdCBub3QgaGF2
aW5nIGEgd3JhcHBlciwgdGhpcyBpcyBzdGlsbCBhbiBPKG5eMikgYWxnb3JpdGhtLAorICAgIC8v
IGFzIHdlIHdpbGwgdHJhdmVyc2UgdGhlIHdob2xlIHRyZWUgYXMgbWFueSB0aW1lcyBhcyB0aGVy
ZSBhcmUgbm9kZXMgd2l0aCB3cmFwcGVycyBpbiBpdC4KICAgICBpZiAobm9kZSAhPSBvdXRlcm1v
c3ROb2RlV2l0aFdyYXBwZXIpIHsKICAgICAgICAgbWFya0RPTU5vZGVXcmFwcGVyKG1hcmtTdGFj
aywgbV9pbXBsLT5kb2N1bWVudCgpLCBvdXRlcm1vc3ROb2RlV2l0aFdyYXBwZXIpOwogICAgICAg
ICByZXR1cm47CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5l
ci5jcHAJKHJldmlzaW9uIDU3Mjg0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRFdmVu
dExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNiBAQCBQYXNzUmVmUHRy
PEpTTGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUF0CiAKICAgICBpbnQgbGluZU51bWJlciA9IDE7
CiAgICAgU3RyaW5nIHNvdXJjZVVSTDsKLSAgICBKU09iamVjdCogd3JhcHBlciA9IDA7CiAgICAg
CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHByb3ZpZGUgYWNjdXJhdGUgc291
cmNlIGluZm9ybWF0aW9uIGZvciBmcmFtZWxlc3MgZG9jdW1lbnRzLCB0b28gKGUuZy4gZm9yIGlt
cG9ydGluZyBub2RlcyBmcm9tIFhNTEh0dHBSZXF1ZXN0LnJlc3BvbnNlWE1MKS4KICAgICBpZiAo
RnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewpAQCAtNzQsMTMgKzcz
LDkgQEAgUGFzc1JlZlB0cjxKU0xhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdAogCiAgICAgICAg
IGxpbmVOdW1iZXIgPSBzY3JpcHRDb250cm9sbGVyLT5ldmVudEhhbmRsZXJMaW5lTnVtYmVyKCk7
CiAgICAgICAgIHNvdXJjZVVSTCA9IG5vZGUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpOwot
Ci0gICAgICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAg
ICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3Qo
bm9kZS0+ZG9jdW1lbnQoKSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwotICAgICAgICB3cmFw
cGVyID0gYXNPYmplY3QodG9KUyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2Jq
ZWN0LCBub2RlKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTTGF6eUV2ZW50TGlzdGVuZXI6OmNy
ZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgZXZlbnRQYXJhbWV0ZXJOYW1lKG5vZGUt
PmlzU1ZHRWxlbWVudCgpKSwgYXR0ci0+dmFsdWUoKSwgbm9kZSwgc291cmNlVVJMLCBsaW5lTnVt
YmVyLCB3cmFwcGVyLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgcmV0dXJuIEpTTGF6
eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgZXZlbnRQ
YXJhbWV0ZXJOYW1lKG5vZGUtPmlzU1ZHRWxlbWVudCgpKSwgYXR0ci0+dmFsdWUoKSwgbm9kZSwg
c291cmNlVVJMLCBsaW5lTnVtYmVyLCAwLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiB9CiAK
IFBhc3NSZWZQdHI8SlNMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0
ZW5lcihGcmFtZSogZnJhbWUsIEF0dHJpYnV0ZSogYXR0cikKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU3
MzExKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTAtMDQtMDggIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MTgxCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS83ODM1Mzc0PiBSRUdSRVNTSU9OIChyNTQ0MDApOiBIYW5ncyB3aGVuIGRvaW5nIEFKQVgg
dXBkYXRlIHdpdGggbGFyZ2UgYW1vdW50IG9mIGRhdGEKKworICAgICAgICAqIGZhc3QvZXZlbnRz
L2djLWZyZWV6ZS13aXRoLWF0dHJpYnV0ZS1saXN0ZW5lcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2V2ZW50cy9nYy1mcmVlemUtd2l0aC1hdHRyaWJ1dGUtbGlzdGVuZXJz
Lmh0bWw6IEFkZGVkLgorCiAyMDEwLTA0LTA4ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL2djLWZyZWV6ZS13aXRoLWF0dHJpYnV0ZS1saXN0ZW5lcnMtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2djLWZyZWV6ZS13aXRo
LWF0dHJpYnV0ZS1saXN0ZW5lcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvZ2MtZnJlZXplLXdpdGgtYXR0cmlidXRlLWxpc3RlbmVycy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorU2hvdWxkIHNheSBQQVNTOgor
CitQQVNTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9nYy1mcmVlemUtd2l0aC1hdHRy
aWJ1dGUtbGlzdGVuZXJzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvZ2MtZnJlZXplLXdpdGgtYXR0cmlidXRlLWxpc3RlbmVycy5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZ2MtZnJlZXplLXdpdGgtYXR0cmlidXRlLWxpc3Rl
bmVycy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACis8Ym9keT4KKzxwPlNob3Vs
ZCBzYXkgUEFTUzo8L3A+Cis8ZGl2IGlkPXRlc3Qgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9kaXY+
Cis8c2NyaXB0PgorZnVuY3Rpb24gZ2MoKQoreworICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVy
KQorICAgICAgICByZXR1cm4gR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeyAvLyA+IGZvcmNlIGdhcmJhZ2UgY29sbGVjdGlvbiAo
RkYgcmVxdWlyZXMgYWJvdXQgOUsgYWxsb2NhdGlvbnMgYmVmb3JlIGEgY29sbGVjdCkKKyAgICAg
ICAgdmFyIHMgPSBuZXcgU3RyaW5nKCIiKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGdldFN0cmlu
ZyhpKQoreworICAgIHJldHVybiAnPGRpdj4nICsgCisgICAgICAgICc8YSBocmVmPSIiICBvbmNs
aWNrPSJyZXR1cm4gZmFsc2U7Ij4gPC9hPicgKworICAgICAgICAnPC9kaXY+JzsKK30KKworaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisKK3ZhciBzdHJpbmcgPSAiIjsKK2ZvciAoaSA9IDA7IGkgPCAxMDAwMDsg
KytpKQorICAgIHN0cmluZyArPSBnZXRTdHJpbmcoaSk7CisKK2RvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJ0ZXN0IikuaW5uZXJIVE1MID0gc3RyaW5nOworCitnYygpOworCis8L3NjcmlwdD4KKzxw
PlBBU1M8L3A+Cis8L2JvZHk+Cg==
</data>
<flag name="review"
          id="36542"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>