<?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>224893</bug_id>
          
          <creation_ts>2021-04-21 13:57:38 -0700</creation_ts>
          <short_desc>Nullptr crash in DeleteSelectionCommand::removeNode</short_desc>
          <delta_ts>2021-05-07 14:54:12 -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>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cgarcia</cc>
    
    <cc>ews-feeder</cc>
    
    <cc>fred.wang</cc>
    
    <cc>gpoo</cc>
    
    <cc>product-security</cc>
    
    <cc>rbuis</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1752912</commentid>
    <comment_count>0</comment_count>
      <attachid>426741</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-21 13:57:38 -0700</bug_when>
    <thetext>Created attachment 426741
Test

e.g.

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.WebCore             	0x00000005693d8608 WebCore::Node::treeScope() const + 24 (Node.h:358)
1   com.apple.WebCore             	0x00000005693bfbc5 WebCore::Node::document() const + 21 (Node.h:354)
2   com.apple.WebCore             	0x000000056c2bd562 WebCore::Node::computeEditability(WebCore::Node::UserSelectAllTreatment, WebCore::Node::ShouldUpdateStyle) const + 34 (Node.cpp:783)
3   com.apple.WebCore             	0x000000056b93fde0 WebCore::Node::hasEditableStyle(WebCore::Node::UserSelectAllTreatment) const + 32 (Node.h:331)
4   com.apple.WebCore             	0x000000056c4290cf WebCore::DeleteSelectionCommand::removeNode(WebCore::Node&amp;, WebCore::ShouldAssumeContentIsAlwaysEditable) + 207 (DeleteSelectionCommand.cpp:438)
5   com.apple.WebCore             	0x000000056c429fe5 WebCore::DeleteSelectionCommand::handleGeneralDelete() + 1861 (DeleteSelectionCommand.cpp:611)
6   com.apple.WebCore             	0x000000056c42ce5d WebCore::DeleteSelectionCommand::doApply() + 1181 (DeleteSelectionCommand.cpp:939)
7   com.apple.WebCore             	0x000000056c40b44f WebCore::CompositeEditCommand::applyCommandToComposite(WTF::Ref&lt;WebCore::EditCommand, WTF::RawPtrTraits&lt;WebCore::EditCommand&gt; &gt;&amp;&amp;) + 63 (CompositeEditCommand.cpp:488)
8   com.apple.WebCore             	0x000000056c408007 WebCore::CompositeEditCommand::deleteSelection(bool, bool, bool, bool, bool) + 311 (CompositeEditCommand.cpp:857)
9   com.apple.WebCore             	0x000000056c494fbf WebCore::InsertTextCommand::doApply() + 319 (InsertTextCommand.cpp:143)
10  com.apple.WebCore             	0x000000056c40b7a5 WebCore::CompositeEditCommand::applyCommandToComposite(WTF::Ref&lt;WebCore::CompositeEditCommand, WTF::RawPtrTraits&lt;WebCore::CompositeEditCommand&gt; &gt;&amp;&amp;, WebCore::VisibleSelection const&amp;) + 165 (CompositeEditCommand.cpp:503)
11  com.apple.WebCore             	0x000000056c4d7354 WebCore::TypingCommand::insertTextRunWithoutNewlines(WTF::String const&amp;, bool) + 244 (TypingCommand.cpp:540)
12  com.apple.WebCore             	0x000000056c4fb2da WebCore::TypingCommandLineOperation::operator()(unsigned long, unsigned long, bool) const + 138 (TypingCommand.cpp:69)
13  com.apple.WebCore             	0x000000056c4d721a void WebCore::forEachLineInString&lt;WebCore::TypingCommandLineOperation&gt;(WTF::String const&amp;, WebCore::TypingCommandLineOperation const&amp;) + 154 (TextInsertionBaseCommand.h:60)
14  com.apple.WebCore             	0x000000056c4d712c WebCore::TypingCommand::insertText(WTF::String const&amp;, bool) + 60 (TypingCommand.cpp:519)
15  com.apple.WebCore             	0x000000056c4d5c34 WebCore::TypingCommand::insertTextAndNotifyAccessibility(WTF::String const&amp;, bool) + 164 (TypingCommand.cpp:527)
16  com.apple.WebCore             	0x000000056c4d67e2 WebCore::TypingCommand::doApply() + 354 (TypingCommand.cpp:380)
17  com.apple.WebCore             	0x000000056c3f6a2c WebCore::CompositeEditCommand::apply() + 412 (CompositeEditCommand.cpp:397)
18  com.apple.WebCore             	0x000000056c4c3763 WebCore::TextInsertionBaseCommand::applyTextInsertionCommand(WebCore::Frame*, WebCore::TextInsertionBaseCommand&amp;, WebCore::VisibleSelection const&amp;, WebCore::VisibleSelection const&amp;) + 99 (TextInsertionBaseCommand.cpp:50)
19  com.apple.WebCore             	0x000000056c4d5b27 WebCore::TypingCommand::insertText(WebCore::Document&amp;, WTF::String const&amp;, WebCore::VisibleSelection const&amp;, unsigned int, WebCore::TypingCommand::TextCompositionType) + 631 (TypingCommand.cpp:259)
20  com.apple.WebCore             	0x000000056c4d58a3 WebCore::TypingCommand::insertText(WebCore::Document&amp;, WTF::String const&amp;, unsigned int, WebCore::TypingCommand::TextCompositionType) + 147 (TypingCommand.cpp:229)
21  com.apple.WebCore             	0x000000056c47c924 WebCore::executeInsertText(WebCore::Frame&amp;, WebCore::Event*, WebCore::EditorCommandSource, WTF::String const&amp;) + 52 (EditorCommand.cpp:525)
22  com.apple.WebCore             	0x000000056c454f3b WebCore::Editor::Command::execute(WTF::String const&amp;, WebCore::Event*) const + 235 (EditorCommand.cpp:1860)
23  com.apple.WebCore             	0x000000056c1569a5 WebCore::Document::execCommand(WTF::String const&amp;, bool, WTF::String const&amp;) + 85 (Document.cpp:5708)
24  com.apple.WebCore             	0x0000000569b2c454 WebCore::jsDocumentPrototypeFunction_execCommandBody(JSC::JSGlobalObject*, JSC::CallFrame*, WebCore::JSDocument*) + 1636 (JSDocument.cpp:5869)
25  com.apple.WebCore             	0x0000000569b2bdbc long long WebCore::IDLOperation&lt;WebCore::JSDocument&gt;::call&lt;&amp;(WebCore::jsDocumentPrototypeFunction_execCommandBody(JSC::JSGlobalObject*, JSC::CallFrame*, WebCore::JSDocument*)), (WebCore::CastedThisErrorBehavior)0&gt;(JSC::JSGlobalObject&amp;, JSC::CallFrame&amp;, char const*) + 700 (JSDOMOperation.h:55)
26  com.apple.WebCore             	0x0000000569b14924 WebCore::jsDocumentPrototypeFunction_execCommand(JSC::JSGlobalObject*, JSC::CallFrame*) + 36 (JSDocument.cpp:5874)
27  ???                           	0x00003c836b8011d8 0 + 66535141937624
28  com.apple.JavaScriptCore      	0x000000058711f80c llint_entry + 138578 (LowLevelInterpreter.asm:1097)
29  com.apple.JavaScriptCore      	0x00000005870fd7c0 vmEntryToJavaScript + 289 (LowLevelInterpreter64.asm:316)
30  com.apple.JavaScriptCore      	0x0000000587fdd48b JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) + 235 (JITCodeInlines.h:42)
31  com.apple.JavaScriptCore      	0x0000000587fddbec JSC::Interpreter::executeCall(JSC::JSGlobalObject*, JSC::JSObject*, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) + 1724 (Interpreter.cpp:902)
32  com.apple.JavaScriptCore      	0x000000058836278d JSC::call(JSC::JSGlobalObject*, JSC::JSValue, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) + 221 (CallData.cpp:57)
33  com.apple.JavaScriptCore      	0x000000058836286f JSC::call(JSC::JSGlobalObject*, JSC::JSValue, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) + 207 (CallData.cpp:64)
34  com.apple.JavaScriptCore      	0x0000000588362b52 JSC::profiledCall(JSC::JSGlobalObject*, JSC::ProfilingReason, JSC::JSValue, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) + 130 (CallData.cpp:85)
35  com.apple.WebCore             	0x000000056bb0c51e WebCore::JSExecState::profiledCall(JSC::JSGlobalObject*, JSC::ProfilingReason, JSC::JSValue, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) + 110 (JSExecState.h:73)
36  com.apple.WebCore             	0x000000056bbbf6b0 WebCore::ScheduledAction::executeFunctionInContext(JSC::JSGlobalObject*, JSC::JSValue, WebCore::ScriptExecutionContext&amp;) + 992 (ScheduledAction.cpp:121)
37  com.apple.WebCore             	0x000000056bbbf0e5 WebCore::ScheduledAction::execute(WebCore::Document&amp;) + 277 (ScheduledAction.cpp:141)
38  com.apple.WebCore             	0x000000056bbbefa3 WebCore::ScheduledAction::execute(WebCore::ScriptExecutionContext&amp;) + 67 (ScheduledAction.cpp:86)
39  com.apple.WebCore             	0x000000056ceab5c7 WebCore::DOMTimer::fired() + 1063 (DOMTimer.cpp:337)

