<?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>68866</bug_id>
          
          <creation_ts>2011-09-26 21:37:32 -0700</creation_ts>
          <short_desc>CompositeEditCommand::prune should remove subtree at once</short_desc>
          <delta_ts>2011-09-27 13:50:40 -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>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>68874</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cshu</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>kenneth</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan</cc>
    
    <cc>tkent</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>473672</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-26 21:37:32 -0700</bug_when>
    <thetext>The way CompositeEditCommand::prune is implemented now is quite inefficient. It removes the deepest node and climb up the tree to remove ancestors. Instead, we can just figure out the highest node to remove and get rid of the subtree at once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473673</commentid>
    <comment_count>1</comment_count>
      <attachid>108786</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-26 21:53:42 -0700</bug_when>
    <thetext>Created attachment 108786
refactoring</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473985</commentid>
    <comment_count>2</comment_count>
      <attachid>108786</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-27 09:36:59 -0700</bug_when>
    <thetext>Comment on attachment 108786
refactoring

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

review- because of the traverseNextSibling issue, and in part due to lack of test

&gt; Source/WebCore/ChangeLog:9
&gt; +        This reduces the number of node removals from O(n) to O(1) where n is the depth of the tree.

Can we make a performance test demonstrating this fix? Ojan’s performance harness typically makes that easy.

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:254
&gt; +            n = n-&gt;nextSibling();

I think you want:

    n = n-&gt;traverseNextSibling(node);

here, not just nextSibling.

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:277
&gt; +void CompositeEditCommand::prune(PassRefPtr&lt;Node&gt; prpNode)

Normally we only use the &quot;prp&quot; naming if we are transferring ownership to a local variable with a simpler name. Since we’re not doing that here, a prp prefix is not necessary.

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:280
&gt; +        removeNode(highestNodeToRemove);

This should probably have a “release” in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474001</commentid>
    <comment_count>3</comment_count>
      <attachid>108786</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 09:46:11 -0700</bug_when>
    <thetext>Comment on attachment 108786
refactoring

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

&gt;&gt; Source/WebCore/editing/CompositeEditCommand.cpp:254
&gt;&gt; +            n = n-&gt;nextSibling();
&gt; 
&gt; I think you want:
&gt; 
&gt;     n = n-&gt;traverseNextSibling(node);
&gt; 
&gt; here, not just nextSibling.

Ah, you&apos;re right. Will fix.

&gt;&gt; Source/WebCore/editing/CompositeEditCommand.cpp:277
&gt;&gt; +void CompositeEditCommand::prune(PassRefPtr&lt;Node&gt; prpNode)
&gt; 
&gt; Normally we only use the &quot;prp&quot; naming if we are transferring ownership to a local variable with a simpler name. Since we’re not doing that here, a prp prefix is not necessary.

Will fix.

&gt;&gt; Source/WebCore/editing/CompositeEditCommand.cpp:280
&gt;&gt; +        removeNode(highestNodeToRemove);
&gt; 
&gt; This should probably have a “release” in it.

Good point. Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474011</commentid>
    <comment_count>4</comment_count>
      <attachid>108786</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 09:53:31 -0700</bug_when>
    <thetext>Comment on attachment 108786
refactoring

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        This reduces the number of node removals from O(n) to O(1) where n is the depth of the tree.
&gt; 
&gt; Can we make a performance test demonstrating this fix? Ojan’s performance harness typically makes that easy.

Unfortunately not. This function isn&apos;t exposed to DRT or is used in any obvious way by an editing command to test it.

I could tweak breakOutOfEmptyMailBlockquotedParagraph to call this function but that seems like a bad testing strategy because any changes to breakOutOfEmptyMailBlockquotedParagraph will invalidate the test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474094</commentid>
    <comment_count>5</comment_count>
      <attachid>108871</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 11:14:14 -0700</bug_when>
    <thetext>Created attachment 108871
Fixed per comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474096</commentid>
    <comment_count>6</comment_count>
      <attachid>108871</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 11:15:21 -0700</bug_when>
    <thetext>Comment on attachment 108871
Fixed per comments

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

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:267
&gt; +    Node* rootEditableElement = node ? node-&gt;rootEditableElement() : 0;

This will make highestNodeToRemoveInPruning O(n) instead of O(n^2).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474202</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 13:50:40 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/96150.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108786</attachid>
            <date>2011-09-26 21:53:42 -0700</date>
            <delta_ts>2011-09-27 11:14:06 -0700</delta_ts>
            <desc>refactoring</desc>
            <filename>fix68866</filename>
            <type>text/plain</type>
            <size>4196</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2MDY4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDktMjYgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
