<?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>208115</bug_id>
          
          <creation_ts>2020-02-23 15:02:10 -0800</creation_ts>
          <short_desc>Nullptr crash in WebCore::canHaveChildrenForEditing via CompositeEditCommand::insertNode</short_desc>
          <delta_ts>2020-03-07 19:59:40 -0800</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 Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jack">shihchieh_lee</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ajuma</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dougk</cc>
    
    <cc>ews-feeder</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mifenton</cc>
    
    <cc>product-security</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1622034</commentid>
    <comment_count>0</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-02-23 15:02:10 -0800</bug_when>
    <thetext>&lt;rdar://56685655&gt;

    #0 0x6c019d821 in WebCore::Node::getFlag(WebCore::Node::NodeFlags) const (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x19b821)
    #1 0x6c33db02d in WebCore::canHaveChildrenForEditing(WebCore::Node const&amp;) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x33d902d)
    #2 0x6c339c496 in WebCore::CompositeEditCommand::insertNodeAt(WTF::Ref&lt;WebCore::Node, WTF::DumbPtrTraits&lt;WebCore::Node&gt; &gt;&amp;&amp;, WebCore::Position const&amp;) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x339a496)
    #3 0x6c3466d28 in WebCore::InsertListCommand::listifyParagraph(WebCore::VisiblePosition const&amp;, WebCore::QualifiedName const&amp;) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x3464d28)
    #4 0x6c34654ff in WebCore::InsertListCommand::doApplyForSingleParagraph(bool, WebCore::HTMLQualifiedName const&amp;, WebCore::Range*) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x34634ff)
    #5 0x6c34647af in WebCore::InsertListCommand::doApply() (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x34627af)
    #6 0x6c3396376 in WebCore::CompositeEditCommand::apply() (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x3394376)
    #7 0x6c344d78b in WebCore::executeInsertUnorderedList(WebCore::Frame&amp;, WebCore::Event*, WebCore::EditorCommandSource, WTF::String const&amp;) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x344b78b)
    #8 0x6c30be1c7 in WebCore::Document::execCommand(WTF::String const&amp;, bool, WTF::String const&amp;) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x30bc1c7)
    #9 0x6c0a33c9a in WebCore::jsDocumentPrototypeFunctionExecCommandBody(JSC::JSGlobalObject*, JSC::CallFrame*, WebCore::JSDocument*, JSC::ThrowScope&amp;) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0xa31c9a)
    #10 0x6c08ec150 in long long WebCore::IDLOperation&lt;WebCore::JSDocument&gt;::call&lt;&amp;(WebCore::jsDocumentPrototypeFunctionExecCommandBody(JSC::JSGlobalObject*, JSC::CallFrame*, WebCore::JSDocument*, JSC::ThrowScope&amp;)), (WebCore::CastedThisErrorBehavior)0&gt;(JSC::JSGlobalObject&amp;, JSC::CallFrame&amp;, char const*) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x8ea150)
    #11 0x3d778e40116a  (&lt;unknown module&gt;)
    #12 0x6d9a7640c in llint_entry (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/JavaScriptCore.framework/Versions/A/JavaScriptCore:x86_64+0xa3d40c)
    #13 0x6d9a76298 in llint_entry (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/JavaScriptCore.framework/Versions/A/JavaScriptCore:x86_64+0xa3d298)
    #14 0x6d9a5f878 in vmEntryToJavaScript (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/JavaScriptCore.framework/Versions/A/JavaScriptCore:x86_64+0xa26878)
    #15 0x6db0140db in JSC::Interpreter::executeCall(JSC::JSGlobalObject*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/JavaScriptCore.framework/Versions/A/JavaScriptCore:x86_64+0x1fdb0db)
    #16 0x6db5d6fc0 in JSC::call(JSC::JSGlobalObject*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/JavaScriptCore.framework/Versions/A/JavaScriptCore:x86_64+0x259dfc0)
    #17 0x6db5d70c1 in JSC::call(JSC::JSGlobalObject*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/JavaScriptCore.framework/Versions/A/JavaScriptCore:x86_64+0x259e0c1)
    #18 0x6db5d749f in JSC::profiledCall(JSC::JSGlobalObject*, JSC::ProfilingReason, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/JavaScriptCore.framework/Versions/A/JavaScriptCore:x86_64+0x259e49f)
    #19 0x6c29c7174 in WebCore::JSExecState::profiledCall(JSC::JSGlobalObject*, JSC::ProfilingReason, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x29c5174)
    #20 0x6c29ef55c in WebCore::JSEventListener::handleEvent(WebCore::ScriptExecutionContext&amp;, WebCore::Event&amp;) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x29ed55c)
    #21 0x6c31cf524 in WebCore::EventTarget::innerInvokeEventListeners(WebCore::Event&amp;, WTF::Vector&lt;WTF::RefPtr&lt;WebCore::RegisteredEventListener, WTF::DumbPtrTraits&lt;WebCore::RegisteredEventListener&gt; &gt;, 1ul, WTF::CrashOnOverflow, 16ul&gt;, WebCore::EventTarget::EventInvokePhase) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x31cd524)
    #22 0x6c31ca7f7 in WebCore::EventTarget::fireEventListeners(WebCore::Event&amp;, WebCore::EventTarget::EventInvokePhase) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x31c87f7)
    #23 0x6c3f59e37 in WebCore::DOMWindow::dispatchEvent(WebCore::Event&amp;, WebCore::EventTarget*) (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x3f57e37)
    #24 0x6c3f6c5cf in WebCore::DOMWindow::dispatchLoadEvent() (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x3f6a5cf)
    #25 0x6c30a603f in WebCore::Document::dispatchWindowLoadEvent() (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x30a403f)
    #26 0x6c30a59f0 in WebCore::Document::implicitClose() (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x30a39f0)
    #27 0x6c3d944fb in WebCore::FrameLoader::checkCompleted() (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x3d924fb)
    #28 0x6c308b978 in WebCore::Document::loadEventDelayTimerFired() (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x3089978)
    #29 0x6c3110d53 in std::__1::__bind_return&lt;void (WebCore::Document::*)(), std::__1::tuple&lt;WebCore::Document*&gt;, std::__1::tuple&lt;&gt;, __is_valid_bind_return&lt;void (WebCore::Document::*)(), std::__1::tuple&lt;WebCore::Document*&gt;, std::__1::tuple&lt;&gt; &gt;::value&gt;::type std::__1::__bind&lt;void (WebCore::Document::*&amp;)(), WebCore::Document*&gt;::operator()&lt;&gt;() (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x310ed53)
    #30 0x6c42a0ff5 in WebCore::ThreadTimers::sharedTimerFiredInternal() (Safari_ASAN_251639_8651f88be7c86f1fa8b4fafe3bc6b2caded79eda.app/Contents/Frameworks/WebCore.framework/Versions/A/WebCore:x86_64+0x429eff5)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622343</commentid>
    <comment_count>1</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-02-24 14:59:34 -0800</bug_when>
    <thetext>Root cause:
