<?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>89629</bug_id>
          
          <creation_ts>2012-06-20 18:53:28 -0700</creation_ts>
          <short_desc>Use Dictionary in MutationObserver.observe to kill custom code</short_desc>
          <delta_ts>2012-06-20 21:19:13 -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>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="Adam Klein">adamk</reporter>
          <assigned_to name="Adam Klein">adamk</assigned_to>
          <cc>abarth</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>jochen</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>654130</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-06-20 18:53:28 -0700</bug_when>
    <thetext>Use Dictionary in MutationObserver.observe to kill custom code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654132</commentid>
    <comment_count>1</comment_count>
      <attachid>148707</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-06-20 18:55:28 -0700</bug_when>
    <thetext>Created attachment 148707
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654147</commentid>
    <comment_count>2</comment_count>
      <attachid>148707</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-20 19:04:32 -0700</bug_when>
    <thetext>Comment on attachment 148707
Patch

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

&gt; Source/WebCore/dom/WebKitMutationObserver.cpp:95
&gt; +    if (optionsDictionary.isUndefinedOrNull()) {
&gt; +        ec = TYPE_MISMATCH_ERR;
&gt; +        return;
&gt; +    }

I guess that this check would be already done in the generated code before WebKitMutationObserver::observe() is called back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654151</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-06-20 19:10:11 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 148707 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=148707&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/WebKitMutationObserver.cpp:95
&gt; &gt; +    if (optionsDictionary.isUndefinedOrNull()) {
&gt; &gt; +        ec = TYPE_MISMATCH_ERR;
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; 
&gt; I guess that this check would be already done in the generated code before WebKitMutationObserver::observe() is called back.

It&apos;s not. If I leave this out, I get the SYNTAX_ERR due to validateOptions failing (this is covered by fast/mutation/observe-exceptions.html).  Per WebIDL, it seems we&apos;re actually supposed to throw a TypeError if the passed-in dictionary isn&apos;t an Object:

http://www.w3.org/TR/WebIDL/#es-dictionary

The code as I&apos;ve written it is maintains the pre-existing behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654153</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-06-20 19:11:41 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 148707 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=148707&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/WebKitMutationObserver.cpp:95
&gt; &gt; &gt; +    if (optionsDictionary.isUndefinedOrNull()) {
&gt; &gt; &gt; +        ec = TYPE_MISMATCH_ERR;
&gt; &gt; &gt; +        return;
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; I guess that this check would be already done in the generated code before WebKitMutationObserver::observe() is called back.
&gt; 
&gt; It&apos;s not. If I leave this out, I get the SYNTAX_ERR due to validateOptions failing (this is covered by fast/mutation/observe-exceptions.html).  Per WebIDL, it seems we&apos;re actually supposed to throw a TypeError if the passed-in dictionary isn&apos;t an Object:
&gt; 
&gt; http://www.w3.org/TR/WebIDL/#es-dictionary
&gt; 
&gt; The code as I&apos;ve written it is maintains the pre-existing behavior.

Hmm, but you&apos;re quite right, the generated code does try to do this check. Investigating further...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654154</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-06-20 19:13:52 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; (From update of attachment 148707 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=148707&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/dom/WebKitMutationObserver.cpp:95
&gt; &gt; &gt; &gt; +    if (optionsDictionary.isUndefinedOrNull()) {
&gt; &gt; &gt; &gt; +        ec = TYPE_MISMATCH_ERR;
&gt; &gt; &gt; &gt; +        return;
&gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; 
&gt; &gt; &gt; I guess that this check would be already done in the generated code before WebKitMutationObserver::observe() is called back.
&gt; &gt; 
&gt; &gt; It&apos;s not. If I leave this out, I get the SYNTAX_ERR due to validateOptions failing (this is covered by fast/mutation/observe-exceptions.html).  Per WebIDL, it seems we&apos;re actually supposed to throw a TypeError if the passed-in dictionary isn&apos;t an Object:
&gt; &gt; 
&gt; &gt; http://www.w3.org/TR/WebIDL/#es-dictionary
&gt; &gt; 
&gt; &gt; The code as I&apos;ve written it is maintains the pre-existing behavior.
&gt; 
&gt; Hmm, but you&apos;re quite right, the generated code does try to do this check. Investigating further...

Oh, I just misread the generated code. It passes on undefined or null options, apparently it only catches the case of non-Object, non-null, non-undefined:

    if (args.Length() &gt; 1 &amp;&amp; !options.isUndefinedOrNull() &amp;&amp; !options.isObject()) {
        ec = TYPE_MISMATCH_ERR;
        V8Proxy::setDOMException(ec, args.GetIsolate());
        return V8Proxy::throwTypeError(&quot;Not an object.&quot;);
    }

Should we change CodeGenerator to do something different here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654160</commentid>
    <comment_count>6</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-20 19:16:27 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Oh, I just misread the generated code. It passes on undefined or null options, apparently it only catches the case of non-Object, non-null, non-undefined:
&gt; 
&gt;     if (args.Length() &gt; 1 &amp;&amp; !options.isUndefinedOrNull() &amp;&amp; !options.isObject()) {
&gt;         ec = TYPE_MISMATCH_ERR;
&gt;         V8Proxy::setDOMException(ec, args.GetIsolate());
&gt;         return V8Proxy::throwTypeError(&quot;Not an object.&quot;);
&gt;     }
&gt; 
&gt; Should we change CodeGenerator to do something different here?

Yeah, fixing the condition sounds reasonable.

Also, per the spec, we do not need to set TYPE_MISMATCH_ERR, we just need to throw TypeError. (Note: TYPE_MISMATCH_ERR and TypeError are different things.) If there is no concern about compatibility, we might want to remove TYPE_MISMATCH_ERR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654162</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-06-20 19:18:45 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Oh, I just misread the generated code. It passes on undefined or null options, apparently it only catches the case of non-Object, non-null, non-undefined:
&gt; &gt; 
&gt; &gt;     if (args.Length() &gt; 1 &amp;&amp; !options.isUndefinedOrNull() &amp;&amp; !options.isObject()) {
&gt; &gt;         ec = TYPE_MISMATCH_ERR;
&gt; &gt;         V8Proxy::setDOMException(ec, args.GetIsolate());
&gt; &gt;         return V8Proxy::throwTypeError(&quot;Not an object.&quot;);
&gt; &gt;     }
&gt; &gt; 
&gt; &gt; Should we change CodeGenerator to do something different here?
&gt; 
&gt; Yeah, fixing the condition sounds reasonable.

Okay.

&gt; Also, per the spec, we do not need to set TYPE_MISMATCH_ERR, we just need to throw TypeError. (Note: TYPE_MISMATCH_ERR and TypeError are different things.) If there is no concern about compatibility, we might want to remove TYPE_MISMATCH_ERR.

Yeah, I know they&apos;re different, but I don&apos;t think there are compat concerns here.

I&apos;d like to do both of the aforementioned things in separate changes, though, since they both could change behavior. This patch does not change behavior as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654163</commentid>
    <comment_count>8</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-20 19:19:00 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt;     if (args.Length() &gt; 1 &amp;&amp; !options.isUndefinedOrNull() &amp;&amp; !options.isObject()) 

This condition looks really strange. Maybe it could be:

    if (options.isUndefinedOrNull() || options.isObject())

I think we do not need to check args.Length(), since it is already handled by MAYBE_MISSING_PARAMETER() macro.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654215</commentid>
    <comment_count>9</comment_count>
      <attachid>148707</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-20 21:19:08 -0700</bug_when>
    <thetext>Comment on attachment 148707
Patch

Clearing flags on attachment: 148707

Committed r120900: &lt;http://trac.webkit.org/changeset/120900&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654216</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-20 21:19:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148707</attachid>
            <date>2012-06-20 18:55:28 -0700</date>
            <delta_ts>2012-06-20 21:19:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89629-20120620185528.patch</filename>
            <type>text/plain</type>
            <size>10804</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwODU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjRmNjRlNzg4OTEwZDAw
NDJkOWNjMTJmYWU4MzVlYmZlNjBmYTk4Zi4uNWM4MDhiNzk2MzczM2MwNzQ5ZWVjNjA0NjliYWRk
MTg0OWI0MGE3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTA2LTIwICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFVzZSBEaWN0aW9uYXJ5IGlu
IE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSB0byBraWxsIGN1c3RvbSBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTYyOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgY29kZSBmb3IgZGljdGlv
bmFyeSBwYXJzaW5nIGluIE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZQorICAgICAgICB0aGF0IHVz
ZWQgdG8gYmUgZHVwbGljYXRlZCAod2l0aCBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zKQorICAg
ICAgICBpbiBKU0MgYW5kIFY4IGJpbmRpbmdzIGludG8gV2ViS2l0TXV0YXRpb25PYnNlcnZlci5j
cHAsIHVzaW5nCisgICAgICAgIHRoZSBuZXcgRGljdGlvbmFyeSBpbnRlcmZhY2UuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1dlYktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwOgorICAg
ICAgICAqIGRvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUpOgorICAgICAgICAqIGRvbS9XZWJLaXRN
dXRhdGlvbk9ic2VydmVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBkb20vV2Vi
S2l0TXV0YXRpb25PYnNlcnZlci5pZGw6CisKIDIwMTItMDYtMTkgIEphbWVzIFJvYmluc29uICA8
amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFNlcGFyYXRlIExheWVy
UmVuZGVyZXIgaW5pdGlhbGl6YXRpb24gZnJvbSB1cGRhdGVMYXllcnMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdE11dGF0aW9uT2JzZXJ2ZXJD
dXN0b20uY3BwCmluZGV4IDM5YTI0NmExNTk5NGJhMDk4NjQyYmY1MjJkOGQ1NmFjYjdkMjFhZjku
LjQxZmZhZmMzNjBmM2RhNDkwMTNlM2U2NzVlOTAyODFjZGNjNDliYjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyQ3VzdG9tLmNwcApAQCAtMzQsMTUgKzM0LDkgQEAKIAogI2luY2x1ZGUgIkpTV2ViS2l0TXV0
YXRpb25PYnNlcnZlci5oIgogCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUg
IkpTRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkpTTXV0YXRpb25DYWxsYmFjay5oIgotI2luY2x1
ZGUgIkpTTm9kZS5oIgotI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJXZWJLaXRNdXRhdGlv
bk9ic2VydmVyLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKQEAgLTY0LDU5ICs1OCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgSlNXZWJLaXRNdXRhdGlvbk9ic2VydmVyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV2Vi
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3Ry
dWN0b3ItPmdsb2JhbE9iamVjdCgpLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpjcmVhdGUoY2Fs
bGJhY2sucmVsZWFzZSgpKSkpKTsKIH0KIAotc3RydWN0IEJvb2xlYW5PcHRpb24gewotICAgIGNv
bnN0IGNoYXIqIG5hbWU7Ci0gICAgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgdmFsdWU7Ci19Owot
Ci1zdGF0aWMgY29uc3QgQm9vbGVhbk9wdGlvbiBib29sZWFuT3B0aW9uc1tdID0gewotICAgIHsg
ImNoaWxkTGlzdCIsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoaWxkTGlzdCB9LAotICAgIHsg
ImF0dHJpYnV0ZXMiLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVzIH0sCi0gICAg
eyAiY2hhcmFjdGVyRGF0YSIsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoYXJhY3RlckRhdGEg
fSwKLSAgICB7ICJzdWJ0cmVlIiwgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6U3VidHJlZSB9LAot
ICAgIHsgImF0dHJpYnV0ZU9sZFZhbHVlIiwgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6QXR0cmli
dXRlT2xkVmFsdWUgfSwKLSAgICB7ICJjaGFyYWN0ZXJEYXRhT2xkVmFsdWUiLCBXZWJLaXRNdXRh
dGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJEYXRhT2xkVmFsdWUgfQotfTsKLQotc3RhdGljIGNvbnN0
IHNpemVfdCBudW1Cb29sZWFuT3B0aW9ucyA9IHNpemVvZihib29sZWFuT3B0aW9ucykgLyBzaXpl
b2YoQm9vbGVhbk9wdGlvbik7Ci0KLUpTVmFsdWUgSlNXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpv
YnNlcnZlKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMikKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoZXhlYykpOwotICAgIE5vZGUqIHRhcmdldCA9IHRvTm9kZShleGVjLT5hcmd1
bWVudCgwKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLQotICAgIEpTT2JqZWN0KiBvcHRpb25zT2JqZWN0ID0gZXhlYy0+YXJn
dW1lbnQoMSkuZ2V0T2JqZWN0KCk7Ci0gICAgaWYgKCFvcHRpb25zT2JqZWN0KSB7Ci0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Ci0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIEpTRGljdGlvbmFyeSBkaWN0aW9uYXJ5KGV4
ZWMsIG9wdGlvbnNPYmplY3QpOwotICAgIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMg
PSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Cb29sZWFuT3B0aW9uczsgKytp
KSB7Ci0gICAgICAgIGJvb2wgb3B0aW9uID0gZmFsc2U7Ci0gICAgICAgIGlmICghZGljdGlvbmFy
eS50cnlHZXRQcm9wZXJ0eShib29sZWFuT3B0aW9uc1tpXS5uYW1lLCBvcHRpb24pKQotICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIGlmIChvcHRpb24pCi0gICAgICAg
ICAgICBvcHRpb25zIHw9IGJvb2xlYW5PcHRpb25zW2ldLnZhbHVlOwotICAgIH0KLQotICAgIEhh
c2hTZXQ8QXRvbWljU3RyaW5nPiBhdHRyaWJ1dGVGaWx0ZXI7Ci0gICAgaWYgKCFkaWN0aW9uYXJ5
LnRyeUdldFByb3BlcnR5KCJhdHRyaWJ1dGVGaWx0ZXIiLCBhdHRyaWJ1dGVGaWx0ZXIpKQotICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBpZiAoIWF0dHJpYnV0ZUZpbHRlci5pc0Vt
cHR5KCkpCi0gICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6QXR0cmli
dXRlRmlsdGVyOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLT5vYnNl
cnZlKHRhcmdldCwgb3B0aW9ucywgYXR0cmlidXRlRmlsdGVyLCBlYyk7Ci0gICAgaWYgKGVjKQot
ICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoTVVU
QVRJT05fT0JTRVJWRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcApp
bmRleCBiNGVmNWYyZWNkMjE3OTY0MDRjOWMzNDI0YjI0ZjVkZTYzOTA5NDQwLi43NjY3ODU0YjI5
NzJiNTJlOGY4ZWY5YWIwYzZkNmJkYjUzM2U3OTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRNdXRhdGlvbk9i
c2VydmVyQ3VzdG9tLmNwcApAQCAtMzQsMjAgKzM0LDE0IEBACiAKICNpbmNsdWRlICJWOFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXIuaCIKIAotI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKLSNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhC
aW5kaW5nTWFjcm9zLmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVjhN
dXRhdGlvbkNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiVjhOb2RlLmgiCiAjaW5jbHVkZSAiVjhQcm94
eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25P
YnNlcnZlci5oIgogCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9taWNTdHJpbmcuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpjb25zdHJ1Y3RvckNhbGxiYWNrKGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC03OSw0MyArNzMsNiBAQCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpjb25zdHJ1Y3RvckNhbGxiYWNrKGNv
bnN0IHY4OjpBcgogICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwogfQogCi12ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZlQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5XZWJLaXRNdXRhdGlv
bk9ic2VydmVyLm9ic2VydmUiKTsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDIpCi0gICAgICAg
IHJldHVybiBWOFByb3h5Ojp0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNv
bGF0ZSgpKTsKLSAgICBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiBpbXAgPSBWOFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXI6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIEVYQ0VQVElPTl9CTE9D
SyhOb2RlKiwgdGFyZ2V0LCBWOE5vZGU6Okhhc0luc3RhbmNlKGFyZ3NbMF0pID8gVjhOb2RlOjp0
b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKSA6IDApOwotCi0g
ICAgaWYgKCFhcmdzWzFdLT5Jc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihU
WVBFX01JU01BVENIX0VSUiwgYXJncy5HZXRJc29sYXRlKCkpOwotCi0gICAgRGljdGlvbmFyeSBv
cHRpb25zT2JqZWN0KGFyZ3NbMV0pOwotICAgIHVuc2lnbmVkIG9wdGlvbnMgPSAwOwotICAgIEhh
c2hTZXQ8QXRvbWljU3RyaW5nPiBhdHRyaWJ1dGVGaWx0ZXI7Ci0gICAgYm9vbCBvcHRpb247Ci0g
ICAgaWYgKG9wdGlvbnNPYmplY3QuZ2V0KCJjaGlsZExpc3QiLCBvcHRpb24pICYmIG9wdGlvbikK
LSAgICAgICAgb3B0aW9ucyB8PSBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGlsZExpc3Q7Ci0g
ICAgaWYgKG9wdGlvbnNPYmplY3QuZ2V0KCJhdHRyaWJ1dGVzIiwgb3B0aW9uKSAmJiBvcHRpb24p
Ci0gICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6QXR0cmlidXRlczsK
LSAgICBpZiAob3B0aW9uc09iamVjdC5nZXQoImF0dHJpYnV0ZUZpbHRlciIsIGF0dHJpYnV0ZUZp
bHRlcikpCi0gICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6QXR0cmli
dXRlRmlsdGVyOwotICAgIGlmIChvcHRpb25zT2JqZWN0LmdldCgiY2hhcmFjdGVyRGF0YSIsIG9w
dGlvbikgJiYgb3B0aW9uKQotICAgICAgICBvcHRpb25zIHw9IFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXI6OkNoYXJhY3RlckRhdGE7Ci0gICAgaWYgKG9wdGlvbnNPYmplY3QuZ2V0KCJzdWJ0cmVlIiwg
b3B0aW9uKSAmJiBvcHRpb24pCi0gICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0YXRpb25PYnNl
cnZlcjo6U3VidHJlZTsKLSAgICBpZiAob3B0aW9uc09iamVjdC5nZXQoImF0dHJpYnV0ZU9sZFZh
bHVlIiwgb3B0aW9uKSAmJiBvcHRpb24pCi0gICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0YXRp
b25PYnNlcnZlcjo6QXR0cmlidXRlT2xkVmFsdWU7Ci0gICAgaWYgKG9wdGlvbnNPYmplY3QuZ2V0
KCJjaGFyYWN0ZXJEYXRhT2xkVmFsdWUiLCBvcHRpb24pICYmIG9wdGlvbikKLSAgICAgICAgb3B0
aW9ucyB8PSBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJEYXRhT2xkVmFsdWU7Ci0K
LSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXAtPm9ic2VydmUodGFyZ2V0LCBvcHRp
b25zLCBhdHRyaWJ1dGVGaWx0ZXIsIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiBW
OFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLSAgICByZXR1
cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5jcHAKaW5kZXggODAyNWI2ZTJhNmJlMmNlMTA0
NWE0ZjIwNjgxMTNkNThlNTNmN2FmOC4uNmZlNmFhNzc4ODJkOGMwNmI4ZDQ2NzhkY2E5ZTQ5MzIy
MTNkYmE4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVy
LmNwcApAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZl
ci5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIk11dGF0aW9uQ2FsbGJhY2suaCIK
QEAgLTgxLDE1ICs4Miw0MSBAQCBib29sIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OnZhbGlkYXRl
T3B0aW9ucyhNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zKQogICAgICAgICAmJiAoKG9w
dGlvbnMgJiBDaGFyYWN0ZXJEYXRhKSB8fCAhKG9wdGlvbnMgJiBDaGFyYWN0ZXJEYXRhT2xkVmFs
dWUpKTsKIH0KIAotdm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZlKE5vZGUqIG5v
ZGUsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMsIGNvbnN0IEhhc2hTZXQ8QXRvbWlj
U3RyaW5nPiYgYXR0cmlidXRlRmlsdGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViS2l0
TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2RlKiBub2RlLCBjb25zdCBEaWN0aW9uYXJ5JiBv
cHRpb25zRGljdGlvbmFyeSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFub2RlKSB7
CiAgICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAor
ICAgIGlmIChvcHRpb25zRGljdGlvbmFyeS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAg
IGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBz
dGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAg
TXV0YXRpb25PYnNlcnZlck9wdGlvbnMgdmFsdWU7CisgICAgfSBib29sZWFuT3B0aW9uc1tdID0g
eworICAgICAgICB7ICJjaGlsZExpc3QiLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGlsZExp
c3QgfSwKKyAgICAgICAgeyAiYXR0cmlidXRlcyIsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkF0
dHJpYnV0ZXMgfSwKKyAgICAgICAgeyAiY2hhcmFjdGVyRGF0YSIsIFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXI6OkNoYXJhY3RlckRhdGEgfSwKKyAgICAgICAgeyAic3VidHJlZSIsIFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXI6OlN1YnRyZWUgfSwKKyAgICAgICAgeyAiYXR0cmlidXRlT2xkVmFsdWUiLCBX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVPbGRWYWx1ZSB9LAorICAgICAgICB7ICJj
aGFyYWN0ZXJEYXRhT2xkVmFsdWUiLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJE
YXRhT2xkVmFsdWUgfQorICAgIH07CisgICAgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9u
cyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihib29sZWFuT3B0aW9u
cykgLyBzaXplb2YoYm9vbGVhbk9wdGlvbnNbMF0pOyArK2kpIHsKKyAgICAgICAgYm9vbCB2YWx1
ZSA9IGZhbHNlOworICAgICAgICBpZiAob3B0aW9uc0RpY3Rpb25hcnkuZ2V0KGJvb2xlYW5PcHRp
b25zW2ldLm5hbWUsIHZhbHVlKSAmJiB2YWx1ZSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gYm9v
bGVhbk9wdGlvbnNbaV0udmFsdWU7CisgICAgfQorCisgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+
IGF0dHJpYnV0ZUZpbHRlcjsKKyAgICBpZiAob3B0aW9uc0RpY3Rpb25hcnkuZ2V0KCJhdHRyaWJ1
dGVGaWx0ZXIiLCBhdHRyaWJ1dGVGaWx0ZXIpKQorICAgICAgICBvcHRpb25zIHw9IFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXI6OkF0dHJpYnV0ZUZpbHRlcjsKKwogICAgIGlmICghdmFsaWRhdGVPcHRp
b25zKG9wdGlvbnMpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXZpc2l0IHRoaXMgb25jZSB0aGUg
c3BlYyBzcGVjaWZpZXMgdGhlIGV4Y2VwdGlvbiB0eXBlOyBTWU5UQVhfRVJSIG1heSBub3QgYmUg
YXBwcm9wcmlhdGUuCiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oCmluZGV4
IDM4YWYyMzdlMTk4YmU4YTcyOWFhYzJmMDAwZGI4YWZlNThmMjk3MzkuLmJmMDk2NDcyNjY3MTQ1
Njk5OGU1YWIxMWQ5Mzg1NjZjNDMwMmNmODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktp
dE11dGF0aW9uT2JzZXJ2ZXIuaApAQCAtNDMsNiArNDMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIERpY3Rpb25hcnk7CiBjbGFzcyBNdXRhdGlvbkNhbGxiYWNrOwogY2xhc3Mg
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjsKIGNsYXNzIE11dGF0aW9uUmVjb3JkOwpAQCAt
NzgsNyArNzksNyBAQCBwdWJsaWM6CiAKICAgICB+V2ViS2l0TXV0YXRpb25PYnNlcnZlcigpOwog
Ci0gICAgdm9pZCBvYnNlcnZlKE5vZGUqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucywgY29uc3Qg
SGFzaFNldDxBdG9taWNTdHJpbmc+JiBhdHRyaWJ1dGVGaWx0ZXIsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2b2lkIG9ic2VydmUoTm9kZSosIGNvbnN0IERpY3Rpb25hcnkmLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgVmVjdG9yPFJlZlB0cjxNdXRhdGlvblJlY29yZD4gPiB0YWtlUmVjb3JkcygpOwog
ICAgIHZvaWQgZGlzY29ubmVjdCgpOwogICAgIHZvaWQgb2JzZXJ2YXRpb25TdGFydGVkKE11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRN
dXRhdGlvbk9ic2VydmVyLmlkbAppbmRleCBlNTM1ZjQ1YmZlMWIwMjE1OGQ3NDgzMDgxNDRjODlh
ZTczOTc3N2Q1Li5jMzM4YmUyOGRlMTk0ODIyY2QxYmJmOGI1NDQxNGVlZDE3MWVkZWZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaWRsCkBAIC0zNCw3
ICszNCw3IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgQ3VzdG9tQ29uc3RydWN0b3IsCiAgICAg
ICAgIENvbnN0cnVjdG9yUGFyYW1ldGVycz0xCiAgICAgXSBXZWJLaXRNdXRhdGlvbk9ic2VydmVy
IHsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCBvYnNlcnZlKGluIE5vZGUgdGFyZ2V0LCBpbiBNdXRh
dGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zKQorICAgICAgICB2b2lkIG9ic2VydmUoaW4gTm9k
ZSB0YXJnZXQsIGluIERpY3Rpb25hcnkgb3B0aW9ucykKICAgICAgICAgICAgIHJhaXNlcyhET01F
eGNlcHRpb24pOwogICAgICAgICBzZXF1ZW5jZTxNdXRhdGlvblJlY29yZD4gdGFrZVJlY29yZHMo
KTsKICAgICAgICAgdm9pZCBkaXNjb25uZWN0KCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>