OnBydW5lIHNob3VsZCByZW1vdmUgc3VidHJlZSBhdCBvbmNlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODg2NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dHJhY3RlZCB0aGUgbG9naWMgdG8gZmluZCB0
aGUgaGlnaGVzdCBhbmNlc3RvciB0byByZW1vdmUgYXMgaGlnaGVzdE5vZGVUb1JlbW92ZUluUHJ1
bmluZyBmcm9tIHBydW5lLgorICAgICAgICBUaGlzIHJlZHVjZXMgdGhlIG51bWJlciBvZiBub2Rl
IHJlbW92YWxzIGZyb20gTyhuKSB0byBPKDEpIHdoZXJlIG4gaXMgdGhlIGRlcHRoIG9mIHRoZSB0
cmVlLgorCisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpoYXNBUmVuZGVyZWREZXNjZW5kYW50KTogVGFrZXMgZXhjbHVkZWROb2Rl
IGluIGFkZGl0aW9uIHRvIG5vZGUuIGV4Y2x1ZGVkTm9kZSBpcyB1c2VkIHRvIGlnbm9yZQorICAg
ICAgICB0aGUgY2hpbGQgbm9kZSBmcm9tIHdoaWNoIHdlIGNsaW1iZWQgdXAgdGhlIHRyZWUgaW4g
aGlnaGVzdE5vZGVUb1JlbW92ZUluUHJ1bmluZy4KKyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RO
b2RlVG9SZW1vdmVJblBydW5pbmcpOiBFeHRyYWN0ZWQgZnJvbSBwcnVuZS4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcnVuZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcHR5TWFpbEJsb2NrcXVvdGVkUGFyYWdy
YXBoKToKKwogMjAxMS0wOS0yNiAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW2Nocm9taXVtXSBNYWtlIENDVGhyZWFkUHJveHkgZHJhdwpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDk1
MDMxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI0NywxMCArMjQ3LDEzIEBACiAgICAgcmV0dXJuIGNvbW1hbmQt
PnNwYW5FbGVtZW50KCk7CiB9CiAKLXN0YXRpYyBib29sIGhhc0FSZW5kZXJlZERlc2NlbmRhbnQo
Tm9kZSogbm9kZSkKK3N0YXRpYyBib29sIGhhc0FSZW5kZXJlZERlc2NlbmRhbnQoTm9kZSogbm9k
ZSwgTm9kZSogZXhjbHVkZWROb2RlKQogewotICAgIE5vZGUqIG4gPSBub2RlLT5maXJzdENoaWxk
KCk7Ci0gICAgd2hpbGUgKG4pIHsKKyAgICBmb3IgKE5vZGUqIG4gPSBub2RlLT5maXJzdENoaWxk
KCk7IG47KSB7CisgICAgICAgIGlmIChuID09IGV4Y2x1ZGVkTm9kZSkgeworICAgICAgICAgICAg
biA9IG4tPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQog
ICAgICAgICBpZiAobi0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShub2RlKTsKQEAgLTI1OCwyMiArMjYxLDI1IEBA
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcnVu
ZShQYXNzUmVmUHRyPE5vZGU+IHBycE5vZGUpCitzdGF0aWMgTm9kZSogaGlnaGVzdE5vZGVUb1Jl
bW92ZUluUHJ1bmluZyhOb2RlKiBub2RlKQogewotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gcHJw
Tm9kZTsKLQotICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIC8vIElmIHlvdSBjaGFuZ2UgdGhp
cyBydWxlIHlvdSBtYXkgaGF2ZSB0byBhZGQgYW4gdXBkYXRlTGF5b3V0KCkgaGVyZS4KLSAgICAg
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlm
IChyZW5kZXJlciAmJiAoIXJlbmRlcmVyLT5jYW5IYXZlQ2hpbGRyZW4oKSB8fCBoYXNBUmVuZGVy
ZWREZXNjZW5kYW50KG5vZGUuZ2V0KCkpIHx8IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9
PSBub2RlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICBSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gbmV4dCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgcmVt
b3ZlTm9kZShub2RlKTsKLSAgICAgICAgbm9kZSA9IG5leHQ7CisgICAgTm9kZSogcHJldmlvdXNO
b2RlID0gMDsKKyAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewor
ICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCkpIHsK
KyAgICAgICAgICAgIGlmICghcmVuZGVyZXItPmNhbkhhdmVDaGlsZHJlbigpIHx8IGhhc0FSZW5k
ZXJlZERlc2NlbmRhbnQobm9kZSwgcHJldmlvdXNOb2RlKSB8fCBub2RlLT5yb290RWRpdGFibGVF
bGVtZW50KCkgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNOb2RlOwor
ICAgICAgICB9CisgICAgICAgIHByZXZpb3VzTm9kZSA9IG5vZGU7CiAgICAgfQorICAgIHJldHVy
biAwOwogfQogCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcnVuZShQYXNzUmVmUHRyPE5v
ZGU+IHBycE5vZGUpCit7CisgICAgaWYgKFJlZlB0cjxOb2RlPiBoaWdoZXN0Tm9kZVRvUmVtb3Zl
ID0gaGlnaGVzdE5vZGVUb1JlbW92ZUluUHJ1bmluZyhwcnBOb2RlLmdldCgpKSkKKyAgICAgICAg
cmVtb3ZlTm9kZShoaWdoZXN0Tm9kZVRvUmVtb3ZlKTsKK30KKwogdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6c3BsaXRUZXh0Tm9kZShQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2lnbmVkIG9m
ZnNldCkKIHsKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShTcGxpdFRleHROb2RlQ29tbWFu
ZDo6Y3JlYXRlKG5vZGUsIG9mZnNldCkpOwpAQCAtMTE2NSwxMSArMTE3MSw5IEBACiAgICAgLy8g
QSBsaW5lIGJyZWFrIGlzIGVpdGhlciBhIGJyIG9yIGEgcHJlc2VydmVkIG5ld2xpbmUuCiAgICAg
QVNTRVJUKGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpIHx8IChj
YXJldFBvcy5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkgJiYgY2FyZXRQb3MuZGVwcmVj
YXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkpKTsKICAg
ICAKLSAgICBpZiAoY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykp
IHsKLSAgICAgICAgUG9zaXRpb24gYmVmb3JlQlIocG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUo
Y2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKSkpOwotICAgICAgICByZW1vdmVOb2RlKGNhcmV0UG9z
LmRlcHJlY2F0ZWROb2RlKCkpOwotICAgICAgICBwcnVuZShiZWZvcmVCUi5kZXByZWNhdGVkTm9k
ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5v
ZGUoKSkgeworICAgIGlmIChjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJy
VGFnKSkKKyAgICAgICAgcmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKGNhcmV0UG9zLmRlcHJl
Y2F0ZWROb2RlKCkpOworICAgIGVsc2UgaWYgKGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCktPmlz
VGV4dE5vZGUoKSkgewogICAgICAgICBBU1NFUlQoY2FyZXRQb3MuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSA9PSAwKTsKICAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0
Kj4oY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIENvbnRhaW5lck5vZGUqIHBh
cmVudE5vZGUgPSB0ZXh0Tm9kZS0+cGFyZW50Tm9kZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108871</attachid>
            <date>2011-09-27 11:14:14 -0700</date>
            <delta_ts>2011-09-27 13:40:56 -0700</delta_ts>
            <desc>Fixed per comments</desc>
            <filename>bug-68866-20110927111412.patch</filename>
            <type>text/plain</type>
            <size>3976</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2MTMzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDktMjcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
