<?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>93664</bug_id>
          
          <creation_ts>2012-08-09 16:08:24 -0700</creation_ts>
          <short_desc>Add copy constructor to CSSSelector</short_desc>
          <delta_ts>2012-08-13 22:43:06 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>79939</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Shane Stephens">shanestephens</reporter>
          <assigned_to name="Shane Stephens">shanestephens</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>eric</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>691964</commentid>
    <comment_count>0</comment_count>
    <who name="Shane Stephens">shanestephens</who>
    <bug_when>2012-08-09 16:08:24 -0700</bug_when>
    <thetext>Add copy constructor to CSSSelector</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691968</commentid>
    <comment_count>1</comment_count>
      <attachid>157572</attachid>
    <who name="Shane Stephens">shanestephens</who>
    <bug_when>2012-08-09 16:16:43 -0700</bug_when>
    <thetext>Created attachment 157572
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692003</commentid>
    <comment_count>2</comment_count>
      <attachid>157572</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-08-09 17:01:16 -0700</bug_when>
    <thetext>Comment on attachment 157572
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        .a { &amp; .b { ... } } results in two rules: .a { } and .a .b { ... }, and the .a component
&gt; +        is present in both rules. For this reason, a copy constructor is required for CSS Selectors.

Would it be possible for the .a component to be shared by both rules instead of making a copy?

