<?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>40613</bug_id>
          
          <creation_ts>2010-06-15 00:00:38 -0700</creation_ts>
          <short_desc>The JSObjectSetProperty doesn&apos;t overwrite property flags.</short_desc>
          <delta_ts>2012-09-26 12:42:46 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>40903</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jędrzej Nowacki">jedrzej.nowacki</reporter>
          <assigned_to name="Jędrzej Nowacki">jedrzej.nowacki</assigned_to>
          <cc>barraclough</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ggaren</cc>
    
    <cc>jedrzej.nowacki</cc>
    
    <cc>kent.hansen</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>238265</commentid>
    <comment_count>0</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-06-15 00:00:38 -0700</bug_when>
    <thetext>It seems that the JSObjectSetProperty can&apos;t overwrite property flag. It simply ignores attributes argument while replacing property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238267</commentid>
    <comment_count>1</comment_count>
      <attachid>58759</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-06-15 00:04:48 -0700</bug_when>
    <thetext>Created attachment 58759
Fix v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241025</commentid>
    <comment_count>2</comment_count>
      <attachid>58759</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-06-21 17:55:20 -0700</bug_when>
    <thetext>Comment on attachment 58759
Fix v1

This has bad behaviour in a number of ways -- the unconditional use of delete if the property exists will destroy the PIC and so hurt performance for cases where the attributes are not being changed.

Additionally you get weird behaviour if have:

proto = {prop: &quot;foo&quot;}
o = Object.create(proto);

and do:
JSObjectSetProperty(o, &quot;prop&quot;, ..., ...);

you will delete &quot;prop&quot; from proto, and then add &quot;prop&quot; to o.  Clearly this is less than ideal.

:-(

--Oliver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241184</commentid>
    <comment_count>3</comment_count>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-06-22 01:39:31 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 58759 [details])
&gt; This has bad behaviour in a number of ways -- the unconditional use of delete if the property exists will destroy the PIC and so hurt performance for cases where the attributes are not being changed.
&gt; 
&gt; Additionally you get weird behaviour if have:
&gt; 
&gt; proto = {prop: &quot;foo&quot;}
&gt; o = Object.create(proto);
&gt; 
&gt; and do:
&gt; JSObjectSetProperty(o, &quot;prop&quot;, ..., ...);
&gt; 
&gt; you will delete &quot;prop&quot; from proto, and then add &quot;prop&quot; to o.  Clearly this is less than ideal.

The hasProperty() call seems weird. Just because the object has some property in the prototype chain, the attributes you specify will be ignored when you create a property of the same name on your object?
Would calling hasOwnProperty() be sufficient?
Better, by calling getOwnPropertyDescriptor() one can get the attributes, and only delete the property if they differ.
Oh, looks like JSObject::defineOwnProperty() already has such logic. ;)

