<?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>144265</bug_id>
          
          <creation_ts>2015-04-27 10:32:46 -0700</creation_ts>
          <short_desc>JSCallbackObject does not maintain symmetry between accesses for getOwnPropertySlot and put</short_desc>
          <delta_ts>2015-05-04 19:49:00 -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>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>144178</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1089065</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-04-27 10:32:46 -0700</bug_when>
    <thetext>The ordering of the &apos;if&apos; statements inside JSScope.cpp&apos;s abstractAccess need some rejiggering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089079</commentid>
    <comment_count>1</comment_count>
      <attachid>251758</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-04-27 10:59:13 -0700</bug_when>
    <thetext>Created attachment 251758
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089094</commentid>
    <comment_count>2</comment_count>
      <attachid>251758</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-27 11:22:53 -0700</bug_when>
    <thetext>Comment on attachment 251758
the patch

Needs a test case.

I think when you try to write a test case you will discover that the current behavior is correct because symbol table properties have higher priority than structure properties, and so they can be cached even in the presence of weird structure properties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089159</commentid>
    <comment_count>3</comment_count>
      <attachid>251774</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-04-27 13:33:05 -0700</bug_when>
    <thetext>Created attachment 251774
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089298</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-04-27 17:41:37 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 251758 [details]
&gt; the patch
&gt; 
&gt; Needs a test case.
&gt; 
&gt; I think when you try to write a test case you will discover that the current
&gt; behavior is correct because symbol table properties have higher priority
&gt; than structure properties, and so they can be cached even in the presence of
&gt; weird structure properties.

Yeah. I think you&apos;re right. The bug lies in JSCallbackObject.

The code for JSCallbackObject::staticFunctionGetter will check if the parent class has the given property slot. If the parent does, it will return that, otherwise, it will return what it has. ::put does not do this. ::put will always put static functions onto the JSCallbackObject itself, even when the Parent class has the property. I think there is a lack of symmetry here that should be solved by having ::put check to see if the parent has the given property slot, and if so, deferring to the parent&apos;s ::put implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089307</commentid>
    <comment_count>5</comment_count>
      <attachid>251797</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-04-27 17:48:44 -0700</bug_when>
    <thetext>Created attachment 251797
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089615</commentid>
    <comment_count>6</comment_count>
      <attachid>251797</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-28 10:59:00 -0700</bug_when>
    <thetext>Comment on attachment 251797
the patch

Hmmm... why do this for only static functions and not static values?

Should we always do this, or only do this when we subclass the global object, which has a symbol table?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089640</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-04-28 11:21:45 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 251797 [details]
&gt; the patch
&gt; 
&gt; Hmmm... why do this for only static functions and not static values?
&gt; 
&gt; Should we always do this, or only do this when we subclass the global
&gt; object, which has a symbol table?

Good questions. I&apos;m not sure on all counts because I&apos;m not well versed on what specifically JSCallbackObject 
is used for and the subtleties that arise. 

I think depending on what we decide, we should regardless make put/get be symmetrical. 
It shouldn&apos;t be that case that a put followed by an immediate get doesn&apos;t return the value just put:
- put(X : V); get(X) == V

Looking at the code for static values, it looks like it&apos;s always deferred to the 
JSClassDefinition&apos;s implementation of &apos;setProperty&apos; and &apos;getProperty&apos;, and if these
don&apos;t exist or fail, it falls back to the parent implementation.

Just by reading the code, it seems symmetrical. It&apos;s weird thought that it doesn&apos;t
give the parent class priority where static functions do give the parent class priority.

Regarding giving the parent&apos;s implementation priority only with the global object, 
what other contexts is JSCallbackObject used for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091435</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-05-04 10:52:44 -0700</bug_when>
    <thetext>&gt; Regarding giving the parent&apos;s implementation priority only with the global
&gt; object, 
&gt; what other contexts is JSCallbackObject used for?

JSCallbackObject is used for clients of the API. &quot;Callback&quot; was my not-very-good-name for &quot;I&apos;m implemented as a set of C callbacks&quot;.

JSObjectMake will make a JSCallbackObject&lt;JSNonFinalObject&gt;.

JSGlobalContextCreate with a custom JSClassRef for the global object will make a JSCallbackObject&lt;JSGlobalObject&gt;. This allows the API client to override global properties like JSDOMWindow does.