In this case, hr is uneditable, and the script tries to insert an ol after hr, so the code is creating a BR element and inserting it after HR. However, since hr is uneditable, the insertion fails, making the BR element parentless. and that results in an null insertionPos, and it is later referenced in canHaveChildrenForEditing.

&lt;style&gt;
body { -webkit-user-modify: read-write; background-image: url(); }
&lt;/style&gt;
&lt;script&gt;
    onload = function fun() {
        document.getSelection().setPosition(HR);
        HR.appendChild(document.createElement(&quot;option&quot;));
        document.execCommand(&quot;insertOrderedList&quot;, false);
    }
&lt;/script&gt;
&lt;body&gt;&lt;hr id=HR contenteditable=&quot;false&quot;&gt;&lt;/hr&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622359</commentid>
    <comment_count>2</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-02-24 15:21:42 -0800</bug_when>
    <thetext>In debug build, it would trigger two assertions:
1. CompositeEditCommand::insertNodeAt
    ASSERT(isEditablePosition(editingPosition));
2. InsertNodeBeforeCommand::InsertNodeBeforeCommand
    ASSERT(m_refChild-&gt;parentNode()-&gt;hasEditableStyle() || !m_refChild-&gt;parentNode()-&gt;renderer());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622379</commentid>
    <comment_count>3</comment_count>
      <attachid>391591</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-02-24 16:02:46 -0800</bug_when>
    <thetext>Created attachment 391591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622477</commentid>
    <comment_count>4</comment_count>
      <attachid>391591</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-02-24 19:02:05 -0800</bug_when>
    <thetext>Comment on attachment 391591
Patch

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

&gt; Source/WebCore/editing/InsertListCommand.cpp:341
&gt; -    if (start.isNull() || end.isNull())
&gt; +    if (start.isNull() || end.isNull() || !start.deepEquivalent().deprecatedNode()-&gt;hasEditableStyle())

Please check the eatability of start.deepEquivalent().containerNode() instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622479</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-02-24 19:02:20 -0800</bug_when>
    <thetext>This is not a security bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622635</commentid>
    <comment_count>6</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-02-25 09:04:41 -0800</bug_when>
    <thetext>Thanks! Yes, in this case the anchorType is PositionIsOffsetInAnchor, so container node is also m_anchorNode.