Still seems like a work-around, though. How about fixing JSObject::putWithAttributes() so it takes care of updating the attributes of an existing entry in case the property already exists (just like it takes care of updating the value)? Then unconditionally call putWithAttributes() from JSObjectSetProperty() when attributes != 0. (Which means there&apos;s no way to remove all attributes without recreating the property; oh well.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576653</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-12 15:58:40 -0700</bug_when>
    <thetext>Sigh - the problem here is that it&apos;s not really clear what JSObjectSetProperty should be doing.  Does it correspond to the spec&apos;s [[Put]] functionality? [[DefineOwnProperty]]? - or a mix of the two?

Given the interface we have, if the property already exists on the object being put to, it probably does make sense to make this call defineOwnProperty so the attributes are updated accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728877</commentid>
    <comment_count>5</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-09-26 12:42:46 -0700</bug_when>
    <thetext>I don&apos;t think we&apos;re going to change this interface right now.  The API behaviour is

if ([[HasProperty]])
    [[Put]]
else
    [[DefineOwnProperty]]

It might be nice to separate put &amp; defineOwnProperty traps in the API, but JSObjectSetProperty&apos;s behaviour isn&apos;t going to change now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58759</attachid>
            <date>2010-06-15 00:04:48 -0700</date>
            <delta_ts>2010-06-21 17:55:20 -0700</delta_ts>
            <desc>Fix v1</desc>
            <filename>prop.diff</filename>
            <type>text/plain</type>
            <size>3105</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAgYi9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCmluZGV4IDVlMDUzNmYuLmIwMTkwMTMgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKKysrIGIvSmF2YVNjcmlw
dENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcApAQCAtMjczLDcgKzI3MywxMCBAQCB2b2lkIEpTT2Jq
ZWN0U2V0UHJvcGVydHkoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU1N0
cmluZ1JlZiBwcm9wZQogICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50aWZp
ZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSkpOwogICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhl
YywgdmFsdWUpOwogCi0gICAgaWYgKGF0dHJpYnV0ZXMgJiYgIWpzT2JqZWN0LT5oYXNQcm9wZXJ0
eShleGVjLCBuYW1lKSkKKyAgICBpZiAoanNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIG5hbWUp
KQorICAgICAgICBqc09iamVjdC0+ZGVsZXRlUHJvcGVydHkoZXhlYywgbmFtZSk7CisKKyAgICBp
ZiAoYXR0cmlidXRlcykKICAgICAgICAganNPYmplY3QtPnB1dFdpdGhBdHRyaWJ1dGVzKGV4ZWMs
IG5hbWUsIGpzVmFsdWUsIGF0dHJpYnV0ZXMpOwogICAgIGVsc2UgewogICAgICAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdDsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0
YXBpLmMgYi9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCmluZGV4IDc4MGU5OTYu
LjY1NjMzNjggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMK
KysrIGIvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwpAQCAtMTI1Miw3ICsxMjUy
LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgSlNTdHJpbmdSZWxl
YXNlKHN0cmluZyk7CiAKICAgICBvID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIE5VTEwsIE5VTEwp
OworICAgIEpTU3RyaW5nUmVmIGpzUHJvcGVydHlOYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlBPTkciKTsKICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIG8sIGpz
T25lSVN0cmluZywgSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgMSksIGtKU1Byb3BlcnR5QXR0
cmlidXRlTm9uZSwgTlVMTCk7CisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBvLCBq
c1Byb3BlcnR5TmFtZSwgIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIDEpLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZU5vbmUsIE5VTEwpOworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwg
bywganNQcm9wZXJ0eU5hbWUsICBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAxKSwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RW51bSwgTlVMTCk7CiAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShj
b250ZXh0LCBvLCBqc0NGSVN0cmluZywgIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIDEpLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtLCBOVUxMKTsKICAgICBKU1Byb3BlcnR5TmFtZUFy
cmF5UmVmIG5hbWVBcnJheSA9IEpTT2JqZWN0Q29weVByb3BlcnR5TmFtZXMoY29udGV4dCwgbyk7
CiAgICAgc2l6ZV90IGV4cGVjdGVkQ291bnQgPSBKU1Byb3BlcnR5TmFtZUFycmF5R2V0Q291bnQo
bmFtZUFycmF5KTsKQEAgLTEyNjAsNyArMTI2Myw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy
KiBhcmd2W10pCiAgICAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgZXhwZWN0ZWRDb3VudDsgKytj
b3VudCkKICAgICAgICAgSlNQcm9wZXJ0eU5hbWVBcnJheUdldE5hbWVBdEluZGV4KG5hbWVBcnJh
eSwgY291bnQpOwogICAgIEpTUHJvcGVydHlOYW1lQXJyYXlSZWxlYXNlKG5hbWVBcnJheSk7Ci0g
ICAgQVNTRVJUKGNvdW50ID09IDEpOyAvLyBqc0NGU3RyaW5nIHNob3VsZCBub3QgYmUgZW51bWVy
YXRlZAorICAgIEpTU3RyaW5nUmVsZWFzZShqc1Byb3BlcnR5TmFtZSk7CisgICAgYXNzZXJ0VHJ1
ZShjb3VudCA9PSAxLCAianNDRlN0cmluZyBhbmQganNQcm9wZXJ0eU5hbWUgc2hvdWxkIG5vdCBi
ZSBlbnVtZXJhdGVkLiIpOwogCiAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNBcnJheVZhbHVlc1td
ID0geyBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAxMCksIEpTVmFsdWVNYWtlTnVtYmVyKGNv
bnRleHQsIDIwKSB9OwogICAgIG8gPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCBzaXplb2Yo
YXJndW1lbnRzQXJyYXlWYWx1ZXMpIC8gc2l6ZW9mKEpTVmFsdWVSZWYpLCBhcmd1bWVudHNBcnJh
eVZhbHVlcywgTlVMTCk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggOGQ1YjU5ZS4uYmIzMTJmZiAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIwIEBACisyMDEwLTA2LTE1ICBKZWRyemVqIE5vd2Fja2kgIDxqZWRyemVq
Lm5vd2Fja2lAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZpeCB0aGUgSlNPYmplY3RTZXRQcm9wZXJ0eS4KKworICAgICAgICBPdmVy
d3JpdGluZyBhbiBvYmplY3QgcHJvcGVydHkgd2l0aCB0aGUgSlNPYmplY3RTZXRQcm9wZXJ0eSBy
ZXBsYWNlCisgICAgICAgIHByb3BlcnR5IGF0dHJpYnV0ZXMgKGZsYWdzKSB0b28uCisKKyAgICAg
ICAgVGhlIEpTT2JqZWN0U2V0UHJvcGVydHkgZG9lc24ndCBvdmVyd3JpdGUgcHJvcGVydHkgZmxh
Z3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDYx
MworCisgICAgICAgICogQVBJL0pTT2JqZWN0UmVmLmNwcDoKKyAgICAgICAgKEpTT2JqZWN0U2V0
UHJvcGVydHkpOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLmM6CisgICAgICAgIChtYWlu
KToKKwogMjAxMC0wNi0xMSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4K
</data>
<flag name="review"
          id="45199"
          type_id="1"
          status="-"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="45200"
          type_id="3"
          status="-"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>