It&apos;s only in the JSCallbackObject&lt;JSGlobalObject&gt; case that you have a symbol table in your base class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091436</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-05-04 10:56:26 -0700</bug_when>
    <thetext>It looks like JSCallbackObject&lt;Parent&gt;::staticFunctionGetter currently defers to the base class in get for the sake of caching. (A comment says &quot;Check for cached or override property.&quot;) So, the first access will allocate a function and put() it, and the second access will get() the function to avoid allocating it again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091437</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-05-04 10:57:31 -0700</bug_when>
    <thetext>(In reply to comment #9)
...This has the side effect of allowing the base C++ class to override the property entirely, which will happen in the global object case if you declare a var with that property name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091438</commentid>
    <comment_count>11</comment_count>
      <attachid>251797</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-05-04 10:58:21 -0700</bug_when>
    <thetext>Comment on attachment 251797
the patch

r=me

OK, I suppose it&apos;s nice to be symmetrical.

Perhaps we should extend this behavior to static values as well in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091457</commentid>
    <comment_count>12</comment_count>
      <attachid>251797</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-04 11:48:52 -0700</bug_when>
    <thetext>Comment on attachment 251797
the patch

Clearing flags on attachment: 251797

Committed r183754: &lt;http://trac.webkit.org/changeset/183754&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091458</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-04 11:48:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091664</commentid>
    <comment_count>14</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-05-04 19:49:00 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 251797 [details]
&gt; the patch
&gt; 
&gt; r=me
&gt; 
&gt; OK, I suppose it&apos;s nice to be symmetrical.
&gt; 
&gt; Perhaps we should extend this behavior to static values as well in a
&gt; separate patch.

Opened a bug to consider this:

https://bugs.webkit.org/show_bug.cgi?id=144618</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251758</attachid>
            <date>2015-04-27 10:59:13 -0700</date>
            <delta_ts>2015-04-27 13:33:05 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>2864</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzMzk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE1LTA0LTI3ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUgZG9lcyBub3QgYWx3YXlzIGFkaGVyZSB0byB0
aGUgZ2xvYmFsIG9iamVjdCdzIHN0cnVjdHVyZSdzIHJlcXVlc3QgdG8gbm90IGNhY2hlIHByb3Bl
cnR5IGFjY2Vzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDQyNjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBhYnN0cmFjdEFjY2VzcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSBnbG9iYWwgb2JqZWN0J3Mg
c3RydWN0dXJlIGRpc2FsbG93cyBwcm9wZXJ0eSAKKyAgICAgICAgYWNjZXNzIGNhY2hpbmcgKmFm
dGVyKiBzZWVpbmcgaWYgdGhlIHByb3BlcnR5IGlzIGluIHRoZSBnbG9iYWwgb2JqZWN0J3Mgc3lt
Ym9sIHRhYmxlLgorICAgICAgICBUaGlzIGNoZWNrIHNob3VsZCBoYXBwZW4gKmJlZm9yZSogY2hl
Y2tpbmcgdGhlIHN5bWJvbCB0YWJsZSBiZWNhdXNlIGlmIHRoZSBvcmRlcmluZyAKKyAgICAgICAg
d2Fzbid0IGxpa2UgdGhpcyB0aGVyZSBpcyBhIGNoYW5jZSB3ZSBtYXkgY2FjaGUgYW4gYWNjZXNz
IHRoYXQgc2hvdWxkbid0IGJlIGNhY2hlZC4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5j
cHA6CisgICAgICAgIChKU0M6OmFic3RyYWN0QWNjZXNzKToKKwogMjAxNS0wNC0yNiAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBDbGFzcyBib2R5IGVuZGluZyB3
aXRoIGEgc2VtaWNvbG9uIHRocm93cyBhIFN5bnRheEVycm9yCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkocmV2aXNpb24gMTgzMjk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcy
LDYgKzcyLDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhFeGVjU3QKICAg
ICB9CiAKICAgICBpZiAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzRHluYW1pY0Nh
c3Q8SlNHbG9iYWxPYmplY3QqPihzY29wZSkpIHsKKyAgICAgICAgaWYgKCFnbG9iYWxPYmplY3Qt
PnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAgICAgICAgICAg
IHx8IChnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0dGVy
UHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgJiYgZ2V0T3JQdXQgPT0gUHV0KSkgeworICAgICAg
ICAgICAgLy8gV2Uga25vdyB0aGUgcHJvcGVydHkgd2lsbCBiZSBhdCBnbG9iYWwgc2NvcGUsIGJ1
dCB3ZSBkb24ndCBrbm93IGhvdyB0byBjYWNoZSBpdC4KKyAgICAgICAgICAgIEFTU0VSVCghc2Nv
cGUtPm5leHQoKSk7CisgICAgICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShHbG9iYWxQ
cm9wZXJ0eSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgMCwgMCwgMCwgMCk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCiAgICAgICAgIFN5bWJvbFRhYmxl
RW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChpZGVudC5pbXBs
KCkpOwogICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBpZiAoZ2V0
T3JQdXQgPT0gUHV0ICYmIGVudHJ5LmlzUmVhZE9ubHkoKSkgewpAQCAtODcsMTAgKzk1LDcgQEAg
c3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEV4ZWNTdAogICAgICAgICB9CiAKICAg
ICAgICAgUHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgaWYgKCFnbG9i
YWxPYmplY3QtPmdldE93blByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIGV4ZWMsIGlkZW50LCBz
bG90KQotICAgICAgICAgICAgfHwgIXNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCi0gICAgICAgICAg
ICB8fCAhZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpCi0gICAgICAgICAgICB8fCAoZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aGFzUmVh
ZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpICYmIGdldE9yUHV0
ID09IFB1dCkpIHsKKyAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmdldE93blByb3BlcnR5U2xv
dChnbG9iYWxPYmplY3QsIGV4ZWMsIGlkZW50LCBzbG90KSB8fCAhc2xvdC5pc0NhY2hlYWJsZVZh
bHVlKCkpIHsKICAgICAgICAgICAgIC8vIFdlIGtub3cgdGhlIHByb3BlcnR5IHdpbGwgYmUgYXQg
Z2xvYmFsIHNjb3BlLCBidXQgd2UgZG9uJ3Qga25vdyBob3cgdG8gY2FjaGUgaXQuCiAgICAgICAg
ICAgICBBU1NFUlQoIXNjb3BlLT5uZXh0KCkpOwogICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3Ao
bWFrZVR5cGUoR2xvYmFsUHJvcGVydHksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgs
IDAsIDAsIDAsIDApOwo=
</data>
<flag name="review"
          id="276548"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251774</attachid>
            <date>2015-04-27 13:33:05 -0700</date>
            <delta_ts>2015-04-27 17:48:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>4418</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzMzk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE1LTA0LTI3ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUgZG9lcyBub3QgYWx3YXlzIGFkaGVyZSB0byB0
aGUgZ2xvYmFsIG9iamVjdCdzIHN0cnVjdHVyZSdzIHJlcXVlc3QgdG8gbm90IGNhY2hlIHByb3Bl
cnR5IGFjY2Vzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDQyNjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBhYnN0cmFjdEFjY2VzcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSBnbG9iYWwgb2JqZWN0J3Mg
c3RydWN0dXJlIGRpc2FsbG93cyBwcm9wZXJ0eSAKKyAgICAgICAgYWNjZXNzIGNhY2hpbmcgKmFm
dGVyKiBzZWVpbmcgaWYgdGhlIHByb3BlcnR5IGlzIGluIHRoZSBnbG9iYWwgb2JqZWN0J3Mgc3lt
Ym9sIHRhYmxlLgorICAgICAgICBUaGlzIGNoZWNrIHNob3VsZCBoYXBwZW4gKmJlZm9yZSogY2hl
Y2tpbmcgdGhlIHN5bWJvbCB0YWJsZSBiZWNhdXNlIGlmIHRoZSBvcmRlcmluZyAKKyAgICAgICAg
d2Fzbid0IGxpa2UgdGhpcyB0aGVyZSBpcyBhIGNoYW5jZSB3ZSBtYXkgY2FjaGUgYW4gYWNjZXNz
IHRoYXQgc2hvdWxkbid0IGJlIGNhY2hlZC4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5j
cHA6CisgICAgICAgIChKU0M6OmFic3RyYWN0QWNjZXNzKToKKwogMjAxNS0wNC0yNiAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBDbGFzcyBib2R5IGVuZGluZyB3
aXRoIGEgc2VtaWNvbG9uIHRocm93cyBhIFN5bnRheEVycm9yCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwkocmV2aXNpb24gMTgzMjk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJKHdvcmtpbmcgY29weSkKQEAgLTk2
MCw2ICs5NjAsNyBAQCBzdGF0aWMgSlNTdGF0aWNWYWx1ZSBnbG9iYWxPYmplY3Rfc3RhdGljCiAK
IHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIGdsb2JhbE9iamVjdF9zdGF0aWNGdW5jdGlvbnNbXSA9
IHsKICAgICB7ICJnbG9iYWxTdGF0aWNGdW5jdGlvbiIsIGdsb2JhbE9iamVjdF9jYWxsLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKKyAgICB7ICJnbG9iYWxTdGF0aWNGdW5jdGlvbjIiLCBn
bG9iYWxPYmplY3RfY2FsbCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCiAgICAgeyAiZ2Mi
LCBmdW5jdGlvbkdDLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKICAgICB7IDAsIDAsIDAg
fQogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuanMJ
KHJldmlzaW9uIDE4MzI5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVz
dGFwaS5qcwkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMjAgQEAgZnVuY3Rpb24gZ2xvYmFs
U3RhdGljRnVuY3Rpb24oKQogCiBzaG91bGRCZSgiZ2xvYmFsU3RhdGljVmFsdWUiLCAzKTsKIHNo
b3VsZEJlKCJnbG9iYWxTdGF0aWNGdW5jdGlvbigpIiwgNCk7CitzaG91bGRCZSgidGhpcy5nbG9i
YWxTdGF0aWNGdW5jdGlvbigpIiwgNCk7CisKK2Z1bmN0aW9uIGdsb2JhbFN0YXRpY0Z1bmN0aW9u
MigpIHsKKyAgICByZXR1cm4gMTA7Cit9CitzaG91bGRCZSgiZ2xvYmFsU3RhdGljRnVuY3Rpb24y
KCk7IiwgMTApOwordGhpcy5nbG9iYWxTdGF0aWNGdW5jdGlvbjIgPSBmdW5jdGlvbigpIHsgcmV0
dXJuIDIwOyB9CitzaG91bGRCZSgiZ2xvYmFsU3RhdGljRnVuY3Rpb24yKCk7IiwgMjApOworc2hv
dWxkQmUoInRoaXMuZ2xvYmFsU3RhdGljRnVuY3Rpb24yKCk7IiwgMjApOworCitmdW5jdGlvbiBp
QW1Ob3RBU3RhdGljRnVuY3Rpb24oKSB7IHJldHVybiAxMDsgfQorc2hvdWxkQmUoImlBbU5vdEFT
dGF0aWNGdW5jdGlvbigpOyIsIDEwKTsKK3RoaXMuaUFtTm90QVN0YXRpY0Z1bmN0aW9uID0gZnVu
Y3Rpb24oKSB7IHJldHVybiAyMDsgfQorc2hvdWxkQmUoImlBbU5vdEFTdGF0aWNGdW5jdGlvbigp
OyIsIDIwKTsKIAogc2hvdWxkQmUoInR5cGVvZiBNeU9iamVjdCIsICJmdW5jdGlvbiIpOyAvLyBv
dXIgb2JqZWN0IGltcGxlbWVudHMgJ2NhbGwnCiBNeU9iamVjdC5jYW50RmluZCA9IDE7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkocmV2aXNpb24gMTgz
Mjk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcyLDYgKzcyLDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFj
Y2VzcyhFeGVjU3QKICAgICB9CiAKICAgICBpZiAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IGpzRHluYW1pY0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihzY29wZSkpIHsKKyAgICAgICAgaWYg
KCFnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkKKyAgICAgICAgICAgIHx8IChnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpLT5oYXNSZWFkT25s
eU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgJiYgZ2V0T3JQdXQgPT0g
UHV0KSkgeworICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgcHJvcGVydHkgd2lsbCBiZSBhdCBn
bG9iYWwgc2NvcGUsIGJ1dCB3ZSBkb24ndCBrbm93IGhvdyB0byBjYWNoZSBpdC4KKyAgICAgICAg
ICAgIEFTU0VSVCghc2NvcGUtPm5leHQoKSk7CisgICAgICAgICAgICBvcCA9IFJlc29sdmVPcCht
YWtlVHlwZShHbG9iYWxQcm9wZXJ0eSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwg
MCwgMCwgMCwgMCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCiAgICAg
ICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCkt
PmdldChpZGVudC5pbXBsKCkpOwogICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7CiAgICAg
ICAgICAgICBpZiAoZ2V0T3JQdXQgPT0gUHV0ICYmIGVudHJ5LmlzUmVhZE9ubHkoKSkgewpAQCAt
ODcsMTAgKzk1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEV4ZWNTdAog
ICAgICAgICB9CiAKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0KTsKLSAg
ICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmdldE93blByb3BlcnR5U2xvdChnbG9iYWxPYmplY3Qs
IGV4ZWMsIGlkZW50LCBzbG90KQotICAgICAgICAgICAgfHwgIXNsb3QuaXNDYWNoZWFibGVWYWx1
ZSgpCi0gICAgICAgICAgICB8fCAhZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlB
Y2Nlc3Nlc0FyZUNhY2hlYWJsZSgpCi0gICAgICAgICAgICB8fCAoZ2xvYmFsT2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+aGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90
bygpICYmIGdldE9yUHV0ID09IFB1dCkpIHsKKyAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmdl
dE93blByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIGV4ZWMsIGlkZW50LCBzbG90KSB8fCAhc2xv
dC5pc0NhY2hlYWJsZVZhbHVlKCkpIHsKICAgICAgICAgICAgIC8vIFdlIGtub3cgdGhlIHByb3Bl
cnR5IHdpbGwgYmUgYXQgZ2xvYmFsIHNjb3BlLCBidXQgd2UgZG9uJ3Qga25vdyBob3cgdG8gY2Fj
aGUgaXQuCiAgICAgICAgICAgICBBU1NFUlQoIXNjb3BlLT5uZXh0KCkpOwogICAgICAgICAgICAg
b3AgPSBSZXNvbHZlT3AobWFrZVR5cGUoR2xvYmFsUHJvcGVydHksIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKSwgZGVwdGgsIDAsIDAsIDAsIDApOwo=
</data>
<flag name="review"
          id="276566"
          type_id="1"
          status="-"
          setter="saam"
    />
    <flag name="commit-queue"
          id="276567"
          type_id="3"
          status="-"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251797</attachid>
            <date>2015-04-27 17:48:44 -0700</date>
            <delta_ts>2015-05-04 11:48:52 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>3808</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzNDQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBA
CisyMDE1LTA0LTI3ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBKU0NhbGxiYWNrT2JqZWN0IGRvZXMgbm90IG1haW50YWluIHN5bW1ldHJ5IGJldHdlZW4g
YWNjZXNzZXMgZm9yIGdldE93blByb3BlcnR5U2xvdCBhbmQgcHV0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQyNjUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBKU0NhbGxiYWNrT2JqZWN0IHdpbGwgZGVm
ZXIgdG8gYSBwYXJlbnQncyBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Qcm9wZXJ0eVNsb3QKKyAg
ICAgICAgZm9yIGEgc3RhdGljIGZ1bmN0aW9uIGlmIHRoZSBwYXJlbnQgaGFzIHRoYXQgcHJvcGVy
dHkgc2xvdC4gSlNDYWxsYmFja09iamVjdDo6cHV0IAorICAgICAgICBkaWQgbm90IG1haW50YWlu
IHRoaXMgc3ltbWV0cnkgb2YgYWxzbyBjYWxsaW5nIDo6cHV0IG9uIHRoZSBwYXJlbnQgaWYgdGhl
IHBhcmVudCAKKyAgICAgICAgaGFzIHRoZSBwcm9wZXJ0eS4gV2Ugc2hvdWxkIGVuc3VyZSB0aGF0
IHRoaXMgc3ltbWV0cnkgZXhpc3RzLgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RG
dW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpwdXQp
OgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLmM6CisgICAgICAgICogQVBJL3Rlc3RzL3Rl
c3RhcGkuanM6CisgICAgICAgIChnbG9iYWxTdGF0aWNGdW5jdGlvbjIpOgorICAgICAgICAodGhp
cy5nbG9iYWxTdGF0aWNGdW5jdGlvbjIpOgorICAgICAgICAoaUFtTm90QVN0YXRpY0Z1bmN0aW9u
KToKKyAgICAgICAgKHRoaXMuaUFtTm90QVN0YXRpY0Z1bmN0aW9uKToKKwogMjAxNS0wNC0yNyAg
QW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVnRXhwIG1hdGNo
ZXMgYXJyYXlzIHNob3VsZCB1c2UgY29udGlndW91cyBpbmRleGluZy4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5o
CShyZXZpc2lvbiAxODMyOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDYgKzI3MCw5IEBAIHZv
aWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpwdXQoSlNDZWwKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgaWYgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZSogc3RhdGljRnVu
Y3Rpb25zID0ganNDbGFzcy0+c3RhdGljRnVuY3Rpb25zKGV4ZWMpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKFN0YXRpY0Z1bmN0aW9uRW50cnkqIGVudHJ5ID0gc3RhdGljRnVuY3Rpb25zLT5nZXQo
bmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlTbG90IGdldFNsb3QodGhpc09i
amVjdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChQYXJlbnQ6OmdldE93blByb3BlcnR5U2xv
dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGdldFNsb3QpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFBhcmVudDo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnktPmF0dHJp
YnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5KQogICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5KU0NhbGxiYWNr
T2JqZWN0PFBhcmVudD46OnB1dERpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
KTsgLy8gcHV0IGFzIG92ZXJyaWRlIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwkocmV2aXNpb24gMTgzMjk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJKHdvcmtpbmcgY29weSkKQEAgLTk2MCw2ICs5
NjAsNyBAQCBzdGF0aWMgSlNTdGF0aWNWYWx1ZSBnbG9iYWxPYmplY3Rfc3RhdGljCiAKIHN0YXRp
YyBKU1N0YXRpY0Z1bmN0aW9uIGdsb2JhbE9iamVjdF9zdGF0aWNGdW5jdGlvbnNbXSA9IHsKICAg
ICB7ICJnbG9iYWxTdGF0aWNGdW5jdGlvbiIsIGdsb2JhbE9iamVjdF9jYWxsLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZU5vbmUgfSwKKyAgICB7ICJnbG9iYWxTdGF0aWNGdW5jdGlvbjIiLCBnbG9iYWxP
YmplY3RfY2FsbCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCiAgICAgeyAiZ2MiLCBmdW5j
dGlvbkdDLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKICAgICB7IDAsIDAsIDAgfQogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuanMJKHJldmlz
aW9uIDE4MzI5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5q
cwkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMjAgQEAgZnVuY3Rpb24gZ2xvYmFsU3RhdGlj
RnVuY3Rpb24oKQogCiBzaG91bGRCZSgiZ2xvYmFsU3RhdGljVmFsdWUiLCAzKTsKIHNob3VsZEJl
KCJnbG9iYWxTdGF0aWNGdW5jdGlvbigpIiwgNCk7CitzaG91bGRCZSgidGhpcy5nbG9iYWxTdGF0
aWNGdW5jdGlvbigpIiwgNCk7CisKK2Z1bmN0aW9uIGdsb2JhbFN0YXRpY0Z1bmN0aW9uMigpIHsK
KyAgICByZXR1cm4gMTA7Cit9CitzaG91bGRCZSgiZ2xvYmFsU3RhdGljRnVuY3Rpb24yKCk7Iiwg
MTApOwordGhpcy5nbG9iYWxTdGF0aWNGdW5jdGlvbjIgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDIw
OyB9CitzaG91bGRCZSgiZ2xvYmFsU3RhdGljRnVuY3Rpb24yKCk7IiwgMjApOworc2hvdWxkQmUo
InRoaXMuZ2xvYmFsU3RhdGljRnVuY3Rpb24yKCk7IiwgMjApOworCitmdW5jdGlvbiBpQW1Ob3RB
U3RhdGljRnVuY3Rpb24oKSB7IHJldHVybiAxMDsgfQorc2hvdWxkQmUoImlBbU5vdEFTdGF0aWNG
dW5jdGlvbigpOyIsIDEwKTsKK3RoaXMuaUFtTm90QVN0YXRpY0Z1bmN0aW9uID0gZnVuY3Rpb24o
KSB7IHJldHVybiAyMDsgfQorc2hvdWxkQmUoImlBbU5vdEFTdGF0aWNGdW5jdGlvbigpOyIsIDIw
KTsKIAogc2hvdWxkQmUoInR5cGVvZiBNeU9iamVjdCIsICJmdW5jdGlvbiIpOyAvLyBvdXIgb2Jq
ZWN0IGltcGxlbWVudHMgJ2NhbGwnCiBNeU9iamVjdC5jYW50RmluZCA9IDE7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>