(lldb) p anchorType()
(WebCore::Position::AnchorType) $3 = PositionIsOffsetInAnchor

(In reply to Ryosuke Niwa from comment #4)
&gt; Comment on attachment 391591 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=391591&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/InsertListCommand.cpp:341
&gt; &gt; -    if (start.isNull() || end.isNull())
&gt; &gt; +    if (start.isNull() || end.isNull() || !start.deepEquivalent().deprecatedNode()-&gt;hasEditableStyle())
&gt; 
&gt; Please check the eatability of start.deepEquivalent().containerNode()
&gt; instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622637</commentid>
    <comment_count>7</comment_count>
      <attachid>391660</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-02-25 09:06:09 -0800</bug_when>
    <thetext>Created attachment 391660
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622841</commentid>
    <comment_count>8</comment_count>
    <who name="Doug Kelly">dougk</who>
    <bug_when>2020-02-25 17:04:52 -0800</bug_when>
    <thetext>Hey Jack,

I just happened to notice unlistify can crash in much the same way -- does it make sense to apply the check at the level of doApply() instead?

doApply() already has an early-abort for if content is not editable:

if (endingSelection().isNoneOrOrphaned() || !endingSelection().isContentRichlyEditable())
    return;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622877</commentid>
    <comment_count>9</comment_count>
      <attachid>391660</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-02-25 18:02:49 -0800</bug_when>
    <thetext>Comment on attachment 391660
Patch

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

&gt; Source/WebCore/editing/InsertListCommand.cpp:341
&gt; -    if (start.isNull() || end.isNull())
&gt; +    if (start.isNull() || end.isNull() || !start.deepEquivalent().containerNode()-&gt;hasEditableStyle())

Sorry, I forgot to point out earlier but we should probably check that the end is also editable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622911</commentid>
    <comment_count>10</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-02-25 23:06:30 -0800</bug_when>
    <thetext>Thanks, Doug. It is possible. However, the actual inserting position is determined later in the call stack (depending on the tag and its children and some other properties) and can change in other cases, so it can be false positives if the code returns too early.

In this test case, at doApply() the endingSelection has anchor type = PositionIsBeforeAnchor, so the editability is checked on the parent of anchor node, which is &lt;body&gt; hence it does not return here.

When it enters listifyParagraph and after startOfParagraph is called, the anchor type becomes PositionIsOffsetInAnchor so the editability is checked on the anchor node, &lt;hr&gt;, which is uneditable. 

One experiment I did was removing the child (option) of the uneditable element (hr). Even though the anchor node is the uneditable element, the code does continue and inserts ol in front of hr.

It sort of makes sense since if there is nothing to be &quot;listified&quot; inside &lt;hr&gt;, it is not considered &quot;editing&quot; &lt;hr&gt;? 

(In reply to Doug Kelly from comment #8)
&gt; Hey Jack,
&gt; 
&gt; I just happened to notice unlistify can crash in much the same way -- does
&gt; it make sense to apply the check at the level of doApply() instead?
&gt; 
&gt; doApply() already has an early-abort for if content is not editable:
&gt; 
&gt; if (endingSelection().isNoneOrOrphaned() ||
&gt; !endingSelection().isContentRichlyEditable())
&gt;     return;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622914</commentid>
    <comment_count>11</comment_count>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-02-25 23:29:07 -0800</bug_when>
    <thetext>Thanks! I thought about it but wondered if it is okay to listify contents if only the end is uneditable. Definitely it is more important to prevent crash!

(In reply to Ryosuke Niwa from comment #9)
&gt; Comment on attachment 391660 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=391660&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/InsertListCommand.cpp:341
&gt; &gt; -    if (start.isNull() || end.isNull())
&gt; &gt; +    if (start.isNull() || end.isNull() || !start.deepEquivalent().containerNode()-&gt;hasEditableStyle())
&gt; 
&gt; Sorry, I forgot to point out earlier but we should probably check that the
&gt; end is also editable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622916</commentid>
    <comment_count>12</comment_count>
      <attachid>391723</attachid>
    <who name="Jack">shihchieh_lee</who>
    <bug_when>2020-02-25 23:32:11 -0800</bug_when>
    <thetext>Created attachment 391723
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623285</commentid>
    <comment_count>13</comment_count>
      <attachid>391723</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-26 17:01:42 -0800</bug_when>
    <thetext>Comment on attachment 391723
Patch

Clearing flags on attachment: 391723

Committed r257536: &lt;https://trac.webkit.org/changeset/257536&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623286</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-26 17:01:44 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627437</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-03-07 19:59:40 -0800</bug_when>
    <thetext>*** Bug 208515 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391591</attachid>
            <date>2020-02-24 16:02:46 -0800</date>
            <delta_ts>2020-02-25 09:06:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208115-20200224160245.patch</filename>
            <type>text/plain</type>
            <size>4201</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFmY2M2NTllMmQ3YzJl
ZGIyZmYwZjYyZDIxNzFhNjdiOTdkNjFjNi4uMTU4MjU4ZjY0MGU4MzlhNzhkZGU4OGZhZjg0YzE0
NDYxZWVhMDNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIwLTAyLTI0ICBKYWNr
IExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jhc2gg
aW4gV2ViQ29yZTo6Y2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyB2aWEgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6Omluc2VydE5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwODExNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY2ODU2NTU+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBpbnNlcnRp
bmcgYSBsaXN0IGF0IGFuIGVsZW1lbnQgd2l0aCBhIG5vbi1saXN0LWl0ZW0gY2hpbGQsIGlmIHRo
ZSBlbGVtZW50IGlzIHVuZWRpdGFibGUsIHNraXAgY3JlYXRpbmcgbGlzdCBpdGVtIGZvciB0aGUg
Y2hpbGQuIAorCisgICAgICAgIFRlc3Q6IGZhc3QvbGlzdHMvaW5zZXJ0LWxpc3QtdW5lZGl0YWJs
ZS1lbGVtZW50LXdpdGgtbm9uLWxpLWNoaWxkLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvSW5z
ZXJ0TGlzdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6
Omxpc3RpZnlQYXJhZ3JhcGgpOgorCiAyMDE5LTEyLTA1ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBGaXggY3NzMS9iYXNpYy9jb250YWlubWVu
dC5odG1sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21t
YW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCmlu
ZGV4IDBhODdkM2QzOTIyYTYwNjg0ZjRhN2ZlMzMyOTVkZTgzYTE4OTViYjMuLmMxYmQ2NjhjYjJi
MTM3MjY3YzIwODE0MWI3ZTE0OThjOTVjOTFiZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCkBAIC0zMzgsNyArMzM4LDcgQEAgUmVmUHRyPEhUTUxF
bGVtZW50PiBJbnNlcnRMaXN0Q29tbWFuZDo6bGlzdGlmeVBhcmFncmFwaChjb25zdCBWaXNpYmxl
UG9zaXRpb24mIG8KICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBo
KG9yaWdpbmFsU3RhcnQsIENhblNraXBPdmVyRWRpdGluZ0JvdW5kYXJ5KTsKICAgICBWaXNpYmxl
UG9zaXRpb24gZW5kID0gZW5kT2ZQYXJhZ3JhcGgoc3RhcnQsIENhblNraXBPdmVyRWRpdGluZ0Jv
dW5kYXJ5KTsKICAgICAKLSAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQor
ICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCkgfHwgIXN0YXJ0LmRlZXBFcXVp
dmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIC8vIENoZWNrIGZvciBhZGpvaW5pbmcgbGlzdHMuCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYWVj
MDBjYTE4M2RhYTQ2NGI1NDI2MjA5ZmMwN2JjMjhjYTIxYzRkMi4uYmQxYjVmNjczOTVjZjEzZDNm
ODE0N2JlMTgyOGUxYzU4YmU0YTYyZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIwLTAyLTI0
ICBKYWNrIExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIg
Y3Jhc2ggaW4gV2ViQ29yZTo6Y2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyB2aWEgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6Omluc2VydE5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwODExNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY2ODU2NTU+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBp
bnNlcnRpbmcgYSBsaXN0IGF0IGFuIGVsZW1lbnQgd2l0aCBhIG5vbi1saXN0LWl0ZW0gY2hpbGQs
IGlmIHRoZSBlbGVtZW50IGlzIHVuZWRpdGFibGUsIHNraXAgY3JlYXRpbmcgbGlzdCBpdGVtIGZv
ciB0aGUgY2hpbGQuIAorCisgICAgICAgICogZmFzdC9saXN0cy9pbnNlcnQtbGlzdC11bmVkaXRh
YmxlLWVsZW1lbnQtd2l0aC1ub24tbGktY2hpbGQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2xpc3RzL2luc2VydC1saXN0LXVuZWRpdGFibGUtZWxlbWVudC13aXRoLW5vbi1s
aS1jaGlsZC5odG1sOiBBZGRlZC4KKwogMjAxOS0xMi0wNiAgeW91ZW5uIGZhYmxldCAgPHlvdWVu
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUHJvdGVjdCBXZWJSVEMgbmV0d29yayBtb25pdG9yaW5n
IHRvIHdhaXQgZm9yZXZlciBpbiBlZGdlIGNhc2VzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2xpc3RzL2luc2VydC1saXN0LXVuZWRpdGFibGUtZWxlbWVudC13aXRoLW5vbi1saS1jaGls
ZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2xpc3RzL2luc2VydC1saXN0LXVuZWRp
dGFibGUtZWxlbWVudC13aXRoLW5vbi1saS1jaGlsZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OGNkZjYwMzk2YzhlMmQ2M2Q1OTJmNWFmZDcwZWFjNmM2ZDUyZTU1YwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvbGlzdHMvaW5zZXJ0LWxpc3QtdW5lZGl0YWJsZS1lbGVtZW50
LXdpdGgtbm9uLWxpLWNoaWxkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitUZXN0cyBpbnNl
cnRpbmcgb2wgYXQgYW4gdW5lZGl0YWJsZSBlbGVtZW50IHdpdGggbm9uLWxpIGNoaWxkLiBUaGUg
dGVzdCBwYXNzZXMgaWYgV2ViS2l0IGRvZXNuJ3QgY3Jhc2ggb3IgaGl0IGFuIGFzc2VydGlvbi4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbGlzdHMvaW5zZXJ0LWxpc3QtdW5lZGl0YWJs
ZS1lbGVtZW50LXdpdGgtbm9uLWxpLWNoaWxkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2xpc3Rz
L2luc2VydC1saXN0LXVuZWRpdGFibGUtZWxlbWVudC13aXRoLW5vbi1saS1jaGlsZC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE3ZWQ2ODg1NDgzZDI1ODc1NThmYjEwYWRjZTE1NDQzNzc4MDdkZWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xpc3RzL2luc2VydC1saXN0LXVuZWRpdGFi
bGUtZWxlbWVudC13aXRoLW5vbi1saS1jaGlsZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxzdHls
ZT4KK2JvZHkgeyAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLXdyaXRlOyBiYWNrZ3JvdW5kLWlt
YWdlOiB1cmwoKTsgfQorPC9zdHlsZT4KKzxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICBvbmxvYWQgPSBmdW5j
dGlvbiBmdW4oKSB7CisgICAgICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLnNldFBvc2l0aW9u
KEhSKTsKKyAgICAgICAgSFIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0
aW9uIikpOworICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiaW5zZXJ0T3JkZXJlZExpc3Qi
LCBmYWxzZSk7CisgICAgfQorPC9zY3JpcHQ+Cis8Ym9keT48aHIgaWQ9SFIgY29udGVudGVkaXRh
YmxlPSJmYWxzZSI+PC9ocj48c3Bhbj5UZXN0cyBpbnNlcnRpbmcgb2wgYXQgYW4gdW5lZGl0YWJs
ZSBlbGVtZW50IHdpdGggbm9uLWxpIGNoaWxkLiBUaGUgdGVzdCBwYXNzZXMgaWYgV2ViS2l0IGRv
ZXNuJ3QgY3Jhc2ggb3IgaGl0IGFuIGFzc2VydGlvbi48L3NwYW4+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391660</attachid>
            <date>2020-02-25 09:06:09 -0800</date>
            <delta_ts>2020-02-25 23:32:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208115-20200225090608.patch</filename>
            <type>text/plain</type>
            <size>4200</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFmY2M2NTllMmQ3YzJl
ZGIyZmYwZjYyZDIxNzFhNjdiOTdkNjFjNi4uMTU4MjU4ZjY0MGU4MzlhNzhkZGU4OGZhZjg0YzE0
NDYxZWVhMDNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIwLTAyLTI0ICBKYWNr
IExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jhc2gg
aW4gV2ViQ29yZTo6Y2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyB2aWEgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6Omluc2VydE5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwODExNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY2ODU2NTU+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBpbnNlcnRp
bmcgYSBsaXN0IGF0IGFuIGVsZW1lbnQgd2l0aCBhIG5vbi1saXN0LWl0ZW0gY2hpbGQsIGlmIHRo
ZSBlbGVtZW50IGlzIHVuZWRpdGFibGUsIHNraXAgY3JlYXRpbmcgbGlzdCBpdGVtIGZvciB0aGUg
Y2hpbGQuIAorCisgICAgICAgIFRlc3Q6IGZhc3QvbGlzdHMvaW5zZXJ0LWxpc3QtdW5lZGl0YWJs
ZS1lbGVtZW50LXdpdGgtbm9uLWxpLWNoaWxkLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvSW5z
ZXJ0TGlzdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6
Omxpc3RpZnlQYXJhZ3JhcGgpOgorCiAyMDE5LTEyLTA1ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBGaXggY3NzMS9iYXNpYy9jb250YWlubWVu
dC5odG1sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21t
YW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCmlu
ZGV4IDBhODdkM2QzOTIyYTYwNjg0ZjRhN2ZlMzMyOTVkZTgzYTE4OTViYjMuLmJkMjI3ZTQwZGFl
NWZkN2Q0MTVlOWQ5YmE3NWI5ZTlkOTY4Yzc3NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCkBAIC0zMzgsNyArMzM4LDcgQEAgUmVmUHRyPEhUTUxF
bGVtZW50PiBJbnNlcnRMaXN0Q29tbWFuZDo6bGlzdGlmeVBhcmFncmFwaChjb25zdCBWaXNpYmxl
UG9zaXRpb24mIG8KICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBo
KG9yaWdpbmFsU3RhcnQsIENhblNraXBPdmVyRWRpdGluZ0JvdW5kYXJ5KTsKICAgICBWaXNpYmxl
UG9zaXRpb24gZW5kID0gZW5kT2ZQYXJhZ3JhcGgoc3RhcnQsIENhblNraXBPdmVyRWRpdGluZ0Jv
dW5kYXJ5KTsKICAgICAKLSAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQor
ICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCkgfHwgIXN0YXJ0LmRlZXBFcXVp
dmFsZW50KCkuY29udGFpbmVyTm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgLy8gQ2hlY2sgZm9yIGFkam9pbmluZyBsaXN0cy4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhZWMw
MGNhMTgzZGFhNDY0YjU0MjYyMDlmYzA3YmMyOGNhMjFjNGQyLi5iZDFiNWY2NzM5NWNmMTNkM2Y4
MTQ3YmUxODI4ZTFjNThiZTRhNjJmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDItMjQg
IEphY2sgTGVlICA8c2hpaGNoaWVoX2xlZUBhcHBsZS5jb20+CisKKyAgICAgICAgTnVsbHB0ciBj
cmFzaCBpbiBXZWJDb3JlOjpjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nIHZpYSBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA4MTE1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NjY4NTY1NT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIGlu
c2VydGluZyBhIGxpc3QgYXQgYW4gZWxlbWVudCB3aXRoIGEgbm9uLWxpc3QtaXRlbSBjaGlsZCwg
aWYgdGhlIGVsZW1lbnQgaXMgdW5lZGl0YWJsZSwgc2tpcCBjcmVhdGluZyBsaXN0IGl0ZW0gZm9y
IHRoZSBjaGlsZC4gCisKKyAgICAgICAgKiBmYXN0L2xpc3RzL2luc2VydC1saXN0LXVuZWRpdGFi
bGUtZWxlbWVudC13aXRoLW5vbi1saS1jaGlsZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvbGlzdHMvaW5zZXJ0LWxpc3QtdW5lZGl0YWJsZS1lbGVtZW50LXdpdGgtbm9uLWxp
LWNoaWxkLmh0bWw6IEFkZGVkLgorCiAyMDE5LTEyLTA2ICB5b3Vlbm4gZmFibGV0ICA8eW91ZW5u
QGFwcGxlLmNvbT4KIAogICAgICAgICBQcm90ZWN0IFdlYlJUQyBuZXR3b3JrIG1vbml0b3Jpbmcg
dG8gd2FpdCBmb3JldmVyIGluIGVkZ2UgY2FzZXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvbGlzdHMvaW5zZXJ0LWxpc3QtdW5lZGl0YWJsZS1lbGVtZW50LXdpdGgtbm9uLWxpLWNoaWxk
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbGlzdHMvaW5zZXJ0LWxpc3QtdW5lZGl0
YWJsZS1lbGVtZW50LXdpdGgtbm9uLWxpLWNoaWxkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
Y2RmNjAzOTZjOGUyZDYzZDU5MmY1YWZkNzBlYWM2YzZkNTJlNTVjCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9saXN0cy9pbnNlcnQtbGlzdC11bmVkaXRhYmxlLWVsZW1lbnQt
d2l0aC1ub24tbGktY2hpbGQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3RzIGluc2Vy
dGluZyBvbCBhdCBhbiB1bmVkaXRhYmxlIGVsZW1lbnQgd2l0aCBub24tbGkgY2hpbGQuIFRoZSB0
ZXN0IHBhc3NlcyBpZiBXZWJLaXQgZG9lc24ndCBjcmFzaCBvciBoaXQgYW4gYXNzZXJ0aW9uLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9saXN0cy9pbnNlcnQtbGlzdC11bmVkaXRhYmxl
LWVsZW1lbnQtd2l0aC1ub24tbGktY2hpbGQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbGlzdHMv
aW5zZXJ0LWxpc3QtdW5lZGl0YWJsZS1lbGVtZW50LXdpdGgtbm9uLWxpLWNoaWxkLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTdlZDY4ODU0ODNkMjU4NzU1OGZiMTBhZGNlMTU0NDM3NzgwN2RlZgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbGlzdHMvaW5zZXJ0LWxpc3QtdW5lZGl0YWJs
ZS1lbGVtZW50LXdpdGgtbm9uLWxpLWNoaWxkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPHN0eWxl
PgorYm9keSB7IC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtd3JpdGU7IGJhY2tncm91bmQtaW1h
Z2U6IHVybCgpOyB9Cis8L3N0eWxlPgorPHNjcmlwdD4KKyAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIpCisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIG9ubG9hZCA9IGZ1bmN0
aW9uIGZ1bigpIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2V0UG9zaXRpb24o
SFIpOworICAgICAgICBIUi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRp
b24iKSk7CisgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJpbnNlcnRPcmRlcmVkTGlzdCIs
IGZhbHNlKTsKKyAgICB9Cis8L3NjcmlwdD4KKzxib2R5PjxociBpZD1IUiBjb250ZW50ZWRpdGFi
bGU9ImZhbHNlIj48L2hyPjxzcGFuPlRlc3RzIGluc2VydGluZyBvbCBhdCBhbiB1bmVkaXRhYmxl
IGVsZW1lbnQgd2l0aCBub24tbGkgY2hpbGQuIFRoZSB0ZXN0IHBhc3NlcyBpZiBXZWJLaXQgZG9l
c24ndCBjcmFzaCBvciBoaXQgYW4gYXNzZXJ0aW9uLjwvc3Bhbj4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391723</attachid>
            <date>2020-02-25 23:32:11 -0800</date>
            <delta_ts>2020-02-26 17:01:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208115-20200225233210.patch</filename>
            <type>text/plain</type>
            <size>4261</size>
            <attacher name="Jack">shihchieh_lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFmY2M2NTllMmQ3YzJl
ZGIyZmYwZjYyZDIxNzFhNjdiOTdkNjFjNi4uMTU4MjU4ZjY0MGU4MzlhNzhkZGU4OGZhZjg0YzE0
NDYxZWVhMDNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIwLTAyLTI0ICBKYWNr
IExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxwdHIgY3Jhc2gg
aW4gV2ViQ29yZTo6Y2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyB2aWEgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6Omluc2VydE5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwODExNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY2ODU2NTU+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBpbnNlcnRp
bmcgYSBsaXN0IGF0IGFuIGVsZW1lbnQgd2l0aCBhIG5vbi1saXN0LWl0ZW0gY2hpbGQsIGlmIHRo
ZSBlbGVtZW50IGlzIHVuZWRpdGFibGUsIHNraXAgY3JlYXRpbmcgbGlzdCBpdGVtIGZvciB0aGUg
Y2hpbGQuIAorCisgICAgICAgIFRlc3Q6IGZhc3QvbGlzdHMvaW5zZXJ0LWxpc3QtdW5lZGl0YWJs
ZS1lbGVtZW50LXdpdGgtbm9uLWxpLWNoaWxkLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvSW5z
ZXJ0TGlzdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6
Omxpc3RpZnlQYXJhZ3JhcGgpOgorCiAyMDE5LTEyLTA1ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBGaXggY3NzMS9iYXNpYy9jb250YWlubWVu
dC5odG1sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21t
YW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCmlu
ZGV4IDBhODdkM2QzOTIyYTYwNjg0ZjRhN2ZlMzMyOTVkZTgzYTE4OTViYjMuLjNlMTAzOGFiOTdm
N2JjYWQxOTAyNzdmYmE3OGYwMDZhMjlmZmYyMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCkBAIC0zMzgsNyArMzM4LDcgQEAgUmVmUHRyPEhUTUxF
bGVtZW50PiBJbnNlcnRMaXN0Q29tbWFuZDo6bGlzdGlmeVBhcmFncmFwaChjb25zdCBWaXNpYmxl
UG9zaXRpb24mIG8KICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBo
KG9yaWdpbmFsU3RhcnQsIENhblNraXBPdmVyRWRpdGluZ0JvdW5kYXJ5KTsKICAgICBWaXNpYmxl
UG9zaXRpb24gZW5kID0gZW5kT2ZQYXJhZ3JhcGgoc3RhcnQsIENhblNraXBPdmVyRWRpdGluZ0Jv
dW5kYXJ5KTsKICAgICAKLSAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQor
ICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCkgfHwgIXN0YXJ0LmRlZXBFcXVp
dmFsZW50KCkuY29udGFpbmVyTm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgIWVuZC5kZWVw
RXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIC8vIENoZWNrIGZvciBhZGpvaW5pbmcgbGlzdHMuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
YWVjMDBjYTE4M2RhYTQ2NGI1NDI2MjA5ZmMwN2JjMjhjYTIxYzRkMi4uYmQxYjVmNjczOTVjZjEz
ZDNmODE0N2JlMTgyOGUxYzU4YmU0YTYyZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIwLTAy
LTI0ICBKYWNrIExlZSAgPHNoaWhjaGllaF9sZWVAYXBwbGUuY29tPgorCisgICAgICAgIE51bGxw
dHIgY3Jhc2ggaW4gV2ViQ29yZTo6Y2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyB2aWEgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwODExNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY2ODU2
NTU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hl
biBpbnNlcnRpbmcgYSBsaXN0IGF0IGFuIGVsZW1lbnQgd2l0aCBhIG5vbi1saXN0LWl0ZW0gY2hp
bGQsIGlmIHRoZSBlbGVtZW50IGlzIHVuZWRpdGFibGUsIHNraXAgY3JlYXRpbmcgbGlzdCBpdGVt
IGZvciB0aGUgY2hpbGQuIAorCisgICAgICAgICogZmFzdC9saXN0cy9pbnNlcnQtbGlzdC11bmVk
aXRhYmxlLWVsZW1lbnQtd2l0aC1ub24tbGktY2hpbGQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2xpc3RzL2luc2VydC1saXN0LXVuZWRpdGFibGUtZWxlbWVudC13aXRoLW5v
bi1saS1jaGlsZC5odG1sOiBBZGRlZC4KKwogMjAxOS0xMi0wNiAgeW91ZW5uIGZhYmxldCAgPHlv
dWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUHJvdGVjdCBXZWJSVEMgbmV0d29yayBtb25pdG9y
aW5nIHRvIHdhaXQgZm9yZXZlciBpbiBlZGdlIGNhc2VzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2xpc3RzL2luc2VydC1saXN0LXVuZWRpdGFibGUtZWxlbWVudC13aXRoLW5vbi1saS1j
aGlsZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2xpc3RzL2luc2VydC1saXN0LXVu
ZWRpdGFibGUtZWxlbWVudC13aXRoLW5vbi1saS1jaGlsZC1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOGNkZjYwMzk2YzhlMmQ2M2Q1OTJmNWFmZDcwZWFjNmM2ZDUyZTU1YwotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbGlzdHMvaW5zZXJ0LWxpc3QtdW5lZGl0YWJsZS1lbGVt
ZW50LXdpdGgtbm9uLWxpLWNoaWxkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitUZXN0cyBp
bnNlcnRpbmcgb2wgYXQgYW4gdW5lZGl0YWJsZSBlbGVtZW50IHdpdGggbm9uLWxpIGNoaWxkLiBU
aGUgdGVzdCBwYXNzZXMgaWYgV2ViS2l0IGRvZXNuJ3QgY3Jhc2ggb3IgaGl0IGFuIGFzc2VydGlv
bi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbGlzdHMvaW5zZXJ0LWxpc3QtdW5lZGl0
YWJsZS1lbGVtZW50LXdpdGgtbm9uLWxpLWNoaWxkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2xp
c3RzL2luc2VydC1saXN0LXVuZWRpdGFibGUtZWxlbWVudC13aXRoLW5vbi1saS1jaGlsZC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjE3ZWQ2ODg1NDgzZDI1ODc1NThmYjEwYWRjZTE1NDQzNzc4MDdkZWYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xpc3RzL2luc2VydC1saXN0LXVuZWRp
dGFibGUtZWxlbWVudC13aXRoLW5vbi1saS1jaGlsZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxz
dHlsZT4KK2JvZHkgeyAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLXdyaXRlOyBiYWNrZ3JvdW5k
LWltYWdlOiB1cmwoKTsgfQorPC9zdHlsZT4KKzxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICBvbmxvYWQgPSBm
dW5jdGlvbiBmdW4oKSB7CisgICAgICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLnNldFBvc2l0
aW9uKEhSKTsKKyAgICAgICAgSFIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
b3B0aW9uIikpOworICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiaW5zZXJ0T3JkZXJlZExp
c3QiLCBmYWxzZSk7CisgICAgfQorPC9zY3JpcHQ+Cis8Ym9keT48aHIgaWQ9SFIgY29udGVudGVk
aXRhYmxlPSJmYWxzZSI+PC9ocj48c3Bhbj5UZXN0cyBpbnNlcnRpbmcgb2wgYXQgYW4gdW5lZGl0
YWJsZSBlbGVtZW50IHdpdGggbm9uLWxpIGNoaWxkLiBUaGUgdGVzdCBwYXNzZXMgaWYgV2ViS2l0
IGRvZXNuJ3QgY3Jhc2ggb3IgaGl0IGFuIGFzc2VydGlvbi48L3NwYW4+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>