&gt; Source/WebCore/css/CSSSelector.h:34
&gt; +    class RefcountedCSSSelectorList : public RefCounted&lt;RefcountedCSSSelectorList&gt; {

Why make a wrapper class instead of making CSSselectorList refcounted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692028</commentid>
    <comment_count>3</comment_count>
    <who name="Shane Stephens">shanestephens</who>
    <bug_when>2012-08-09 17:34:13 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        .a { &amp; .b { ... } } results in two rules: .a { } and .a .b { ... }, and the .a component
&gt; &gt; +        is present in both rules. For this reason, a copy constructor is required for CSS Selectors.
&gt;
&gt; Would it be possible for the .a component to be shared by both rules instead of making a copy?

After parsing, CSSSelectors are memcpy&apos;d into arrays in CSSSelectorLists before being used for rendering. This memcpy (see CSSSelector.h:move for the implementation, and CSSSelectorList.cpp:adoptSelectorVector for its use) frees the old location without destructing the class after moving it. Having a shared CSSSelector doesn&apos;t play nice with this approach as we&apos;d need to reference-count the parsed version in order to decide whether to free after memcpy or not.

&gt; &gt; Source/WebCore/css/CSSSelector.h:34
&gt; &gt; +    class RefcountedCSSSelectorList : public RefCounted&lt;RefcountedCSSSelectorList&gt; {
&gt;
&gt; Why make a wrapper class instead of making CSSselectorList refcounted?

I tried making CSSSelectorList refcounted initially but something went wrong. Unfortunately I can&apos;t remember what. I&apos;ll have another go and see what happens, so that at least we can record the rationale in the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692045</commentid>
    <comment_count>4</comment_count>
    <who name="Shane Stephens">shanestephens</who>
    <bug_when>2012-08-09 17:53:20 -0700</bug_when>
    <thetext>I think the issue is that CSSSelectorLists are explicitly copied around (they have a copy constructor, which doesn&apos;t play nice with RefCounted, right?). Maybe I should be looking at a bigger refactor here, but I&apos;m uncomfortable with poking at so much of the innards of the CSS Engine - I suspect a lot of these hacks (copying CSSSelectors, copying CSSSelectorLists, etc.) are here for performance reasons.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692052</commentid>
    <comment_count>5</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-08-09 17:59:51 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I think the issue is that CSSSelectorLists are explicitly copied around (they have a copy constructor, which doesn&apos;t play nice with RefCounted, right?). Maybe I should be looking at a bigger refactor here, but I&apos;m uncomfortable with poking at so much of the innards of the CSS Engine - I suspect a lot of these hacks (copying CSSSelectors, copying CSSSelectorLists, etc.) are here for performance reasons.

I think it would be fine to do a refactor that switches from using a copy constructor to a copy() method or clone() method and use WTF_MAKE_NONCOPYABLE to prevent accidental copying.  We do this in other classes like StyleRule or CSSValueList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693354</commentid>
    <comment_count>6</comment_count>
      <attachid>157572</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-08-12 20:51:56 -0700</bug_when>
    <thetext>Comment on attachment 157572
Patch

r- while we investigate making CSSSelectorList refcounted.  That might be a patch by itself (separate from the CSSSelector copy constructor changes).

The perf test in PerformanceTests/Parser/css-parser-yui.html should exercise this pretty well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694525</commentid>
    <comment_count>7</comment_count>
    <who name="Shane Stephens">shanestephens</who>
    <bug_when>2012-08-13 22:43:06 -0700</bug_when>
    <thetext>CSSSelector already has a copy constructor that works quite well. We should just use that.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157572</attachid>
            <date>2012-08-09 16:16:43 -0700</date>
            <delta_ts>2012-08-12 20:51:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93664-20120810091615.patch</filename>
            <type>text/plain</type>
            <size>7660</size>
            <attacher name="Shane Stephens">shanestephens</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWNiODQ3MTIyMTc5NTNh
MjE1ZjcwZmE2ZDVlOWFhMmE5MzdlZjEzNy4uMmMyOGQ5MDkzMmQxMGQ2OTUwMTFlYmY3ODQwYzcy
MjFhYzk3OGQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQzIEBACiAyMDEyLTA4LTA5ICBTaGFu
ZSBTdGVwaGVucyAgPHNoYW5lc3RlcGhlbnNAZ29vZ2xlLmNvbT4KIAorICAgICAgICBBZGQgY29w
eSBjb25zdHJ1Y3RvciB0byBDU1NTZWxlY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM2NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHByZXBhcmF0b3J5IHdvcmsgZm9yIENTUyBIaWVy
YXJjaGllcyAoc2VlIHdrYi51Zy83OTkzOSkuCisgICAgICAgIFdpdGggQ1NTIEhpZXJhcmhjaWVz
LCBpbmRpdmlkdWFsIENTUyBTZWxlY3RvcnMgYXJlIHVzZWQgaW4gbXVsdGlwbGUgcnVsZXMuIEZv
ciBleGFtcGxlLAorICAgICAgICAuYSB7ICYgLmIgeyAuLi4gfSB9IHJlc3VsdHMgaW4gdHdvIHJ1
bGVzOiAuYSB7IH0gYW5kIC5hIC5iIHsgLi4uIH0sIGFuZCB0aGUgLmEgY29tcG9uZW50CisgICAg
ICAgIGlzIHByZXNlbnQgaW4gYm90aCBydWxlcy4gRm9yIHRoaXMgcmVhc29uLCBhIGNvcHkgY29u
c3RydWN0b3IgaXMgcmVxdWlyZWQgZm9yIENTUyBTZWxlY3RvcnMuCisKKyAgICAgICAgV2hlbiBj
b3B5aW5nIENTUyBTZWxlY3RvcnMgd2l0aCBhbiBtX3JhcmVEYXRhLT5tX3NlbGVjdG9yTGlzdCAo
aS5lLiBzZWxlY3RvcnMgdGhhdCByZXByZXNlbnQKKyAgICAgICAgOi13ZWJraXQtYW55IG9yIDpu
b3QgY29tcG9uZW50cyksIHRoZSBzZWxlY3Rvckxpc3QgY2FuIGJlIGNvbnNpZGVyZWQgaW1tdXRh
YmxlIGFuZCBzaGFyZWQuCisgICAgICAgIEhvd2V2ZXIsIHRvIGVuc3VyZSB0aGUgc2VsZWN0b3JM
aXN0IGlzIGRlc3Ryb3llZCBhcHByb3ByaWF0ZWx5LCB0aGlzIHBhdGNoIHdyYXBzIGl0IGluIGEK
KyAgICAgICAgY2xhc3MgdGhhdCBpbmhlcml0cyBmcm9tIFJlZkNvdW50ZWQuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIGFzIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9u
YWxpdHkuIAorCisgICAgICAgICogY3NzL0NTU1NlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlbGVjdG9yOjpDU1NTZWxlY3Rvcik6IG5ldyBjb3B5IGNvbnN0cnVjdG9yIGZvciBD
U1NTZWxlY3RvcgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxl
Y3Rvcjo6c2V0U2VsZWN0b3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZmNvdW50ZWRDU1NT
ZWxlY3Rvckxpc3Q6On5SZWZjb3VudGVkQ1NTU2VsZWN0b3JMaXN0KToKKworICAgICAgICAqIGNz
cy9DU1NTZWxlY3Rvci5oOgorICAgICAgICBBIFJlZkNvdW50ZWQgc3ViY2xhc3MgdGhhdCB3cmFw
cyBDU1NTZWxlY3Rvckxpc3RzIHNvIHRoZXkgY2FuIGJlIHNoYXJlZAorICAgICAgICBiZXR3ZWVu
IGNvcGllZCBDU1NTZWxlY3RvciBpbnN0YW5jZXMuCisgICAgICAgIChSZWZjb3VudGVkQ1NTU2Vs
ZWN0b3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZmNvdW50ZWRDU1NTZWxlY3Rvckxpc3Q6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWZjb3VudGVkQ1NTU2VsZWN0b3JMaXN0Ojpn
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVmY291bnRlZENTU1NlbGVjdG9yTGlzdDo6UmVmY291
bnRlZENTU1NlbGVjdG9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENTU1Nl
bGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpzZWxlY3Rvckxpc3QpOgor
ICAgICAgICAoUmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnNldFZh
bHVlKToKKworMjAxMi0wOC0wOSAgU2hhbmUgU3RlcGhlbnMgIDxzaGFuZXN0ZXBoZW5zQGdvb2ds
ZS5jb20+CisKICAgICAgICAgQ29udmVydCBDU1NQYXJzZXIncyBtX3JldXNhYmxlU2VsZWN0b3JW
ZWN0b3IgdG8gT3duUHRyIGFuZCByZW5hbWUgdG8gbV9zZWxlY3RvclZlY3Rvci4KICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNTc0CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU2VsZWN0b3IuY3BwCmluZGV4IDEzNDc5YjY0MGFiOTYyN2JjMTViYWNjOWVhMmQ3NzQz
NjA2ZDljY2UuLjFlOWEzZGY2MDgwNDJkNDFjZDU3NjBjZjIzZGU1MmZhNmNhMDMyNDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcApAQCAtMzgsNiArMzgsMjkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitDU1NTZWxlY3Rvcjo6Q1NT
U2VsZWN0b3IoQ1NTU2VsZWN0b3IqIGNvcHkpCisgICAgOiBtX3JlbGF0aW9uKGNvcHktPm1fcmVs
YXRpb24pCisgICAgLCBtX21hdGNoKGNvcHktPm1fbWF0Y2gpCisgICAgLCBtX3BzZXVkb1R5cGUo
Y29weS0+bV9wc2V1ZG9UeXBlKQorICAgICwgbV9wYXJzZWROdGgoY29weS0+bV9wYXJzZWROdGgp
CisgICAgLCBtX2lzTGFzdEluU2VsZWN0b3JMaXN0KGNvcHktPm1faXNMYXN0SW5TZWxlY3Rvckxp
c3QpCisgICAgLCBtX2lzTGFzdEluVGFnSGlzdG9yeShjb3B5LT5tX2lzTGFzdEluVGFnSGlzdG9y
eSkKKyAgICAsIG1faXNGb3JQYWdlKGNvcHktPm1faXNGb3JQYWdlKQorICAgICwgbV90YWcoY29w
eS0+bV90YWcpCit7CisgICAgc2V0VmFsdWUoY29weS0+dmFsdWUoKSk7CisKKyAgICBpZiAoY29w
eS0+bV9oYXNSYXJlRGF0YSkgeworICAgICAgICBjcmVhdGVSYXJlRGF0YSgpOworICAgICAgICBt
X2RhdGEubV9yYXJlRGF0YS0+bV9hID0gY29weS0+bV9kYXRhLm1fcmFyZURhdGEtPm1fYTsKKyAg
ICAgICAgbV9kYXRhLm1fcmFyZURhdGEtPm1fYiA9IGNvcHktPm1fZGF0YS5tX3JhcmVEYXRhLT5t
X2I7CisgICAgICAgIG1fZGF0YS5tX3JhcmVEYXRhLT5tX2F0dHJpYnV0ZSA9IGNvcHktPm1fZGF0
YS5tX3JhcmVEYXRhLT5tX2F0dHJpYnV0ZTsKKyAgICAgICAgbV9kYXRhLm1fcmFyZURhdGEtPm1f
YXJndW1lbnQgPSBjb3B5LT5tX2RhdGEubV9yYXJlRGF0YS0+bV9hcmd1bWVudDsKKyAgICAgICAg
aWYgKGNvcHktPm1fZGF0YS5tX3JhcmVEYXRhLT5tX3NlbGVjdG9yTGlzdC5nZXQoKSkKKyAgICAg
ICAgICAgIG1fZGF0YS5tX3JhcmVEYXRhLT5tX3NlbGVjdG9yTGlzdCA9IGNvcHktPm1fZGF0YS5t
X3JhcmVEYXRhLT5tX3NlbGVjdG9yTGlzdDsKKyAgICB9Cit9CisKIHZvaWQgQ1NTU2VsZWN0b3I6
OmNyZWF0ZVJhcmVEYXRhKCkKIHsKICAgICBpZiAobV9oYXNSYXJlRGF0YSkKQEAgLTY0OCw3ICs2
NzEsNyBAQCB2b2lkIENTU1NlbGVjdG9yOjpzZXRBcmd1bWVudChjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlKQogdm9pZCBDU1NTZWxlY3Rvcjo6c2V0U2VsZWN0b3JMaXN0KFBhc3NPd25QdHI8Q1NT
U2VsZWN0b3JMaXN0PiBzZWxlY3Rvckxpc3QpCiB7CiAgICAgY3JlYXRlUmFyZURhdGEoKTsKLSAg
ICBtX2RhdGEubV9yYXJlRGF0YS0+bV9zZWxlY3Rvckxpc3QgPSBzZWxlY3Rvckxpc3Q7CisgICAg
bV9kYXRhLm1fcmFyZURhdGEtPm1fc2VsZWN0b3JMaXN0ID0gUmVmY291bnRlZENTU1NlbGVjdG9y
TGlzdDo6Y3JlYXRlKHNlbGVjdG9yTGlzdC5sZWFrUHRyKCkpOwogfQogCiBib29sIENTU1NlbGVj
dG9yOjpwYXJzZU50aCgpCkBAIC03MDcsNiArNzMwLDEyIEBAIENTU1NlbGVjdG9yOjpSYXJlRGF0
YTo6flJhcmVEYXRhKCkKICAgICAgICAgbV92YWx1ZS0+ZGVyZWYoKTsKIH0KIAorCitSZWZjb3Vu
dGVkQ1NTU2VsZWN0b3JMaXN0Ojp+UmVmY291bnRlZENTU1NlbGVjdG9yTGlzdCgpCit7CisgICAg
ZGVsZXRlIG1faW1wbDsKK30KKwogLy8gYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHBhcnNpbmcgbnRo
LWFyZ3VtZW50cwogYm9vbCBDU1NTZWxlY3Rvcjo6UmFyZURhdGE6OnBhcnNlTnRoKCkKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlbGVjdG9yLmgKaW5kZXggMmU5ZTU5MDhmY2QxZWUxMzUyZTkzNjc3MjAyNWEy
ODZhZWE2YmI1Yy4uODA3MmUzYzc5NDE0MjBmMDIzZjkzMmYyYmVlNWJlMmZhY2FiZTI0ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NlbGVjdG9yLmgKQEAgLTMxLDYgKzMxLDI1IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgQ1NTU2VsZWN0b3JMaXN0OwogCisgICAgY2xhc3MgUmVmY291bnRl
ZENTU1NlbGVjdG9yTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPFJlZmNvdW50ZWRDU1NTZWxlY3Rv
ckxpc3Q+IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UmVmY291bnRlZENTU1NlbGVjdG9yTGlzdD4gY3JlYXRlKENTU1NlbGVjdG9yTGlzdCogaW1wbCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlZmNv
dW50ZWRDU1NTZWxlY3Rvckxpc3QoaW1wbCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICB+UmVmY291bnRlZENTU1NlbGVjdG9yTGlzdCgpOworCisgICAgICAgICAgICBDU1NTZWxlY3Rv
ckxpc3QqIGdldCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW1w
bDsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgQ1NTU2Vs
ZWN0b3JMaXN0KiBtX2ltcGw7CisgICAgICAgICAgICBSZWZjb3VudGVkQ1NTU2VsZWN0b3JMaXN0
KENTU1NlbGVjdG9yTGlzdCogaW1wbCkgOiBtX2ltcGwoaW1wbCkgeyB9CisgICAgfTsKKwogICAg
IC8vIHRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNlbGVjdG9yIGZvciBhIFN0eWxlUnVsZQogICAg
IGNsYXNzIENTU1NlbGVjdG9yIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBA
IC0zOSw2ICs1OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ1NTU2VsZWN0b3Io
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgICAgICBDU1NTZWxlY3Rvcihjb25zdCBDU1NTZWxl
Y3RvciYpOwogCisgICAgICAgIGV4cGxpY2l0IENTU1NlbGVjdG9yKENTU1NlbGVjdG9yKiBjb3B5
KTsKKwogICAgICAgICB+Q1NTU2VsZWN0b3IoKTsKIAogICAgICAgICAvKioKQEAgLTE5OSw3ICsy
MjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUoKSBjb25zdCB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBBdG9taWNTdHJp
bmcqPihtX2hhc1JhcmVEYXRhID8gJm1fZGF0YS5tX3JhcmVEYXRhLT5tX3ZhbHVlIDogJm1fZGF0
YS5tX3ZhbHVlKTsgfQogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUoKSBj
b25zdDsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmd1bWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzUmFyZURhdGEgPyBtX2RhdGEubV9yYXJlRGF0YS0+bV9hcmd1bWVudCA6IG51bGxB
dG9tOyB9Ci0gICAgICAgIENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNSYXJlRGF0YSA/IG1fZGF0YS5tX3JhcmVEYXRhLT5tX3NlbGVjdG9yTGlzdC5n
ZXQoKSA6IDA7IH0KKyAgICAgICAgQ1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QoKSBjb25z
dCB7IHJldHVybiBtX2hhc1JhcmVEYXRhICYmIG1fZGF0YS5tX3JhcmVEYXRhLT5tX3NlbGVjdG9y
TGlzdCA/IG1fZGF0YS5tX3JhcmVEYXRhLT5tX3NlbGVjdG9yTGlzdC0+Z2V0KCkgOiAwOyB9CiAK
ICAgICAgICAgdm9pZCBzZXRUYWcoY29uc3QgUXVhbGlmaWVkTmFtZSYgdmFsdWUpIHsgbV90YWcg
PSB2YWx1ZTsgfQogICAgICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYpOwpA
QCAtMjM3LDcgKzI1OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2lz
TGFzdEluVGFnSGlzdG9yeSAgICAgOiAxOwogICAgICAgICBib29sIG1faGFzUmFyZURhdGEgICAg
ICAgICAgICA6IDE7CiAgICAgICAgIGJvb2wgbV9pc0ZvclBhZ2UgICAgICAgICAgICAgIDogMTsK
LQogICAgICAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eUZvck9uZVNlbGVjdG9yKCkgY29uc3Q7CiAg
ICAgICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5Rm9yUGFnZSgpIGNvbnN0OwogICAgICAgICB2b2lk
IGV4dHJhY3RQc2V1ZG9UeXBlKCkgY29uc3Q7CkBAIC0yNTcsNyArMjc3LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAgICAgaW50IG1fYjsgLy8gVXNlZCBmb3IgOm50aC0qCiAgICAg
ICAgICAgICBRdWFsaWZpZWROYW1lIG1fYXR0cmlidXRlOyAvLyB1c2VkIGZvciBhdHRyaWJ1dGUg
c2VsZWN0b3IKICAgICAgICAgICAgIEF0b21pY1N0cmluZyBtX2FyZ3VtZW50OyAvLyBVc2VkIGZv
ciA6Y29udGFpbnMsIDpsYW5nIGFuZCA6bnRoLSoKLSAgICAgICAgICAgIE93blB0cjxDU1NTZWxl
Y3Rvckxpc3Q+IG1fc2VsZWN0b3JMaXN0OyAvLyBVc2VkIGZvciA6LXdlYmtpdC1hbnkgYW5kIDpu
b3QKKyAgICAgICAgICAgIFJlZlB0cjxSZWZjb3VudGVkQ1NTU2VsZWN0b3JMaXN0PiBtX3NlbGVj
dG9yTGlzdDsgLy8gVXNlZCBmb3IgOi13ZWJraXQtYW55IGFuZCA6bm90CiAgICAgICAgIAogICAg
ICAgICBwcml2YXRlOgogICAgICAgICAgICAgUmFyZURhdGEoUGFzc1JlZlB0cjxBdG9taWNTdHJp
bmdJbXBsPiB2YWx1ZSk7CkBAIC0zMjgsMTMgKzM0OCwxNSBAQCBpbmxpbmUgdm9pZCBDU1NTZWxl
Y3Rvcjo6c2V0VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgaWYgKG1f
ZGF0YS5tX3JhcmVEYXRhLT5tX3ZhbHVlKQogICAgICAgICAgICAgbV9kYXRhLm1fcmFyZURhdGEt
Pm1fdmFsdWUtPmRlcmVmKCk7CiAgICAgICAgIG1fZGF0YS5tX3JhcmVEYXRhLT5tX3ZhbHVlID0g
dmFsdWUuaW1wbCgpOwotICAgICAgICBtX2RhdGEubV9yYXJlRGF0YS0+bV92YWx1ZS0+cmVmKCk7
CisgICAgICAgIGlmIChtX2RhdGEubV9yYXJlRGF0YS0+bV92YWx1ZSkKKyAgICAgICAgICAgIG1f
ZGF0YS5tX3JhcmVEYXRhLT5tX3ZhbHVlLT5yZWYoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBpZiAobV9kYXRhLm1fdmFsdWUpCiAgICAgICAgIG1fZGF0YS5tX3ZhbHVlLT5kZXJlZigp
OwogICAgIG1fZGF0YS5tX3ZhbHVlID0gdmFsdWUuaW1wbCgpOwotICAgIG1fZGF0YS5tX3ZhbHVl
LT5yZWYoKTsKKyAgICBpZiAobV9kYXRhLm1fdmFsdWUpCisgICAgICAgIG1fZGF0YS5tX3ZhbHVl
LT5yZWYoKTsKIH0KIAogaW5saW5lIHZvaWQgbW92ZShQYXNzT3duUHRyPENTU1NlbGVjdG9yPiBm
cm9tLCBDU1NTZWxlY3RvciogdG8pCg==
</data>
<flag name="review"
          id="167498"
          type_id="1"
          status="-"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>