OnBydW5lIHNob3VsZCByZW1vdmUgc3VidHJlZSBhdCBvbmNlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODg2NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAg
ICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpoYXNBUmVuZGVyZWREZXNjZW5kYW50KToKKyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3ROb2Rl
VG9SZW1vdmVJblBydW5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1h
bmQ6OnBydW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVh
a091dE9mRW1wdHlNYWlsQmxvY2txdW90ZWRQYXJhZ3JhcGgpOgorCiAyMDExLTA5LTI3ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIENsZWFuIHVwIGhv
dyBGcmFtZVZpZXcgYWNjZXNzZXMgdGhlIFJlbmRlclZpZXcKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiA5NjExMykK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDcsMTAgKzI0NywxMyBAQCBIVE1MRWxlbWVudCogQ29tcG9zaXRlRWRp
dENvbW1hbmQ6OnJlcGxhCiAgICAgcmV0dXJuIGNvbW1hbmQtPnNwYW5FbGVtZW50KCk7CiB9CiAK
LXN0YXRpYyBib29sIGhhc0FSZW5kZXJlZERlc2NlbmRhbnQoTm9kZSogbm9kZSkKK3N0YXRpYyBi
b29sIGhhc0FSZW5kZXJlZERlc2NlbmRhbnQoTm9kZSogbm9kZSwgTm9kZSogZXhjbHVkZWROb2Rl
KQogewotICAgIE5vZGUqIG4gPSBub2RlLT5maXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKG4pIHsK
KyAgICBmb3IgKE5vZGUqIG4gPSBub2RlLT5maXJzdENoaWxkKCk7IG47KSB7CisgICAgICAgIGlm
IChuID09IGV4Y2x1ZGVkTm9kZSkgeworICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dFNp
Ymxpbmcobm9kZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogICAgICAgICBp
ZiAobi0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBuID0g
bi0+dHJhdmVyc2VOZXh0Tm9kZShub2RlKTsKQEAgLTI1OCwyMCArMjYxLDI0IEBAIHN0YXRpYyBi
b29sIGhhc0FSZW5kZXJlZERlc2NlbmRhbnQoTm9kZSoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBydW5lKFBhc3NSZWZQdHI8Tm9kZT4gcHJwTm9k
ZSkKK3N0YXRpYyBOb2RlKiBoaWdoZXN0Tm9kZVRvUmVtb3ZlSW5QcnVuaW5nKE5vZGUqIG5vZGUp
CiB7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBwcnBOb2RlOwotCi0gICAgd2hpbGUgKG5vZGUp
IHsKLSAgICAgICAgLy8gSWYgeW91IGNoYW5nZSB0aGlzIHJ1bGUgeW91IG1heSBoYXZlIHRvIGFk
ZCBhbiB1cGRhdGVMYXlvdXQoKSBoZXJlLgotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyICYmICghcmVuZGVyZXIt
PmNhbkhhdmVDaGlsZHJlbigpIHx8IGhhc0FSZW5kZXJlZERlc2NlbmRhbnQobm9kZS5nZXQoKSkg
fHwgbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IG5vZGUpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBuZXh0ID0g
bm9kZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICByZW1vdmVOb2RlKG5vZGUpOwotICAgICAgICBu
b2RlID0gbmV4dDsKKyAgICBOb2RlKiBwcmV2aW91c05vZGUgPSAwOworICAgIE5vZGUqIHJvb3RF
ZGl0YWJsZUVsZW1lbnQgPSBub2RlID8gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDogMDsK
KyAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBp
ZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAg
ICAgIGlmICghcmVuZGVyZXItPmNhbkhhdmVDaGlsZHJlbigpIHx8IGhhc0FSZW5kZXJlZERlc2Nl
bmRhbnQobm9kZSwgcHJldmlvdXNOb2RlKSB8fCByb290RWRpdGFibGVFbGVtZW50ID09IG5vZGUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzTm9kZTsKKyAgICAgICAgfQorICAgICAg
ICBwcmV2aW91c05vZGUgPSBub2RlOwogICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6cHJ1bmUoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQoreworICAg
IGlmIChSZWZQdHI8Tm9kZT4gaGlnaGVzdE5vZGVUb1JlbW92ZSA9IGhpZ2hlc3ROb2RlVG9SZW1v
dmVJblBydW5pbmcobm9kZS5nZXQoKSkpCisgICAgICAgIHJlbW92ZU5vZGUoaGlnaGVzdE5vZGVU
b1JlbW92ZS5yZWxlYXNlKCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxp
dFRleHROb2RlKFBhc3NSZWZQdHI8VGV4dD4gbm9kZSwgdW5zaWduZWQgb2Zmc2V0KQpAQCAtMTE2
NSwxMSArMTE3Miw5IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXAK
ICAgICAvLyBBIGxpbmUgYnJlYWsgaXMgZWl0aGVyIGEgYnIgb3IgYSBwcmVzZXJ2ZWQgbmV3bGlu
ZS4KICAgICBBU1NFUlQoY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRh
ZykgfHwgKGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSAmJiBjYXJldFBv
cy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUo
KSkpOwogICAgIAotICAgIGlmIChjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1l
KGJyVGFnKSkgewotICAgICAgICBQb3NpdGlvbiBiZWZvcmVCUihwb3NpdGlvbkluUGFyZW50QmVm
b3JlTm9kZShjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpKSk7Ci0gICAgICAgIHJlbW92ZU5vZGUo
Y2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKSk7Ci0gICAgICAgIHBydW5lKGJlZm9yZUJSLmRlcHJl
Y2F0ZWROb2RlKCkpOwotICAgIH0gZWxzZSBpZiAoY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+
aXNUZXh0Tm9kZSgpKSB7CisgICAgaWYgKGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCktPmhhc1Rh
Z05hbWUoYnJUYWcpKQorICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoY2FyZXRQ
b3MuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgZWxzZSBpZiAoY2FyZXRQb3MuZGVwcmVjYXRlZE5v
ZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgIEFTU0VSVChjYXJldFBvcy5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpID09IDApOwogICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19j
YXN0PFRleHQqPihjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgQ29udGFpbmVy
Tm9kZSogcGFyZW50Tm9kZSA9IHRleHROb2RlLT5wYXJlbnROb2RlKCk7Cg==
</data>
<flag name="review"
          id="105945"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>