&lt;rdar://76946927&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754162</commentid>
    <comment_count>1</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-04-26 05:43:46 -0700</bug_when>
    <thetext>The crash is in DeleteSelectionCommand::removeNode() in line:

if (!node.parentNode()-&gt;hasEditableStyle()) {

because parentNode() is nullptr. This is happening because CompositeEditCommand::removeNode() is called twice for both the embed element and the input element. The second time it&apos;s called for the input element, it has already been removed from the tree, so parent is nullptr. And the reason why it&apos;s called twice for the same nodes is the weird thing here. There are two calls to InsertText, but the second one happens before the first one has finished, so the tree is in inconsistent state. I suspect it might be a bug in WTR because that doesn&apos;t happen when running in MiniBrowser. From MiniBrowser the second InsertText command is executed after the first one (as expected) and doesn&apos;t clear the selection, because it was already cleared by the previous one. Note that it doesn&apos;t happen from WTR if we add a waitUntilDone() at the end of the script and call notifyDone() after the InsertText in the timeout function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754467</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-26 18:11:35 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #1)
&gt; The crash is in DeleteSelectionCommand::removeNode() in line:
&gt; 
&gt; if (!node.parentNode()-&gt;hasEditableStyle()) {
&gt; 
&gt; because parentNode() is nullptr. This is happening because
&gt; CompositeEditCommand::removeNode() is called twice for both the embed
&gt; element and the input element. The second time it&apos;s called for the input
&gt; element, it has already been removed from the tree, so parent is nullptr.
&gt; And the reason why it&apos;s called twice for the same nodes is the weird thing
&gt; here. There are two calls to InsertText, but the second one happens before
&gt; the first one has finished, so the tree is in inconsistent state.

That happens all the time with editing tests because various editing code triggers a synchronous layout update, which can end up executing scripts.

&gt; I suspect it might be a bug in WTR because that doesn&apos;t happen when running in
&gt; MiniBrowser. From MiniBrowser the second InsertText command is executed
&gt; after the first one (as expected) and doesn&apos;t clear the selection, because
&gt; it was already cleared by the previous one. Note that it doesn&apos;t happen from
&gt; WTR if we add a waitUntilDone() at the end of the script and call
&gt; notifyDone() after the InsertText in the timeout function.

Hm... maybe? If it&apos;s the timing of when notifyDone is called, then I&apos;m not sure if there is an easy way to fix that since a lot of tests depend on the exact timing of notifyDone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754512</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-04-27 00:19:49 -0700</bug_when>
    <thetext>It&apos;s not exactly an problem of when notifyDone is called, current test doesn&apos;t call notifyDone at all, since a timer is used, the timer is executed after the page has loaded. WTR finishes the test on page loaded when there&apos;s no waitUntilDone/notifyDone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754535</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-27 02:54:07 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #3)
&gt; It&apos;s not exactly an problem of when notifyDone is called, current test
&gt; doesn&apos;t call notifyDone at all, since a timer is used, the timer is executed
&gt; after the page has loaded. WTR finishes the test on page loaded when there&apos;s
&gt; no waitUntilDone/notifyDone.

Ok, then I don&apos;t think this is an issue with WTR. It&apos;s well understood that invoking execCommand can invoke another execCommand in the middle of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754986</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-04-28 04:08:13 -0700</bug_when>
    <thetext>What makes the difference in WTR is the force repaint that happens before dumping the results. That&apos;s the one causing the second InsertText to be executed while the first one hasn&apos;t finished yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754988</commentid>
    <comment_count>6</comment_count>
      <attachid>427253</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-04-28 04:23:48 -0700</bug_when>
    <thetext>Created attachment 427253
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755205</commentid>
    <comment_count>7</comment_count>
      <attachid>427253</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-28 16:00:50 -0700</bug_when>
    <thetext>Comment on attachment 427253
Patch

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

&gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:515
&gt; +    if (!node.nonShadowBoundaryParentNode())
&gt; +        return;

Why nonShadowBoundaryParentNode() instead of parentNode()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755309</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-04-29 00:34:56 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #7)
&gt; Comment on attachment 427253 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=427253&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:515
&gt; &gt; +    if (!node.nonShadowBoundaryParentNode())
&gt; &gt; +        return;
&gt; 
&gt; Why nonShadowBoundaryParentNode() instead of parentNode()?

It&apos;s what CompositeEditCommand::removeNode() does, so I assumed that&apos;s what we want here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755313</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-29 01:30:08 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #8)
&gt; (In reply to Ryosuke Niwa from comment #7)
&gt; &gt; Comment on attachment 427253 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=427253&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:515
&gt; &gt; &gt; +    if (!node.nonShadowBoundaryParentNode())
&gt; &gt; &gt; +        return;
&gt; &gt; 
&gt; &gt; Why nonShadowBoundaryParentNode() instead of parentNode()?
&gt; 
&gt; It&apos;s what CompositeEditCommand::removeNode() does, so I assumed that&apos;s what
&gt; we want here too.

Hm... the only difference will be that this will return nullptr when the parent is a shadow root. I don&apos;t think that&apos;ll make a difference here. That function was introduced back when Google was first implementing the shadow DOM API as a blanket replacement for parentNode to avoid issues in the editing code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755314</commentid>
    <comment_count>10</comment_count>
      <attachid>427253</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-29 01:31:06 -0700</bug_when>
    <thetext>Comment on attachment 427253
Patch

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

&gt; Source/WebCore/ChangeLog:7
&gt; +

This is not a security bug, right? Can we add a test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755317</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-04-29 01:56:56 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #9)
&gt; (In reply to Carlos Garcia Campos from comment #8)
&gt; &gt; (In reply to Ryosuke Niwa from comment #7)
&gt; &gt; &gt; Comment on attachment 427253 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=427253&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:515
&gt; &gt; &gt; &gt; +    if (!node.nonShadowBoundaryParentNode())
&gt; &gt; &gt; &gt; +        return;
&gt; &gt; &gt; 
&gt; &gt; &gt; Why nonShadowBoundaryParentNode() instead of parentNode()?
&gt; &gt; 
&gt; &gt; It&apos;s what CompositeEditCommand::removeNode() does, so I assumed that&apos;s what
&gt; &gt; we want here too.
&gt; 
&gt; Hm... the only difference will be that this will return nullptr when the
&gt; parent is a shadow root. I don&apos;t think that&apos;ll make a difference here. That
&gt; function was introduced back when Google was first implementing the shadow
&gt; DOM API as a blanket replacement for parentNode to avoid issues in the
&gt; editing code.

Ok, I&apos;ll use parentNode() then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755318</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-04-29 01:57:15 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #10)
&gt; Comment on attachment 427253 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=427253&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:7
&gt; &gt; +
&gt; 
&gt; This is not a security bug, right? Can we add a test?

It&apos;s a use after free</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755319</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-04-29 01:59:51 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #12)
&gt; (In reply to Ryosuke Niwa from comment #10)
&gt; &gt; Comment on attachment 427253 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=427253&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:7
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; This is not a security bug, right? Can we add a test?
&gt; 
&gt; It&apos;s a use after free

I&apos;m not sure why though, but looking at the backtrace the hasEditableStyle() is called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755323</commentid>
    <comment_count>14</comment_count>
      <attachid>427331</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-04-29 02:20:39 -0700</bug_when>
    <thetext>Created attachment 427331
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755330</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-29 02:57:04 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #13)
&gt; (In reply to Carlos Garcia Campos from comment #12)
&gt; &gt; (In reply to Ryosuke Niwa from comment #10)
&gt; &gt; &gt; Comment on attachment 427253 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=427253&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/ChangeLog:7
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; 
&gt; &gt; &gt; This is not a security bug, right? Can we add a test?
&gt; &gt; 
&gt; &gt; It&apos;s a use after free
&gt; 
&gt; I&apos;m not sure why though, but looking at the backtrace the hasEditableStyle()
&gt; is called.

Could you figure out why it&apos;s a use-after-free? We probably need to put more Ref/RefPtr somewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755337</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-04-29 03:38:52 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #15)
&gt; (In reply to Carlos Garcia Campos from comment #13)
&gt; &gt; (In reply to Carlos Garcia Campos from comment #12)
&gt; &gt; &gt; (In reply to Ryosuke Niwa from comment #10)
&gt; &gt; &gt; &gt; Comment on attachment 427253 [details]
&gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; View in context:
&gt; &gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=427253&amp;action=review
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/WebCore/ChangeLog:7
&gt; &gt; &gt; &gt; &gt; +
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; This is not a security bug, right? Can we add a test?
&gt; &gt; &gt; 
&gt; &gt; &gt; It&apos;s a use after free
&gt; &gt; 
&gt; &gt; I&apos;m not sure why though, but looking at the backtrace the hasEditableStyle()
&gt; &gt; is called.
&gt; 
&gt; Could you figure out why it&apos;s a use-after-free? We probably need to put more
&gt; Ref/RefPtr somewhere.

In my case the bt finishes in:

#0  0x00007f0d04748db0 in WebCore::Node::computeEditability(WebCore::Node::UserSelectAllTreatment, WebCore::Node::ShouldUpdateStyle) const ()

it doesn&apos;t get that far, so the node isn&apos;t actually used. Maybe it depends on the compiler?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755451</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-29 10:43:16 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #16)
&gt;
&gt; &gt; Could you figure out why it&apos;s a use-after-free? We probably need to put more
&gt; &gt; Ref/RefPtr somewhere.
&gt; 
&gt; In my case the bt finishes in:
&gt; 
&gt; #0  0x00007f0d04748db0 in
&gt; WebCore::Node::computeEditability(WebCore::Node::UserSelectAllTreatment,
&gt; WebCore::Node::ShouldUpdateStyle) const ()
&gt; 
&gt; it doesn&apos;t get that far, so the node isn&apos;t actually used. Maybe it depends
&gt; on the compiler?

So presumably you&apos;re seeing an ASAN failures? Could you post the full ASAN stack?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755629</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-04-30 00:42:00 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #17)
&gt; (In reply to Carlos Garcia Campos from comment #16)
&gt; &gt;
&gt; &gt; &gt; Could you figure out why it&apos;s a use-after-free? We probably need to put more
&gt; &gt; &gt; Ref/RefPtr somewhere.
&gt; &gt; 
&gt; &gt; In my case the bt finishes in:
&gt; &gt; 
&gt; &gt; #0  0x00007f0d04748db0 in
&gt; &gt; WebCore::Node::computeEditability(WebCore::Node::UserSelectAllTreatment,
&gt; &gt; WebCore::Node::ShouldUpdateStyle) const ()
&gt; &gt; 
&gt; &gt; it doesn&apos;t get that far, so the node isn&apos;t actually used. Maybe it depends
&gt; &gt; on the compiler?
&gt; 
&gt; So presumably you&apos;re seeing an ASAN failures? Could you post the full ASAN
&gt; stack?

Aha, that must be the difference, my build is a normal release build, not asan.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756402</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-03 18:23:25 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #18)
&gt; (In reply to Ryosuke Niwa from comment #17)
&gt; &gt; (In reply to Carlos Garcia Campos from comment #16)
&gt; &gt; &gt;
&gt; &gt; &gt; &gt; Could you figure out why it&apos;s a use-after-free? We probably need to put more
&gt; &gt; &gt; &gt; Ref/RefPtr somewhere.
&gt; &gt; &gt; 
&gt; &gt; &gt; In my case the bt finishes in:
&gt; &gt; &gt; 
&gt; &gt; &gt; #0  0x00007f0d04748db0 in
&gt; &gt; &gt; WebCore::Node::computeEditability(WebCore::Node::UserSelectAllTreatment,
&gt; &gt; &gt; WebCore::Node::ShouldUpdateStyle) const ()
&gt; &gt; &gt; 
&gt; &gt; &gt; it doesn&apos;t get that far, so the node isn&apos;t actually used. Maybe it depends
&gt; &gt; &gt; on the compiler?
&gt; &gt; 
&gt; &gt; So presumably you&apos;re seeing an ASAN failures? Could you post the full ASAN
&gt; &gt; stack?
&gt; 
&gt; Aha, that must be the difference, my build is a normal release build, not
&gt; asan.

If you&apos;re using non-ASAN builds, how did you determine that this is a use-after-free?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756459</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-05-04 00:26:11 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #19)
&gt; (In reply to Carlos Garcia Campos from comment #18)
&gt; &gt; (In reply to Ryosuke Niwa from comment #17)
&gt; &gt; &gt; (In reply to Carlos Garcia Campos from comment #16)
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; &gt; Could you figure out why it&apos;s a use-after-free? We probably need to put more
&gt; &gt; &gt; &gt; &gt; Ref/RefPtr somewhere.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; In my case the bt finishes in:
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; #0  0x00007f0d04748db0 in
&gt; &gt; &gt; &gt; WebCore::Node::computeEditability(WebCore::Node::UserSelectAllTreatment,
&gt; &gt; &gt; &gt; WebCore::Node::ShouldUpdateStyle) const ()
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; it doesn&apos;t get that far, so the node isn&apos;t actually used. Maybe it depends
&gt; &gt; &gt; &gt; on the compiler?
&gt; &gt; &gt; 
&gt; &gt; &gt; So presumably you&apos;re seeing an ASAN failures? Could you post the full ASAN
&gt; &gt; &gt; stack?
&gt; &gt; 
&gt; &gt; Aha, that must be the difference, my build is a normal release build, not
&gt; &gt; asan.
&gt; 
&gt; If you&apos;re using non-ASAN builds, how did you determine that this is a
&gt; use-after-free?

Because fo the backtrace you posted in bug description.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756666</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-04 14:04:13 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #20)
&gt; (In reply to Ryosuke Niwa from comment #19)
&gt; &gt; (In reply to Carlos Garcia Campos from comment #18)
&gt; &gt; &gt; (In reply to Ryosuke Niwa from comment #17)
&gt; &gt; &gt; &gt; (In reply to Carlos Garcia Campos from comment #16)
&gt; &gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; &gt; &gt; Could you figure out why it&apos;s a use-after-free? We probably need to put more
&gt; &gt; &gt; &gt; &gt; &gt; Ref/RefPtr somewhere.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; In my case the bt finishes in:
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; #0  0x00007f0d04748db0 in
&gt; &gt; &gt; &gt; &gt; WebCore::Node::computeEditability(WebCore::Node::UserSelectAllTreatment,
&gt; &gt; &gt; &gt; &gt; WebCore::Node::ShouldUpdateStyle) const ()
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; it doesn&apos;t get that far, so the node isn&apos;t actually used. Maybe it depends
&gt; &gt; &gt; &gt; &gt; on the compiler?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; So presumably you&apos;re seeing an ASAN failures? Could you post the full ASAN
&gt; &gt; &gt; &gt; stack?
&gt; &gt; &gt; 
&gt; &gt; &gt; Aha, that must be the difference, my build is a normal release build, not
&gt; &gt; &gt; asan.
&gt; &gt; 
&gt; &gt; If you&apos;re using non-ASAN builds, how did you determine that this is a
&gt; &gt; use-after-free?
&gt; 
&gt; Because of the backtrace you posted in bug description.

I don&apos;t understand. I don&apos;t think there is any indiction that this is a UAF based on the backtrace.

We&apos;re crashing here:

void DeleteSelectionCommand::removeNode(Node&amp; node, ShouldAssumeContentIsAlwaysEditable shouldAssumeContentIsAlwaysEditable)
{
    Ref&lt;Node&gt; protectedNode = node;
    if (m_startRoot != m_endRoot &amp;&amp; !(node.isDescendantOf(m_startRoot.get()) &amp;&amp; node.isDescendantOf(m_endRoot.get()))) {
        // If a node is not in both the start and end editable roots, remove it only if its inside an editable region.
        if (!node.parentNode()-&gt;hasEditableStyle()) { // &lt;- this line.


There is protectedNode which refs this node. Here, the issue is that parentNode() is null. treeScope() is where we crash since that&apos;s the first place in computeEditability that dereferences &quot;this&quot; inside document().


Node::Editability Node::computeEditability(UserSelectAllTreatment treatment, ShouldUpdateStyle shouldUpdateStyle) const
{
    if (!document().hasLivingRenderTree() || isPseudoElement())
        return Editability::ReadOnly;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756667</commentid>
    <comment_count>22</comment_count>
      <attachid>427331</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-04 14:04:55 -0700</bug_when>
    <thetext>Comment on attachment 427331
Patch

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

&gt; Source/WebCore/ChangeLog:7
&gt; +

At this point, I&apos;m pretty sure there is no use-after-free here.
Please add a test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756805</commentid>
    <comment_count>23</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-05-04 22:24:16 -0700</bug_when>
    <thetext>Ok, the backtrace confused me, sorry. The problem with the test is that this is not reproducible when using waitUntilDone/notifyDone, because it&apos;s the UI process the one triggering the force repaint at a very specific time when he load finishes. If we don&apos;t use the waitUntilDone, with the crash fixed, the timeout will be executed after the test has finished, so I wonder if it might affect the next test run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756821</commentid>
    <comment_count>24</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-04 23:10:31 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #23)
&gt; Ok, the backtrace confused me, sorry. The problem with the test is that this
&gt; is not reproducible when using waitUntilDone/notifyDone, because it&apos;s the UI
&gt; process the one triggering the force repaint at a very specific time when he
&gt; load finishes. If we don&apos;t use the waitUntilDone, with the crash fixed, the
&gt; timeout will be executed after the test has finished, so I wonder if it
&gt; might affect the next test run.

Can we add two test files ~-1.html &amp; ~-2.html, and add a comment saying that ~-1.html passes if we didn&apos;t hit a crash in ~-2.html?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756828</commentid>
    <comment_count>25</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-05-04 23:49:52 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #24)
&gt; (In reply to Carlos Garcia Campos from comment #23)
&gt; &gt; Ok, the backtrace confused me, sorry. The problem with the test is that this
&gt; &gt; is not reproducible when using waitUntilDone/notifyDone, because it&apos;s the UI
&gt; &gt; process the one triggering the force repaint at a very specific time when he
&gt; &gt; load finishes. If we don&apos;t use the waitUntilDone, with the crash fixed, the
&gt; &gt; timeout will be executed after the test has finished, so I wonder if it
&gt; &gt; might affect the next test run.
&gt; 
&gt; Can we add two test files ~-1.html &amp; ~-2.html, and add a comment saying that
&gt; ~-1.html passes if we didn&apos;t hit a crash in ~-2.html?

I&apos;m not sure I get how that could work. How does WTR know it has run two files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756839</commentid>
    <comment_count>26</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-05 01:04:09 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #25)
&gt; (In reply to Ryosuke Niwa from comment #24)
&gt; &gt; (In reply to Carlos Garcia Campos from comment #23)
&gt; &gt; &gt; Ok, the backtrace confused me, sorry. The problem with the test is that this
&gt; &gt; &gt; is not reproducible when using waitUntilDone/notifyDone, because it&apos;s the UI
&gt; &gt; &gt; process the one triggering the force repaint at a very specific time when he
&gt; &gt; &gt; load finishes. If we don&apos;t use the waitUntilDone, with the crash fixed, the
&gt; &gt; &gt; timeout will be executed after the test has finished, so I wonder if it
&gt; &gt; &gt; might affect the next test run.
&gt; &gt; 
&gt; &gt; Can we add two test files ~-1.html &amp; ~-2.html, and add a comment saying that
&gt; &gt; ~-1.html passes if we didn&apos;t hit a crash in ~-2.html?
&gt; 
&gt; I&apos;m not sure I get how that could work. How does WTR know it has run two
&gt; files?

Tests are always ordered in the lexicological order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756840</commentid>
    <comment_count>27</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-05-05 01:08:11 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #26)
&gt; (In reply to Carlos Garcia Campos from comment #25)
&gt; &gt; (In reply to Ryosuke Niwa from comment #24)
&gt; &gt; &gt; (In reply to Carlos Garcia Campos from comment #23)
&gt; &gt; &gt; &gt; Ok, the backtrace confused me, sorry. The problem with the test is that this
&gt; &gt; &gt; &gt; is not reproducible when using waitUntilDone/notifyDone, because it&apos;s the UI
&gt; &gt; &gt; &gt; process the one triggering the force repaint at a very specific time when he
&gt; &gt; &gt; &gt; load finishes. If we don&apos;t use the waitUntilDone, with the crash fixed, the
&gt; &gt; &gt; &gt; timeout will be executed after the test has finished, so I wonder if it
&gt; &gt; &gt; &gt; might affect the next test run.
&gt; &gt; &gt; 
&gt; &gt; &gt; Can we add two test files ~-1.html &amp; ~-2.html, and add a comment saying that
&gt; &gt; &gt; ~-1.html passes if we didn&apos;t hit a crash in ~-2.html?
&gt; &gt; 
&gt; &gt; I&apos;m not sure I get how that could work. How does WTR know it has run two
&gt; &gt; files?
&gt; 
&gt; Tests are always ordered in the lexicological order.

But you should be able to run tests individually. They are supposed to be independent from each other</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756843</commentid>
    <comment_count>28</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-05 01:14:56 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #27)
&gt; (In reply to Ryosuke Niwa from comment #26)
&gt; &gt; (In reply to Carlos Garcia Campos from comment #25)
&gt; &gt; &gt; (In reply to Ryosuke Niwa from comment #24)
&gt; &gt; &gt; &gt; (In reply to Carlos Garcia Campos from comment #23)
&gt; &gt; &gt; &gt; &gt; Ok, the backtrace confused me, sorry. The problem with the test is that this
&gt; &gt; &gt; &gt; &gt; is not reproducible when using waitUntilDone/notifyDone, because it&apos;s the UI
&gt; &gt; &gt; &gt; &gt; process the one triggering the force repaint at a very specific time when he
&gt; &gt; &gt; &gt; &gt; load finishes. If we don&apos;t use the waitUntilDone, with the crash fixed, the
&gt; &gt; &gt; &gt; &gt; timeout will be executed after the test has finished, so I wonder if it
&gt; &gt; &gt; &gt; &gt; might affect the next test run.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Can we add two test files ~-1.html &amp; ~-2.html, and add a comment saying that
&gt; &gt; &gt; &gt; ~-1.html passes if we didn&apos;t hit a crash in ~-2.html?
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m not sure I get how that could work. How does WTR know it has run two
&gt; &gt; &gt; files?
&gt; &gt; 
&gt; &gt; Tests are always ordered in the lexicological order.
&gt; 
&gt; But you should be able to run tests individually. They are supposed to be
&gt; independent from each other

Yeah, so it&apos;s not great but we may not have much choice in this case. It&apos;s definitely a lot better than not adding a test. Have you tried running testRunner.display() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756872</commentid>
    <comment_count>29</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-05-05 02:30:22 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #28)
&gt; (In reply to Carlos Garcia Campos from comment #27)
&gt; &gt; (In reply to Ryosuke Niwa from comment #26)
&gt; &gt; &gt; (In reply to Carlos Garcia Campos from comment #25)
&gt; &gt; &gt; &gt; (In reply to Ryosuke Niwa from comment #24)
&gt; &gt; &gt; &gt; &gt; (In reply to Carlos Garcia Campos from comment #23)
&gt; &gt; &gt; &gt; &gt; &gt; Ok, the backtrace confused me, sorry. The problem with the test is that this
&gt; &gt; &gt; &gt; &gt; &gt; is not reproducible when using waitUntilDone/notifyDone, because it&apos;s the UI
&gt; &gt; &gt; &gt; &gt; &gt; process the one triggering the force repaint at a very specific time when he
&gt; &gt; &gt; &gt; &gt; &gt; load finishes. If we don&apos;t use the waitUntilDone, with the crash fixed, the
&gt; &gt; &gt; &gt; &gt; &gt; timeout will be executed after the test has finished, so I wonder if it
&gt; &gt; &gt; &gt; &gt; &gt; might affect the next test run.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Can we add two test files ~-1.html &amp; ~-2.html, and add a comment saying that
&gt; &gt; &gt; &gt; &gt; ~-1.html passes if we didn&apos;t hit a crash in ~-2.html?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I&apos;m not sure I get how that could work. How does WTR know it has run two
&gt; &gt; &gt; &gt; files?
&gt; &gt; &gt; 
&gt; &gt; &gt; Tests are always ordered in the lexicological order.
&gt; &gt; 
&gt; &gt; But you should be able to run tests individually. They are supposed to be
&gt; &gt; independent from each other
&gt; 
&gt; Yeah, so it&apos;s not great but we may not have much choice in this case. It&apos;s
&gt; definitely a lot better than not adding a test. Have you tried running
&gt; testRunner.display() ?

Yes, I tried that, at different places, but when triggered from the web process, it&apos;s always done when the InsertText command has completed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757041</commentid>
    <comment_count>30</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-05 12:40:48 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #29)
&gt; (In reply to Ryosuke Niwa from comment #28)
&gt; &gt; (In reply to Carlos Garcia Campos from comment #27)
&gt; &gt;
&gt; &gt; Yeah, so it&apos;s not great but we may not have much choice in this case. It&apos;s
&gt; &gt; definitely a lot better than not adding a test. Have you tried running
&gt; &gt; testRunner.display() ?
&gt; 
&gt; Yes, I tried that, at different places, but when triggered from the web
&gt; process, it&apos;s always done when the InsertText command has completed.

Yeah, so in that case, we probably just need to add two files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757371</commentid>
    <comment_count>31</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-05-06 05:58:15 -0700</bug_when>
    <thetext>I have debugged this further. It&apos;s not the UI process causing the force repaint, it happens inside the web process when the main resource load finishes. And the main load finish si caused by the embed element removal caused by the delete selection command. During the command executions, there&apos;s an event scope, so we can&apos;t add a listener for DOMNodeRemoved to force the repaint at that point. I think this bug is impossible to reproduce outside of WTR. What we can do to make a test is to add testRunner API to tell WTR to force a repaint on load finished.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757380</commentid>
    <comment_count>32</comment_count>
      <attachid>427878</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-05-06 06:27:06 -0700</bug_when>
    <thetext>Created attachment 427878
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757529</commentid>
    <comment_count>33</comment_count>
      <attachid>427878</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-06 11:31:53 -0700</bug_when>
    <thetext>Comment on attachment 427878
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Test: editing/inserting/insert-text-force-repaint-on-load-crash.html

Skip the test on WK1 maybe?
Alternatively, you can call testRunner.displayOnLoadFinish conditionally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757839</commentid>
    <comment_count>34</comment_count>
      <attachid>427992</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-05-07 05:06:22 -0700</bug_when>
    <thetext>Created attachment 427992
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757999</commentid>
    <comment_count>35</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-07 14:16:09 -0700</bug_when>
    <thetext>Downloading mechanize-0.4.5...
Installing mechanize-0.4.5...
Installed mechanize-0.4.5!
ChangeLog entry in Tools/ChangeLog contains OOPS!.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758017</commentid>
    <comment_count>36</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-07 14:54:09 -0700</bug_when>
    <thetext>Committed r277202 (237474@main): &lt;https://commits.webkit.org/237474@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 427992.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>426741</attachid>
            <date>2021-04-21 13:57:38 -0700</date>
            <delta_ts>2021-04-21 13:57:38 -0700</delta_ts>
            <desc>Test</desc>
            <filename>repro_616.html</filename>
            <type>text/html</type>
            <size>569</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PHNjcmlwdD4KICBvbmxvYWQgPSAoKSA9PiB7CiAgICBsZXQgbjAgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdlbWJlZCcpOwogICAgbjAuc3JjID0gJyMnOwogICAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChuMCk7CiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSk7CiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpKTsKICAgIGRvY3Vt
ZW50LmV4ZWNDb21tYW5kKCdTZWxlY3RBbGwnKTsKICAgIGRvY3VtZW50LmRlc2lnbk1vZGUgPSAn
b24nOwogICAgbGV0IGFuaW1hdGlvbiA9IG5ldyBBbmltYXRpb24oKTsKICAgIGFuaW1hdGlvbi5v
bmZpbmlzaCA9ICgpID0+IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdJbnNlcnRUZXh0Jyk7CiAgICBz
ZXRUaW1lb3V0KCgpID0+IHsKICAgICAgYW5pbWF0aW9uLnJldmVyc2UoKTsKICAgICAgZG9jdW1l
bnQuZXhlY0NvbW1hbmQoJ0luc2VydFRleHQnKTsKICAgIH0sIDApOwogIH07Cjwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427253</attachid>
            <date>2021-04-28 04:23:48 -0700</date>
            <delta_ts>2021-04-29 02:20:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-delete-selection-crash.diff</filename>
            <type>text/plain</type>
            <size>1556</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMTQzNjNiYzg4ZTUuLmE1NWM1YmExN2NjZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEzIEBACisyMDIxLTA0LTI4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBEbyBub3QgdHJ5IHRvIHJlbW92ZSBhbmQgYWxyZWFkeSBy
ZW1vdmVkIG5vZGUgd2hpbGUgZGVsZXRpbmcgc2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ4OTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1v
dmVOb2RlKTogUmV0dXJuIGVhcmx5IGlmIHRoZSBnaXZlbiBub2RlIGRvZXNuJ3QgaGF2ZSBhIHBh
cmVudCBhbnltb3JlLgorCiAyMDIxLTA0LTI2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBlbWJlZCBlbGVtZW50IHdpdGggdGhlIHNyYyBhdHRy
aWJ1dGUgc2V0IHByZXZlbnRzIFdlYktpdFRlc3RSdW5uZXIgZnJvbSBleGl0aW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCAx
YjQ3NTY3MDAyNmMuLmVhZGE0NzJlYjA5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC01MTEsNiArNTExLDkgQEAgc3RhdGlj
IGlubGluZSBib29sIHNob3VsZFJlbW92ZUNvbnRlbnRPbmx5KGNvbnN0IE5vZGUmIG5vZGUpCiAK
IHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZShOb2RlJiBub2RlLCBTaG91
bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdh
eXNFZGl0YWJsZSkKIHsKKyAgICBpZiAoIW5vZGUubm9uU2hhZG93Qm91bmRhcnlQYXJlbnROb2Rl
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFJlZjxOb2RlPiBwcm90ZWN0ZWROb2RlID0gbm9k
ZTsKICAgICBpZiAobV9zdGFydFJvb3QgIT0gbV9lbmRSb290ICYmICEobm9kZS5pc0Rlc2NlbmRh
bnRPZihtX3N0YXJ0Um9vdC5nZXQoKSkgJiYgbm9kZS5pc0Rlc2NlbmRhbnRPZihtX2VuZFJvb3Qu
Z2V0KCkpKSkgewogICAgICAgICAvLyBJZiBhIG5vZGUgaXMgbm90IGluIGJvdGggdGhlIHN0YXJ0
IGFuZCBlbmQgZWRpdGFibGUgcm9vdHMsIHJlbW92ZSBpdCBvbmx5IGlmIGl0cyBpbnNpZGUgYW4g
ZWRpdGFibGUgcmVnaW9uLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427331</attachid>
            <date>2021-04-29 02:20:39 -0700</date>
            <delta_ts>2021-05-06 06:27:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-delete-sel-crash.diff</filename>
            <type>text/plain</type>
            <size>1539</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMTQzNjNiYzg4ZTUuLmE1NWM1YmExN2NjZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEzIEBACisyMDIxLTA0LTI4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBEbyBub3QgdHJ5IHRvIHJlbW92ZSBhbmQgYWxyZWFkeSBy
ZW1vdmVkIG5vZGUgd2hpbGUgZGVsZXRpbmcgc2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ4OTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1v
dmVOb2RlKTogUmV0dXJuIGVhcmx5IGlmIHRoZSBnaXZlbiBub2RlIGRvZXNuJ3QgaGF2ZSBhIHBh
cmVudCBhbnltb3JlLgorCiAyMDIxLTA0LTI2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBlbWJlZCBlbGVtZW50IHdpdGggdGhlIHNyYyBhdHRy
aWJ1dGUgc2V0IHByZXZlbnRzIFdlYktpdFRlc3RSdW5uZXIgZnJvbSBleGl0aW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCAx
YjQ3NTY3MDAyNmMuLmNkZWY3ODQ2M2VkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC01MTEsNiArNTExLDkgQEAgc3RhdGlj
IGlubGluZSBib29sIHNob3VsZFJlbW92ZUNvbnRlbnRPbmx5KGNvbnN0IE5vZGUmIG5vZGUpCiAK
IHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZShOb2RlJiBub2RlLCBTaG91
bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdh
eXNFZGl0YWJsZSkKIHsKKyAgICBpZiAoIW5vZGUucGFyZW50Tm9kZSgpKQorICAgICAgICByZXR1
cm47CisKICAgICBSZWY8Tm9kZT4gcHJvdGVjdGVkTm9kZSA9IG5vZGU7CiAgICAgaWYgKG1fc3Rh
cnRSb290ICE9IG1fZW5kUm9vdCAmJiAhKG5vZGUuaXNEZXNjZW5kYW50T2YobV9zdGFydFJvb3Qu
Z2V0KCkpICYmIG5vZGUuaXNEZXNjZW5kYW50T2YobV9lbmRSb290LmdldCgpKSkpIHsKICAgICAg
ICAgLy8gSWYgYSBub2RlIGlzIG5vdCBpbiBib3RoIHRoZSBzdGFydCBhbmQgZW5kIGVkaXRhYmxl
IHJvb3RzLCByZW1vdmUgaXQgb25seSBpZiBpdHMgaW5zaWRlIGFuIGVkaXRhYmxlIHJlZ2lvbi4K
</data>
<flag name="review"
          id="447895"
          type_id="1"
          status="-"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427878</attachid>
            <date>2021-05-06 06:27:06 -0700</date>
            <delta_ts>2021-05-07 05:06:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-delete-selection-crash.diff</filename>
            <type>text/plain</type>
            <size>7217</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4MmFjZDg3MGU0ZDguLjNjOWZmZDM3NmEzOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDIxLTA1LTA2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
KworICAgICAgICBEbyBub3QgdHJ5IHRvIHJlbW92ZSBhbmQgYWxyZWFkeSByZW1vdmVkIG5vZGUg
d2hpbGUgZGVsZXRpbmcgc2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjQ4OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIGVkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC10ZXh0LWZvcmNlLXJl
cGFpbnQtb24tbG9hZC1jcmFzaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRp
bmcvaW5zZXJ0aW5nL2luc2VydC10ZXh0LWZvcmNlLXJlcGFpbnQtb24tbG9hZC1jcmFzaC5odG1s
OiBBZGRlZC4KKwogMjAyMS0wNS0wNiAgVGltIE5ndXllbiAgPG50aW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIFttZWRpYXF1ZXJpZXNdIFJlbW92ZSAib24tZGVtYW5kIiB2YWx1ZSBmb3IgYW55LWhv
dmVyL2hvdmVyICYgImZvcmNlZCIgdmFsdWUgZm9yIHByZWZlcnMtY29udHJhc3QKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC10ZXh0LWZvcmNlLXJlcGFp
bnQtb24tbG9hZC1jcmFzaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2Vy
dGluZy9pbnNlcnQtdGV4dC1mb3JjZS1yZXBhaW50LW9uLWxvYWQtY3Jhc2gtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2VmMjJlOWE0MzFhCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LXRl
eHQtZm9yY2UtcmVwYWludC1vbi1sb2FkLWNyYXNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBA
CitQQVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQt
dGV4dC1mb3JjZS1yZXBhaW50LW9uLWxvYWQtY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL2VkaXRp
bmcvaW5zZXJ0aW5nL2luc2VydC10ZXh0LWZvcmNlLXJlcGFpbnQtb24tbG9hZC1jcmFzaC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYmZiYmU0MDQwMmEyCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LXRl
eHQtZm9yY2UtcmVwYWludC1vbi1sb2FkLWNyYXNoLmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPHNj
cmlwdD4KKyAgb25sb2FkID0gKCkgPT4geworICAgIGxldCBuMCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2VtYmVkJyk7CisgICAgbjAuc3JjID0gJyMnOworICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQobjApOworICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKKyAgICBkb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpKTsKKyAgICBk
b2N1bWVudC5leGVjQ29tbWFuZCgnU2VsZWN0QWxsJyk7CisgICAgZG9jdW1lbnQuZGVzaWduTW9k
ZSA9ICdvbic7CisgICAgbGV0IGFuaW1hdGlvbiA9IG5ldyBBbmltYXRpb24oKTsKKyAgICBhbmlt
YXRpb24ub25maW5pc2ggPSAoKSA9PiBkb2N1bWVudC5leGVjQ29tbWFuZCgnSW5zZXJ0VGV4dCcp
OworICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAgYW5pbWF0aW9uLnJldmVyc2UoKTsKKyAg
ICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdJbnNlcnRUZXh0Jyk7CisgICAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnUEFTUyc7
CisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgfQorICAgIH0sIDApOwor
ICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1Rl
eHQoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5kaXNwbGF5T25Mb2FkRmluaXNoKCk7CisgICAgICAg
IHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKyAgfTsKKzwvc2NyaXB0PgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDgzOGU0NDA2MTA0YS4uYmJmYjA5MWYxMjNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMjEtMDUtMDYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgorCisgICAgICAgIERvIG5vdCB0cnkgdG8gcmVtb3ZlIGFuZCBhbHJlYWR5IHJlbW92
ZWQgbm9kZSB3aGlsZSBkZWxldGluZyBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDg5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC10
ZXh0LWZvcmNlLXJlcGFpbnQtb24tbG9hZC1jcmFzaC5odG1sCisKKyAgICAgICAgKiBlZGl0aW5n
L0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSk6IFJldHVybiBlYXJseSBpZiB0aGUgZ2l2ZW4gbm9k
ZSBkb2Vzbid0IGhhdmUgYSBwYXJlbnQgYW55bW9yZS4KKwogMjAyMS0wNS0wNiAgQ2FtZXJvbiBN
Y0Nvcm1hY2sgIDxoZXljYW1AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgRGlzcGxheUxpc3Q6
OmR1bXAgcHJpbnQgb3V0IHRoZSBkaXNwbGF5IGxpc3QgY29udGVudHMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDFiNDc1Njcw
MDI2Yy4uY2RlZjc4NDYzZWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTUxMSw2ICs1MTEsOSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2hvdWxkUmVtb3ZlQ29udGVudE9ubHkoY29uc3QgTm9kZSYgbm9kZSkKIAogdm9pZCBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKE5vZGUmIG5vZGUsIFNob3VsZEFzc3Vt
ZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRh
YmxlKQogeworICAgIGlmICghbm9kZS5wYXJlbnROb2RlKCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIFJlZjxOb2RlPiBwcm90ZWN0ZWROb2RlID0gbm9kZTsKICAgICBpZiAobV9zdGFydFJvb3Qg
IT0gbV9lbmRSb290ICYmICEobm9kZS5pc0Rlc2NlbmRhbnRPZihtX3N0YXJ0Um9vdC5nZXQoKSkg
JiYgbm9kZS5pc0Rlc2NlbmRhbnRPZihtX2VuZFJvb3QuZ2V0KCkpKSkgewogICAgICAgICAvLyBJ
ZiBhIG5vZGUgaXMgbm90IGluIGJvdGggdGhlIHN0YXJ0IGFuZCBlbmQgZWRpdGFibGUgcm9vdHMs
IHJlbW92ZSBpdCBvbmx5IGlmIGl0cyBpbnNpZGUgYW4gZWRpdGFibGUgcmVnaW9uLgpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQwZjNkMWZkZjI2
Yy4uOTE1NTZkN2NmMGM4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDUtMDYgIENhcmxvcyBHYXJjaWEgQ2Ft
cG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIERvIG5vdCB0cnkgdG8gcmVtb3Zl
IGFuZCBhbHJlYWR5IHJlbW92ZWQgbm9kZSB3aGlsZSBkZWxldGluZyBzZWxlY3Rpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDg5MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBuZXcgQVBJIHRv
IGFsbG93IHRlc3RzIHRvIHRyaWdnZXIgYSBmb3JjZSByZXBhaW50IG9uIGxvYWQgZmluaXNoZWQu
CisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rl
c3RSdW5uZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdl
OjpmcmFtZURpZENoYW5nZUxvY2F0aW9uKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZGlz
cGxheU9uTG9hZEZpbmlzaCk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNob3VsZERpc3Bs
YXlPbkxvYWRGaW5pc2gpOgorCiAyMDIxLTA1LTA1ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5v
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW2J1aWxkLndlYmtpdC5vcmddIEFkZCBuZXcgcG9zdC1j
b21taXQgYnVpbGRlciBXUEUtTGludXgtNjQtYml0LVJlbGVhc2UtTm9uLVVuaWZpZWQtQnVpbGQK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGlu
Z3MvVGVzdFJ1bm5lci5pZGwgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCmluZGV4IDIwOWYzMTE2NzVkNC4uMWYxYzIzYTJhY2Uy
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRp
bmdzL1Rlc3RSdW5uZXIuaWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKQEAgLTExMyw2ICsxMTMsNyBAQCBpbnRlcmZh
Y2UgVGVzdFJ1bm5lciB7CiAgICAgdW5kZWZpbmVkIHJlcGFpbnRTd2VlcEhvcml6b250YWxseSgp
OwogICAgIHVuZGVmaW5lZCBkaXNwbGF5KCk7CiAgICAgdW5kZWZpbmVkIGRpc3BsYXlBbmRUcmFj
a1JlcGFpbnRzKCk7CisgICAgdW5kZWZpbmVkIGRpc3BsYXlPbkxvYWRGaW5pc2goKTsKIAogICAg
IC8vIEZhaWxlZCBsb2FkIGNvbmRpdGlvbiB0ZXN0aW5nCiAgICAgdW5kZWZpbmVkIGZvcmNlSW1t
ZWRpYXRlQ29tcGxldGlvbigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCmluZGV4IDc0NWM0Y2U4
MzVlZC4uMDFhMzA0MzM2ZTdmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCkBAIC0xODYwLDYg
KzE4NjAsMTEgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmZyYW1lRGlkQ2hhbmdlTG9jYXRp
b24oV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIAogICAgIGluamVjdGVkQnVuZGxlLnNldFRvcExv
YWRpbmdGcmFtZShudWxscHRyKTsKIAorICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPnNob3VsZERpc3BsYXlPbkxvYWRGaW5pc2goKSkgeworICAgICAgICBpZiAoYXV0byBwYWdl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKSkKKyAgICAgICAgICAgIFdLQnVu
ZGxlUGFnZUZvcmNlUmVwYWludChwYWdlLT5wYWdlKCkpOworICAgIH0KKwogICAgIGlmIChpbmpl
Y3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZFdhaXRVbnRpbERvbmUoKSkKICAgICAgICAg
cmV0dXJuOwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5oCmluZGV4IDAxNjVlMzAzNGQ2MS4uMGEyNzg3MjFkZTA3IDEwMDY0NAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaApAQCAt
MTI4LDYgKzEyOCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcGFpbnRTd2VlcEhvcml6b250YWxs
eSgpIHsgbV90ZXN0UmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5ID0gdHJ1ZTsgfQogICAgIHZvaWQg
ZGlzcGxheSgpOwogICAgIHZvaWQgZGlzcGxheUFuZFRyYWNrUmVwYWludHMoKTsKKyAgICB2b2lk
IGRpc3BsYXlPbkxvYWRGaW5pc2goKSB7IG1fZGlzcGxheU9uTG9hZEZpbmlzaCA9IHRydWU7IH0K
KyAgICBib29sIHNob3VsZERpc3BsYXlPbkxvYWRGaW5pc2goKSB7IHJldHVybiBtX2Rpc3BsYXlP
bkxvYWRGaW5pc2g7IH0KIAogICAgIC8vIFVzZXJDb250ZW50IHRlc3RpbmcuCiAgICAgdm9pZCBh
ZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBydW5BdFN0YXJ0LCBib29sIGFs
bEZyYW1lcyk7CkBAIC01NzUsNiArNTc3LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlzYWxs
b3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSB7IGZhbHNlIH07CiAgICAgYm9vbCBt
X3Rlc3RSZXBhaW50IHsgZmFsc2UgfTsKICAgICBib29sIG1fdGVzdFJlcGFpbnRTd2VlcEhvcml6
b250YWxseSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2Rpc3BsYXlPbkxvYWRGaW5pc2ggeyBmYWxz
ZSB9OwogICAgIGJvb2wgbV9pc1ByaW50aW5nIHsgZmFsc2UgfTsKICAgICBib29sIG1fd2lsbFNl
bmRSZXF1ZXN0UmV0dXJuc051bGwgeyBmYWxzZSB9OwogICAgIGJvb2wgbV93aWxsU2VuZFJlcXVl
c3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QgeyBmYWxzZSB9Owo=
</data>
<flag name="review"
          id="448631"
          type_id="1"
          status="+"
          setter="rniwa"
    />
    <flag name="commit-queue"
          id="448638"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427992</attachid>
            <date>2021-05-07 05:06:22 -0700</date>
            <delta_ts>2021-05-07 14:54:11 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wcore-delete-selection-crash.diff</filename>
            <type>text/plain</type>
            <size>7227</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjZGFlYWY3ZjZmNTAuLjg4NzIyMjA1MmFjMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDIxLTA1LTA2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
KworICAgICAgICBEbyBub3QgdHJ5IHRvIHJlbW92ZSBhbmQgYWxyZWFkeSByZW1vdmVkIG5vZGUg
d2hpbGUgZGVsZXRpbmcgc2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjQ4OTMKKworICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5p
d2EuCisKKyAgICAgICAgKiBlZGl0aW5nL2luc2VydGluZy9pbnNlcnQtdGV4dC1mb3JjZS1yZXBh
aW50LW9uLWxvYWQtY3Jhc2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5n
L2luc2VydGluZy9pbnNlcnQtdGV4dC1mb3JjZS1yZXBhaW50LW9uLWxvYWQtY3Jhc2guaHRtbDog
QWRkZWQuCisKIDIwMjEtMDUtMDcgIEVucmlxdWUgT2Nhw7FhIEdvbnrDoWxleiAgPGVvY2FuaGFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVhbWVyXSBMYXlvdXQgdGVzdCBtZWRpYS92aWRl
by1wbGF5c2lubGluZS5odG1sIGlzIGZsYWt5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0
aW5nL2luc2VydGluZy9pbnNlcnQtdGV4dC1mb3JjZS1yZXBhaW50LW9uLWxvYWQtY3Jhc2gtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LXRleHQtZm9y
Y2UtcmVwYWludC1vbi1sb2FkLWNyYXNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAuLjdlZjIyZTlhNDMxYQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC10ZXh0LWZvcmNlLXJlcGFpbnQtb24t
bG9hZC1jcmFzaC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSBAQAorUEFTUwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LXRleHQtZm9yY2UtcmVwYWludC1v
bi1sb2FkLWNyYXNoLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQt
dGV4dC1mb3JjZS1yZXBhaW50LW9uLWxvYWQtY3Jhc2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAuLjYzOWQxNmIzN2I5MwotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC10ZXh0LWZvcmNlLXJlcGFpbnQtb24t
bG9hZC1jcmFzaC5odG1sCkBAIC0wLDAgKzEsMjcgQEAKKzxzY3JpcHQ+CisgIG9ubG9hZCA9ICgp
ID0+IHsKKyAgICBsZXQgbjAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdlbWJlZCcpOworICAg
IG4wLnNyYyA9ICcjJzsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG4wKTsKKyAgICBk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnaW5wdXQnKSk7CisgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKSk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J1NlbGVjdEFsbCcpOworICAgIGRvY3VtZW50LmRlc2lnbk1vZGUgPSAnb24nOworICAgIGxldCBh
bmltYXRpb24gPSBuZXcgQW5pbWF0aW9uKCk7CisgICAgYW5pbWF0aW9uLm9uZmluaXNoID0gKCkg
PT4gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ0luc2VydFRleHQnKTsKKyAgICBzZXRUaW1lb3V0KCgp
ID0+IHsKKyAgICAgIGFuaW1hdGlvbi5yZXZlcnNlKCk7CisgICAgICBkb2N1bWVudC5leGVjQ29t
bWFuZCgnSW5zZXJ0VGV4dCcpOworICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAg
ICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJ1BBU1MnOworICAgICAgICB0ZXN0UnVubmVy
Lm5vdGlmeURvbmUoKTsKKyAgICAgIH0KKyAgICB9LCAwKTsKKyAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGlmICh0
ZXN0UnVubmVyLmRpc3BsYXlPbkxvYWRGaW5pc2gpCisgICAgICAgICAgdGVzdFJ1bm5lci5kaXNw
bGF5T25Mb2FkRmluaXNoKCk7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgIH0KKyAgfTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdiMGYxYWUwMzBiNC4uMjAwYmUz
NDNmMmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDUtMDYgIENhcmxvcyBH
YXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIERvIG5vdCB0cnkg
dG8gcmVtb3ZlIGFuZCBhbHJlYWR5IHJlbW92ZWQgbm9kZSB3aGlsZSBkZWxldGluZyBzZWxlY3Rp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDg5
MworCisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAgICBUZXN0OiBl
ZGl0aW5nL2luc2VydGluZy9pbnNlcnQtdGV4dC1mb3JjZS1yZXBhaW50LW9uLWxvYWQtY3Jhc2gu
aHRtbAorCisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGUpOiBSZXR1
cm4gZWFybHkgaWYgdGhlIGdpdmVuIG5vZGUgZG9lc24ndCBoYXZlIGEgcGFyZW50IGFueW1vcmUu
CisKIDIwMjEtMDUtMDcgIEZyw6lkw6lyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgQ3Jhc2ggaW4gSW5zZXJ0VGV4dENvbW1hbmQ6OnBvc2l0aW9uSW5zaWRlVGV4dE5vZGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CmluZGV4IDAxZDRkMjNiZWJjNC4uNTNlZTZlMTk4ZTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTUxMSw2ICs1MTEsOSBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkUmVtb3ZlQ29udGVudE9ubHkoY29uc3QgTm9kZSYg
bm9kZSkKIAogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKE5vZGUmIG5v
ZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFzc3VtZUNvbnRl
bnRJc0Fsd2F5c0VkaXRhYmxlKQogeworICAgIGlmICghbm9kZS5wYXJlbnROb2RlKCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIFJlZjxOb2RlPiBwcm90ZWN0ZWROb2RlID0gbm9kZTsKICAgICBp
ZiAobV9zdGFydFJvb3QgIT0gbV9lbmRSb290ICYmICEobm9kZS5pc0Rlc2NlbmRhbnRPZihtX3N0
YXJ0Um9vdC5nZXQoKSkgJiYgbm9kZS5pc0Rlc2NlbmRhbnRPZihtX2VuZFJvb3QuZ2V0KCkpKSkg
ewogICAgICAgICAvLyBJZiBhIG5vZGUgaXMgbm90IGluIGJvdGggdGhlIHN0YXJ0IGFuZCBlbmQg
ZWRpdGFibGUgcm9vdHMsIHJlbW92ZSBpdCBvbmx5IGlmIGl0cyBpbnNpZGUgYW4gZWRpdGFibGUg
cmVnaW9uLgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDEzOTJhZTQ3NzAxOC4uYjQxZGQ2ZGJiMGNkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDUtMDYgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIERvIG5v
dCB0cnkgdG8gcmVtb3ZlIGFuZCBhbHJlYWR5IHJlbW92ZWQgbm9kZSB3aGlsZSBkZWxldGluZyBz
ZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNDg5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBuZXcgQVBJIHRvIGFsbG93IHRlc3RzIHRvIHRyaWdnZXIgYSBmb3JjZSByZXBhaW50IG9u
IGxvYWQgZmluaXNoZWQuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpmcmFtZURpZENoYW5nZUxvY2F0aW9uKToKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6ZGlzcGxheU9uTG9hZEZpbmlzaCk6CisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNob3VsZERpc3BsYXlPbkxvYWRGaW5pc2gpOgorCiAyMDIxLTA1LTA2ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUG9ydCBGaWxlc3lzdGVtOjpmaWxlTWV0
YWRhdGEoKSAmIEZpbGVzeXN0ZW06OmdldEZpbGVNb2RpZmljYXRpb25UaW1lKCkgdG8gc3RkOjpm
aWxlc3lzdGVtCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAppbmRleCAyMDlmMzExNjc1ZDQuLjFm
MWMyM2EyYWNlMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCkBAIC0xMTMsNiArMTEzLDcg
QEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogICAgIHVuZGVmaW5lZCByZXBhaW50U3dlZXBIb3Jp
em9udGFsbHkoKTsKICAgICB1bmRlZmluZWQgZGlzcGxheSgpOwogICAgIHVuZGVmaW5lZCBkaXNw
bGF5QW5kVHJhY2tSZXBhaW50cygpOworICAgIHVuZGVmaW5lZCBkaXNwbGF5T25Mb2FkRmluaXNo
KCk7CiAKICAgICAvLyBGYWlsZWQgbG9hZCBjb25kaXRpb24gdGVzdGluZwogICAgIHVuZGVmaW5l
ZCBmb3JjZUltbWVkaWF0ZUNvbXBsZXRpb24oKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcCBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAppbmRl
eCA3NDVjNGNlODM1ZWQuLjAxYTMwNDMzNmU3ZiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcApA
QCAtMTg2MCw2ICsxODYwLDExIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpmcmFtZURpZENo
YW5nZUxvY2F0aW9uKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiAKICAgICBpbmplY3RlZEJ1bmRs
ZS5zZXRUb3BMb2FkaW5nRnJhbWUobnVsbHB0cik7CiAKKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGREaXNwbGF5T25Mb2FkRmluaXNoKCkpIHsKKyAgICAgICAgaWYg
KGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkpCisgICAgICAg
ICAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQocGFnZS0+cGFnZSgpKTsKKyAgICB9CisKICAg
ICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRXYWl0VW50aWxEb25lKCkp
CiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRleCAwMTY1ZTMwMzRkNjEuLjBhMjc4NzIxZGUwNyAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVu
bmVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVu
bmVyLmgKQEAgLTEyOCw2ICsxMjgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBhaW50U3dlZXBI
b3Jpem9udGFsbHkoKSB7IG1fdGVzdFJlcGFpbnRTd2VlcEhvcml6b250YWxseSA9IHRydWU7IH0K
ICAgICB2b2lkIGRpc3BsYXkoKTsKICAgICB2b2lkIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzKCk7
CisgICAgdm9pZCBkaXNwbGF5T25Mb2FkRmluaXNoKCkgeyBtX2Rpc3BsYXlPbkxvYWRGaW5pc2gg
PSB0cnVlOyB9CisgICAgYm9vbCBzaG91bGREaXNwbGF5T25Mb2FkRmluaXNoKCkgeyByZXR1cm4g
bV9kaXNwbGF5T25Mb2FkRmluaXNoOyB9CiAKICAgICAvLyBVc2VyQ29udGVudCB0ZXN0aW5nLgog
ICAgIHZvaWQgYWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFy
dCwgYm9vbCBhbGxGcmFtZXMpOwpAQCAtNTc1LDYgKzU3Nyw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2Rpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV90ZXN0UmVwYWludCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Rlc3RSZXBhaW50
U3dlZXBIb3Jpem9udGFsbHkgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kaXNwbGF5T25Mb2FkRmlu
aXNoIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNQcmludGluZyB7IGZhbHNlIH07CiAgICAgYm9v
bCBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsIHsgZmFsc2UgfTsKICAgICBib29sIG1fd2ls
bFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0IHsgZmFsc2UgfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>