<?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>40006</bug_id>
          
          <creation_ts>2010-06-01 09:58:47 -0700</creation_ts>
          <short_desc>[Chromium] enforce presence of named property query callback if named property enumerator is present</short_desc>
          <delta_ts>2010-06-01 20:28:36 -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>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="anton muhin">antonm</reporter>
          <assigned_to name="anton muhin">antonm</assigned_to>
          <cc>abarth</cc>
    
    <cc>ager</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>japhet</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>232791</commentid>
    <comment_count>0</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-06-01 09:58:47 -0700</bug_when>
    <thetext>[Chromium] enforce presence of named property query callback if named property enumerator is present</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232802</commentid>
    <comment_count>1</comment_count>
      <attachid>57560</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-06-01 10:06:35 -0700</bug_when>
    <thetext>Created attachment 57560
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232826</commentid>
    <comment_count>2</comment_count>
      <attachid>57560</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-06-01 10:43:51 -0700</bug_when>
    <thetext>Comment on attachment 57560
Patch

A couple of nits, looks ok otherwise.

&gt; +    # If there is a custom enumerator, there MUST be custom query to properly communicate property attributes.

Should we be die&apos;ing if this isn&apos;t the case?

&gt; diff --git a/WebCore/bindings/v8/V8NPObject.cpp b/WebCore/bindings/v8/V8NPObject.cpp
&gt; index f9cc94a9fe465beae74db7d73d512176801332e3..5c3356ff74f260128f2ebca04a9e6e5567b897b4 100644
&gt; --- a/WebCore/bindings/v8/V8NPObject.cpp
&gt; +++ b/WebCore/bindings/v8/V8NPObject.cpp
&gt; @@ -243,6 +243,12 @@ v8::Handle&lt;v8::Value&gt; npObjectGetIndexedProperty(v8::Local&lt;v8::Object&gt; self, uin
&gt;      return npObjectGetProperty(self, identifier, v8::Number::New(index));
&gt;  }
&gt;  
&gt; +v8::Handle&lt;v8::Boolean&gt; npObjectQueryProperty(v8::Local&lt;v8::String&gt; name, const v8::AccessorInfo&amp; info)
&gt; +{
&gt; +    NPIdentifier identifier = getStringIdentifier(name);
&gt; +    return npObjectGetProperty(info.Holder(), identifier, name).IsEmpty() ? v8::Handle&lt;v8::Boolean&gt;() : v8::True();

Nit: I don&apos;t know what the canonical way to use the V8 API is in this respect, but I would think it clearer to use v8::False() instead of v8::Handle&lt;v8::Boolean&gt;().


&gt; +    if (storage-&gt;contains(name) &amp;&amp; name != &quot;length&quot;)
&gt; +        return v8::True();
&gt; +
&gt; +    return v8::Handle&lt;v8::Boolean&gt;();

Same here: Why not v8::False()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232835</commentid>
    <comment_count>3</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-06-01 10:50:04 -0700</bug_when>
    <thetext>Nate, thanks a lot for a quick review.

(In reply to comment #2)
&gt; (From update of attachment 57560 [details])
&gt; A couple of nits, looks ok otherwise.
&gt; 
&gt; &gt; +    # If there is a custom enumerator, there MUST be custom query to properly communicate property attributes.
&gt; 
&gt; Should we be die&apos;ing if this isn&apos;t the case?

Now we&apos;ll get compile time error which might be better then dieing, but up to you, if you think that we should die, I&apos;d add that.

&gt; 
&gt; &gt; diff --git a/WebCore/bindings/v8/V8NPObject.cpp b/WebCore/bindings/v8/V8NPObject.cpp
&gt; &gt; index f9cc94a9fe465beae74db7d73d512176801332e3..5c3356ff74f260128f2ebca04a9e6e5567b897b4 100644
&gt; &gt; --- a/WebCore/bindings/v8/V8NPObject.cpp
&gt; &gt; +++ b/WebCore/bindings/v8/V8NPObject.cpp
&gt; &gt; @@ -243,6 +243,12 @@ v8::Handle&lt;v8::Value&gt; npObjectGetIndexedProperty(v8::Local&lt;v8::Object&gt; self, uin
&gt; &gt;      return npObjectGetProperty(self, identifier, v8::Number::New(index));
&gt; &gt;  }
&gt; &gt;  
&gt; &gt; +v8::Handle&lt;v8::Boolean&gt; npObjectQueryProperty(v8::Local&lt;v8::String&gt; name, const v8::AccessorInfo&amp; info)
&gt; &gt; +{
&gt; &gt; +    NPIdentifier identifier = getStringIdentifier(name);
&gt; &gt; +    return npObjectGetProperty(info.Holder(), identifier, name).IsEmpty() ? v8::Handle&lt;v8::Boolean&gt;() : v8::True();
&gt; 
&gt; Nit: I don&apos;t know what the canonical way to use the V8 API is in this respect, but I would think it clearer to use v8::False() instead of v8::Handle&lt;v8::Boolean&gt;().

There is a difference in semantics: if empty handle is returned, it says to v8, &apos;I don&apos;t have this property, but you could look down the prototype chain&apos;, but if False is returned it means, &apos;no, there is no such property (and ignore what prototype chain would tell you&apos;.  As we need all the properties, we&apos;d better return empty handle here.  Still I agree the semantics is somewhat weird and I cannot immediately invent situation where False would be useful.

&gt; 
&gt; 
&gt; &gt; +    if (storage-&gt;contains(name) &amp;&amp; name != &quot;length&quot;)
&gt; &gt; +        return v8::True();
&gt; &gt; +
&gt; &gt; +    return v8::Handle&lt;v8::Boolean&gt;();
&gt; 
&gt; Same here: Why not v8::False()?

Ditto.

Nate, I&apos;m cq+&apos;ing it right now--cq has many pending patches so you should have enough time to remove cq+ if you&apos;d like me to address anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232836</commentid>
    <comment_count>4</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-06-01 10:50:54 -0700</bug_when>
    <thetext>or even better, I&apos;ll wait until it&apos;s all green (hopefully), even more time to revoke r+ :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232843</commentid>
    <comment_count>5</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-06-01 10:55:40 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Nate, thanks a lot for a quick review.
&gt; 
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 57560 [details] [details])
&gt; &gt; A couple of nits, looks ok otherwise.
&gt; &gt; 
&gt; &gt; &gt; +    # If there is a custom enumerator, there MUST be custom query to properly communicate property attributes.
&gt; &gt; 
&gt; &gt; Should we be die&apos;ing if this isn&apos;t the case?
&gt; 
&gt; Now we&apos;ll get compile time error which might be better then dieing, but up to you, if you think that we should die, I&apos;d add that.

I don&apos;t have any strong feelings, I just figured I&apos;d throw it out as an option.  It&apos;s not really necessary though, since we just compile fail if there are missing custom bindings (and that&apos;s probably the closest existing situation to what you&apos;re doing).

&gt; 
&gt; &gt; 
&gt; &gt; &gt; diff --git a/WebCore/bindings/v8/V8NPObject.cpp b/WebCore/bindings/v8/V8NPObject.cpp
&gt; &gt; &gt; index f9cc94a9fe465beae74db7d73d512176801332e3..5c3356ff74f260128f2ebca04a9e6e5567b897b4 100644
&gt; &gt; &gt; --- a/WebCore/bindings/v8/V8NPObject.cpp
&gt; &gt; &gt; +++ b/WebCore/bindings/v8/V8NPObject.cpp
&gt; &gt; &gt; @@ -243,6 +243,12 @@ v8::Handle&lt;v8::Value&gt; npObjectGetIndexedProperty(v8::Local&lt;v8::Object&gt; self, uin
&gt; &gt; &gt;      return npObjectGetProperty(self, identifier, v8::Number::New(index));
&gt; &gt; &gt;  }
&gt; &gt; &gt;  
&gt; &gt; &gt; +v8::Handle&lt;v8::Boolean&gt; npObjectQueryProperty(v8::Local&lt;v8::String&gt; name, const v8::AccessorInfo&amp; info)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    NPIdentifier identifier = getStringIdentifier(name);
&gt; &gt; &gt; +    return npObjectGetProperty(info.Holder(), identifier, name).IsEmpty() ? v8::Handle&lt;v8::Boolean&gt;() : v8::True();
&gt; &gt; 
&gt; &gt; Nit: I don&apos;t know what the canonical way to use the V8 API is in this respect, but I would think it clearer to use v8::False() instead of v8::Handle&lt;v8::Boolean&gt;().
&gt; 
&gt; There is a difference in semantics: if empty handle is returned, it says to v8, &apos;I don&apos;t have this property, but you could look down the prototype chain&apos;, but if False is returned it means, &apos;no, there is no such property (and ignore what prototype chain would tell you&apos;.  As we need all the properties, we&apos;d better return empty handle here.  Still I agree the semantics is somewhat weird and I cannot immediately invent situation where False would be useful.

Ah....I haven&apos;t done much with v8::Booleans, so I hadn&apos;t realized that there was a difference.  My quick search through the code tricked me.

&gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; &gt; +    if (storage-&gt;contains(name) &amp;&amp; name != &quot;length&quot;)
&gt; &gt; &gt; +        return v8::True();
&gt; &gt; &gt; +
&gt; &gt; &gt; +    return v8::Handle&lt;v8::Boolean&gt;();
&gt; &gt; 
&gt; &gt; Same here: Why not v8::False()?
&gt; 
&gt; Ditto.
&gt; 
&gt; Nate, I&apos;m cq+&apos;ing it right now--cq has many pending patches so you should have enough time to remove cq+ if you&apos;d like me to address anything.

Ok, yeah, I think cq+ is fine. Thanks for clarifying!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233046</commentid>
    <comment_count>6</comment_count>
      <attachid>57560</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-01 20:28:28 -0700</bug_when>
    <thetext>Comment on attachment 57560
Patch

Clearing flags on attachment: 57560

Committed r60531: &lt;http://trac.webkit.org/changeset/60531&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233047</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-01 20:28:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57560</attachid>
            <date>2010-06-01 10:06:35 -0700</date>
            <delta_ts>2010-06-01 20:28:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40006-20100601210622.patch</filename>
            <type>text/plain</type>
            <size>7637</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWVlNThhYTE1NGQzZGFlMjE2Y2MyOGFjZmQ1ZTBmOTFlNzhiNGUwZi4uY2Y4NWEzZGYxNTU4YTUz
Yjk5ZDc2NTA5NmY2MGUyNjY5YjVlNWRjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMC0wNi0wMSAgYW50
b24gbXVoaW4gIDxhbnRvbm1AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbQ2hyb21pdW1dIGVuZm9yY2UgcHJlc2VuY2Ugb2YgbmFt
ZWQgcHJvcGVydHkgcXVlcnkgY2FsbGJhY2sgaWYgbmFtZWQgcHJvcGVydHkgZW51bWVyYXRvciBp
cyBwcmVzZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MDAwNgorICAgICAgICBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2Vl
biBlbnVtZXJhYmxlIGFuZCBub3QgZW51bWVyYWJsZSBwcm9wZXJ0aWVzCisgICAgICAgIGluIHRo
ZSBwcmVzZW5jZSBvZiBuYW1lZCBpbnRlcmNlcHRvci4gIFY4IGlzIG1pZ3JhdGluZyB0byB1c2Ug
cXVlcnkKKyAgICAgICAgY2FsbGJhY2sgdG8gcmVwb3J0IGVudW1lcmFibGUgcHJvcGVydGllcyBh
bmQgZmFsbGJhY2sgY2hlY2stLS0KKyAgICAgICAgdXNpbmcgZ2V0dGVyIGNhbGxiYWNrLS0td291
bGQgcmVwb3J0IHByb3BlcnRpZXMgYXMgbm90IGVudW1lcmFibGUuCisgICAgICAgIFRodXMgaWYg
dGhlcmUgaXMgYW4gZW51bWVyYXRvciBjYWxsYmFjaywgdGhlcmUgc2hvdWxkIGJlIHF1ZXJ5IGNh
bGxiYWNrIGFzIHdlbGwuCisgICAgICAgIChzZWUgVjgncyByNDc1MSkuCisKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOE5QT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5wT2JqZWN0UXVlcnlQcm9wZXJ0
eSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVWOE9iamVjdEZvck5QT2JqZWN0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhTdG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlY4U3RvcmFnZTo6bmFtZWRQcm9wZXJ0eVF1ZXJ5KToKKwogMjAxMC0wNi0wMSAgSm9j
ZWx5biBUdXJjb3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0KaW5kZXggYzkzYzI1YWFmYzQ5MzNmMzcyMzdkYzg4Nzc0Njk0NjI3NThm
OGFiNi4uNWU0ZTQ5ZTkzZTk0NzZiN2U2NjQ5NzFhNTA0N2Y2ZDI3OTk4MWFlYiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC00MzAsMzggKzQzMCwz
OSBAQCBzdWIgR2VuZXJhdGVIZWFkZXJOYW1lZEFuZEluZGV4ZWRQcm9wZXJ0eUFjY2Vzc29ycwog
CiAgICAgaWYgKCRoYXNDdXN0b21JbmRleGVkR2V0dGVyIHx8ICRpc0luZGV4ZXJTcGVjaWFsQ2Fz
ZSkgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7Ci0gICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBpbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gaW5kZXhlZFByb3BlcnR5R2V0dGVyKHVpbnQzMl90LCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJik7CiBFTkQKICAgICB9CiAKICAgICBpZiAoJGlzSW5kZXhlclNwZWNpYWxDYXNlIHx8
ICRoYXNDdXN0b21JbmRleGVkU2V0dGVyKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
IDw8RU5EKTsKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGluZGV4ZWRQcm9wZXJ0
eVNldHRlcih1aW50MzJfdCBpbmRleCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gaW5kZXhlZFByb3BlcnR5U2V0dGVyKHVpbnQzMl90LCB2ODo6TG9jYWw8djg6OlZhbHVlPiwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYpOwogRU5ECiAgICAgfQogICAgIGlmICgkaGFzQ3VzdG9t
RGVsZXRlcnMpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwotICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpCb29sZWFuPiBpbmRleGVkUHJvcGVydHlEZWxldGVyKHVpbnQz
Ml90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKTsKKyAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6Qm9vbGVhbj4gaW5kZXhlZFByb3BlcnR5RGVsZXRlcih1aW50MzJfdCwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYpOwogRU5ECiAgICAgfQogICAgIGlmICgkaGFzQ3VzdG9tTmFt
ZWRHZXR0ZXIpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwotICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbmFtZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbyk7CisgICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYpOwogRU5ECiAgICAgfQogICAgIGlm
ICgkaGFzQ3VzdG9tTmFtZWRTZXR0ZXIpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
PDxFTkQpOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbmFtZWRQcm9wZXJ0eVNl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFs
dWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pOworICAgIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gbmFtZWRQcm9wZXJ0eVNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4sIHY4
OjpMb2NhbDx2ODo6VmFsdWU+LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJik7CiBFTkQKICAgICB9
CiAgICAgaWYgKCRoYXNDdXN0b21EZWxldGVycyB8fCAkaW50ZXJmYWNlTmFtZSBlcSAiSFRNTERv
Y3VtZW50IikgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7Ci0gICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OkJvb2xlYW4+IG5hbWVkUHJvcGVydHlEZWxldGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKTsKKyAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6Qm9vbGVhbj4gbmFtZWRQcm9wZXJ0eURlbGV0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJik7CiBFTkQKICAgICB9CiAg
ICAgaWYgKCRoYXNDdXN0b21FbnVtZXJhdG9yKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsIDw8RU5EKTsKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IG5hbWVkUHJvcGVy
dHlFbnVtZXJhdG9yKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pOworICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpBcnJheT4gbmFtZWRQcm9wZXJ0eUVudW1lcmF0b3IoY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYpOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpCb29sZWFuPiBuYW1lZFBy
b3BlcnR5UXVlcnkodjg6OkxvY2FsPHY4OjpTdHJpbmc+LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
Jik7CiBFTkQKICAgICB9CiB9CkBAIC0xNTM2LDcgKzE1MzcsOCBAQCBFTkQKIAogICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGRlc2MtPiR7c2V0T259VGVtcGxhdGUoKS0+U2V0TmFtZWRQcm9w
ZXJ0eUhhbmRsZXIoVjgke2ludGVyZmFjZU5hbWV9OjpuYW1lZFByb3BlcnR5R2V0dGVyLCAiKTsK
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGhhc1NldHRlciA/ICJWOCR7aW50ZXJmYWNlTmFtZX06
Om5hbWVkUHJvcGVydHlTZXR0ZXIsICIgOiAiMCwgIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQs
ICIwLCAiKTsgIyBOYW1lZFByb3BlcnR5UXVlcnkgLS0gbm90IGJlaW5nIHVzZWQgYXQgdGhlIG1v
bWVudC4KKyAgICAjIElmIHRoZXJlIGlzIGEgY3VzdG9tIGVudW1lcmF0b3IsIHRoZXJlIE1VU1Qg
YmUgY3VzdG9tIHF1ZXJ5IHRvIHByb3Blcmx5IGNvbW11bmljYXRlIHByb3BlcnR5IGF0dHJpYnV0
ZXMuCisgICAgcHVzaChAaW1wbENvbnRlbnQsICRoYXNFbnVtZXJhdG9yID8gIlY4JHtpbnRlcmZh
Y2VOYW1lfTo6bmFtZWRQcm9wZXJ0eVF1ZXJ5LCIgOiAiMCwgIik7CiAgICAgcHVzaChAaW1wbENv
bnRlbnQsICRoYXNEZWxldGVyID8gIlY4JHtpbnRlcmZhY2VOYW1lfTo6bmFtZWRQcm9wZXJ0eURl
bGV0ZXIsICIgOiAiMCwgIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICRoYXNFbnVtZXJhdG9y
ID8gIlY4JHtpbnRlcmZhY2VOYW1lfTo6bmFtZWRQcm9wZXJ0eUVudW1lcmF0b3IiIDogIjAiKTsK
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIik7XG4iKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3Qu
Y3BwCmluZGV4IGY5Y2M5NGE5ZmU0NjViZWFlNzRkYjdkNzNkNTEyMTc2ODAxMzMyZTMuLjVjMzM1
NmZmNzRmMjYwMTI4ZjJlYmNhMDRhOWU2ZTU1NjdiODk3YjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5Q
T2JqZWN0LmNwcApAQCAtMjQzLDYgKzI0MywxMiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbnBP
YmplY3RHZXRJbmRleGVkUHJvcGVydHkodjg6OkxvY2FsPHY4OjpPYmplY3Q+IHNlbGYsIHVpbgog
ICAgIHJldHVybiBucE9iamVjdEdldFByb3BlcnR5KHNlbGYsIGlkZW50aWZpZXIsIHY4OjpOdW1i
ZXI6Ok5ldyhpbmRleCkpOwogfQogCit2ODo6SGFuZGxlPHY4OjpCb29sZWFuPiBucE9iamVjdFF1
ZXJ5UHJvcGVydHkodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCit7CisgICAgTlBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBnZXRTdHJpbmdJ
ZGVudGlmaWVyKG5hbWUpOworICAgIHJldHVybiBucE9iamVjdEdldFByb3BlcnR5KGluZm8uSG9s
ZGVyKCksIGlkZW50aWZpZXIsIG5hbWUpLklzRW1wdHkoKSA/IHY4OjpIYW5kbGU8djg6OkJvb2xl
YW4+KCkgOiB2ODo6VHJ1ZSgpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5w
T2JqZWN0U2V0UHJvcGVydHkodjg6OkxvY2FsPHY4OjpPYmplY3Q+IHNlbGYsIE5QSWRlbnRpZmll
ciBpZGVudGlmaWVyLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSkKIHsKICAgICBOUE9iamVj
dCogbnBPYmplY3QgPSB2OE9iamVjdFRvTlBPYmplY3Qoc2VsZik7CkBAIC0zNzMsNyArMzc5LDcg
QEAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNyZWF0ZVY4T2JqZWN0Rm9yTlBPYmplY3QoTlBPYmpl
Y3QqIG9iamVjdCwgTlBPYmplY3QqIHJvb3QKICAgICBpZiAobnBPYmplY3REZXNjLklzRW1wdHko
KSkgewogICAgICAgICBucE9iamVjdERlc2MgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT46Ok5ldyh2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KCkpOwogICAgICAgICBucE9i
amVjdERlc2MtPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0SW50ZXJuYWxGaWVsZENvdW50KG5wT2Jq
ZWN0SW50ZXJuYWxGaWVsZENvdW50KTsKLSAgICAgICAgbnBPYmplY3REZXNjLT5JbnN0YW5jZVRl
bXBsYXRlKCktPlNldE5hbWVkUHJvcGVydHlIYW5kbGVyKG5wT2JqZWN0TmFtZWRQcm9wZXJ0eUdl
dHRlciwgbnBPYmplY3ROYW1lZFByb3BlcnR5U2V0dGVyLCAwLCAwLCBucE9iamVjdE5hbWVkUHJv
cGVydHlFbnVtZXJhdG9yKTsKKyAgICAgICAgbnBPYmplY3REZXNjLT5JbnN0YW5jZVRlbXBsYXRl
KCktPlNldE5hbWVkUHJvcGVydHlIYW5kbGVyKG5wT2JqZWN0TmFtZWRQcm9wZXJ0eUdldHRlciwg
bnBPYmplY3ROYW1lZFByb3BlcnR5U2V0dGVyLCBucE9iamVjdFF1ZXJ5UHJvcGVydHksIDAsIG5w
T2JqZWN0TmFtZWRQcm9wZXJ0eUVudW1lcmF0b3IpOwogICAgICAgICBucE9iamVjdERlc2MtPklu
c3RhbmNlVGVtcGxhdGUoKS0+U2V0SW5kZXhlZFByb3BlcnR5SGFuZGxlcihucE9iamVjdEluZGV4
ZWRQcm9wZXJ0eUdldHRlciwgbnBPYmplY3RJbmRleGVkUHJvcGVydHlTZXR0ZXIsIDAsIDAsIG5w
T2JqZWN0SW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcik7CiAgICAgICAgIG5wT2JqZWN0RGVzYy0+
SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXRDYWxsQXNGdW5jdGlvbkhhbmRsZXIobnBPYmplY3RJbnZv
a2VEZWZhdWx0SGFuZGxlcik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhTdG9yYWdlQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U3RvcmFnZUN1c3RvbS5jcHAKaW5kZXggNzBkOGEwOTIyOTcxNDQwMzAzMjc5ZmQ5MTE0Nzcw
NDM1MWEwYzNhZC4uMzZiNzYxODQxYzJmMzE1ODMxZTgzMWQwZGEyN2M3ZWRkMzVmNTNhYSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdG9yYWdlQ3VzdG9tLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3BwCkBAIC03
OSw2ICs3OSwxOSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhTdG9yYWdlOjpuYW1lZFByb3Bl
cnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLAogICAgIHJldHVybiBzdG9yYWdl
R2V0dGVyKG5hbWUsIGluZm8pOwogfQogCit2ODo6SGFuZGxlPHY4OjpCb29sZWFuPiBWOFN0b3Jh
Z2U6Om5hbWVkUHJvcGVydHlRdWVyeSh2ODo6TG9jYWw8djg6OlN0cmluZz4gdjhOYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlN0b3JhZ2Uu
TmFtZWRQcm9wZXJ0eVF1ZXJ5Iik7CisKKyAgICBTdG9yYWdlKiBzdG9yYWdlID0gVjhTdG9yYWdl
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICBTdHJpbmcgbmFtZSA9IHRvV2ViQ29yZVN0
cmluZyh2OE5hbWUpOworCisgICAgaWYgKHN0b3JhZ2UtPmNvbnRhaW5zKG5hbWUpICYmIG5hbWUg
IT0gImxlbmd0aCIpCisgICAgICAgIHJldHVybiB2ODo6VHJ1ZSgpOworCisgICAgcmV0dXJuIHY4
OjpIYW5kbGU8djg6OkJvb2xlYW4+KCk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gc3RvcmFnZVNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gdjhOYW1lLCB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2OFZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAg
IFN0b3JhZ2UqIHN0b3JhZ2UgPSBWOFN0b3JhZ2U6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>