<?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>135322</bug_id>
          
          <creation_ts>2014-07-26 06:54:14 -0700</creation_ts>
          <short_desc>REGRESSION: JSObjectSetPrototype() does not work on result of JSGetGlobalObject()</short_desc>
          <delta_ts>2014-07-28 13:44:29 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jay Freeman (saurik)">saurik</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>eoconnor</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>oliver</cc>
    
    <cc>saurik</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1025013</commentid>
    <comment_count>0</comment_count>
      <attachid>235573</attachid>
    <who name="Jay Freeman (saurik)">saurik</who>
    <bug_when>2014-07-26 06:54:14 -0700</bug_when>
    <thetext>Created attachment 235573
the C++ code I provided in my comment, as an attachment

Hello. I ran into this issue at WWDC while testing my software against Xcode 6. I provided a demonstration of this functionality difference in JavaScript to a couple engineers at Apple, and was encouraged to file two bug reports (#133531 and #133532). I also ran the behavior of the snippet of JavaScript I provided, which does not match the seemingly-correct behavior of both Firefox and Chrome, past someone I know on the ECMAScript standardization committee, and their response was &quot;lol&quot; ;P. However, I was told that at the JavaScript level, this behavior (which Safari used to simulate :/) was &quot;intended&quot;, and the bug was marked as &quot;won&apos;t fix&quot; :(.

I was, however and despite, also encouraged in the response to provide a test case demonstrating the change in behavior at the level of the C API as part of a (new?) bug report. I honestly have found it difficult to work up the energy to put this together, as I thought I had already described the behavior change decently, and it sounds like even non-compliance at the level of JavaScript visible to a browser is &quot;intentional&quot; :(. However, due to increasing numbers of bug reports against my software that are making me start to look into annoying or even &quot;drastic&quot; workarounds (including grubbing around in my JSObject memory), I am giving this a try.

Attached is some C++ code that uses JavaScriptCore. What it does is define a new JSClass, create a JSGlobalContext using that class for the global object, and then use JSContextGetGlobalObject to get a reference to this new object. It then attempts to set the prototype of this object, which is futile, as JSContextGetGlobalObject no longer actually returns the global object (despite the name of the function :/): instead, it returns a useless-to-me JSProxy that sort of almost sometimes wraps the behavior of the actual global object, and which for reasons I do not understand has its own separate prototype chain (I could see JSProxy proxying __proxy__).

The new prototype that I add has a single property, &quot;test&quot;, which I then try to access as a variable reference in the global scope (to simplify this code, the name of the property, the value of the property, and the code that I evaluate, are all the single string &quot;test&quot;). On older, working, versions of JavaScriptCore, JSContextGetGlobalObject returns the global object, the prototype is correctly set, and this program returns &quot;test&quot;. On newer, broken, versions of JavaScriptCore, JSContextGetGlobalObject returns a JSProxy, the prototype that is set does not get forwarded, and you get the JavaScript exception &quot;ReferenceError: Can&apos;t find variable: test&quot;

Sadly, as one of the main use cases for my software is as a library &quot;add-on&quot;, where the JSGlobalContext has already been created, I am not in a position to fix this by adding &quot;proxy-like&quot; forwarding logic to my own global object (which would have slightly incorrect semantics anyway unless I go to irritating lengths to attempt to simulate the behavior of properties being overridden from JavaScript prototypes), or to attempt to get a reference to the &quot;real&quot; prototype by using a constructor function (as I can&apos;t call JSObjectMakeConstructor without a reference to the JSClass, and I don&apos;t know of any way to get a JSClassRef given only a JSObjectRef). 

Regardless, thank you very much for looking at this bug report. Despite feeling a little demotivated with relation to this one issue, I have generally been a very happy user of JavaScriptCore for the last five years. I had a great time talking to Oliver about this issue at WWDC, and showing him the awkward behavior it was causing at the JavaScript level (where &quot;this.test&quot; and &quot;test&quot; give different results, despite &quot;this&quot; being a reference to the same global context object that &quot;test&quot; is supposed to be resolved from). I also found Edward (whom I met in person, and who wanted to be CC&apos;d to the bug report) very friendly to work with. Thank you both again!

#include &lt;JavaScriptCore/JSBase.h&gt;
#include &lt;JavaScriptCore/JSContextRef.h&gt;
#include &lt;JavaScriptCore/JSStringRef.h&gt;
#include &lt;JavaScriptCore/JSObjectRef.h&gt;
#include &lt;JavaScriptCore/JSValueRef.h&gt;

#include &lt;cassert&gt;
#include &lt;cstdio&gt;

int main() {
    JSValueRef error(NULL);

    JSClassDefinition definition(kJSClassDefinitionEmpty);
    definition.className = &quot;Global&quot;;
    JSClassRef global(JSClassCreate(&amp;definition));
    JSGlobalContextRef context(JSGlobalContextCreate(global));
    JSObjectRef object(JSContextGetGlobalObject(context));

    JSObjectRef above(JSObjectMake(context, NULL, NULL));
    JSStringRef test(JSStringCreateWithUTF8CString(&quot;test&quot;));
    JSValueRef value(JSValueMakeString(context, test));
    JSObjectSetProperty(context, above, test, value, kJSPropertyAttributeDontEnum, &amp;error);
    assert(error == NULL);

    JSObjectSetPrototype(context, object, above);
    JSValueRef result(JSEvaluateScript(context, test, NULL, NULL, 0, &amp;error));
    if (error != NULL) {
        assert(result == NULL);
        result = error;
        error = NULL;
    }

    JSStringRef string(JSValueToStringCopy(context, result, &amp;error));
    assert(error == NULL);
    char buffer[JSStringGetMaximumUTF8CStringSize(string)];
    JSStringGetUTF8CString(string, buffer, sizeof(buffer));
    printf(&quot;%s\n&quot;, buffer);
    return 0;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025143</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-28 09:35:30 -0700</bug_when>
    <thetext>Thank you for the very detailed bug report! 

The prototype chain of the JSProxy object should match that of the JSGlobalObject. Until recently, there was a bug in JSGlobalContextCreate that caused the two to have different prototype chains (see bug 135250).

I think you&apos;ve identified a separate but related issue with JSObjectSetPrototype which doesn&apos;t correctly account for JSProxies. It should be an easy fix. We should also audit the rest of the C API to check that we correctly handle JSProxies in all other situations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025193</commentid>
    <comment_count>2</comment_count>
      <attachid>235608</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-28 13:00:49 -0700</bug_when>
    <thetext>Created attachment 235608
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025197</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-28 13:03:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/17784938&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025213</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-28 13:44:29 -0700</bug_when>
    <thetext>Committed r171691: &lt;http://trac.webkit.org/changeset/171691&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>235573</attachid>
            <date>2014-07-26 06:54:14 -0700</date>
            <delta_ts>2014-07-26 06:54:14 -0700</delta_ts>
            <desc>the C++ code I provided in my comment, as an attachment</desc>
            <filename>JSContextGetGlobalObject.cpp</filename>
            <type>text/plain</type>
            <size>1341</size>
            <attacher name="Jay Freeman (saurik)">saurik</attacher>
            
              <data encoding="base64">I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgojaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNDb250ZXh0UmVmLmg+CiNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5o
PgojaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KCiNpbmNsdWRlIDxjYXNzZXJ0PgojaW5jbHVkZSA8Y3N0
ZGlvPgoKaW50IG1haW4oKSB7CiAgICBKU1ZhbHVlUmVmIGVycm9yKE5VTEwpOwoKICAgIEpTQ2xh
c3NEZWZpbml0aW9uIGRlZmluaXRpb24oa0pTQ2xhc3NEZWZpbml0aW9uRW1wdHkpOwogICAgZGVm
aW5pdGlvbi5jbGFzc05hbWUgPSAiR2xvYmFsIjsKICAgIEpTQ2xhc3NSZWYgZ2xvYmFsKEpTQ2xh
c3NDcmVhdGUoJmRlZmluaXRpb24pKTsKICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0KEpT
R2xvYmFsQ29udGV4dENyZWF0ZShnbG9iYWwpKTsKICAgIEpTT2JqZWN0UmVmIG9iamVjdChKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCkpOwoKICAgIEpTT2JqZWN0UmVmIGFib3ZlKEpT
T2JqZWN0TWFrZShjb250ZXh0LCBOVUxMLCBOVUxMKSk7CiAgICBKU1N0cmluZ1JlZiB0ZXN0KEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0ZXN0IikpOwogICAgSlNWYWx1ZVJlZiB2YWx1
ZShKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCB0ZXN0KSk7CiAgICBKU09iamVjdFNldFByb3Bl
cnR5KGNvbnRleHQsIGFib3ZlLCB0ZXN0LCB2YWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RW51bSwgJmVycm9yKTsKICAgIGFzc2VydChlcnJvciA9PSBOVUxMKTsKCiAgICBKU09iamVjdFNl
dFByb3RvdHlwZShjb250ZXh0LCBvYmplY3QsIGFib3ZlKTsKICAgIEpTVmFsdWVSZWYgcmVzdWx0
KEpTRXZhbHVhdGVTY3JpcHQoY29udGV4dCwgdGVzdCwgTlVMTCwgTlVMTCwgMCwgJmVycm9yKSk7
CiAgICBpZiAoZXJyb3IgIT0gTlVMTCkgewogICAgICAgIGFzc2VydChyZXN1bHQgPT0gTlVMTCk7
CiAgICAgICAgcmVzdWx0ID0gZXJyb3I7CiAgICAgICAgZXJyb3IgPSBOVUxMOwogICAgfQoKICAg
IEpTU3RyaW5nUmVmIHN0cmluZyhKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHJlc3VsdCwg
JmVycm9yKSk7CiAgICBhc3NlcnQoZXJyb3IgPT0gTlVMTCk7CiAgICBjaGFyIGJ1ZmZlcltKU1N0
cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoc3RyaW5nKV07CiAgICBKU1N0cmluZ0dldFVU
RjhDU3RyaW5nKHN0cmluZywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CiAgICBwcmludGYoIiVz
XG4iLCBidWZmZXIpOwogICAgcmV0dXJuIDA7Cn0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235608</attachid>
            <date>2014-07-28 13:00:49 -0700</date>
            <delta_ts>2014-07-28 13:06:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135322-20140728130035.patch</filename>
            <type>text/plain</type>
            <size>8792</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcxNjg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDE0LTA3LTI4ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUkVHUkVTU0lPTjogSlNPYmplY3RTZXRQcm90b3R5cGUoKSBkb2VzIG5vdCB3b3Jr
IG9uIHJlc3VsdCBvZiBKU0dldEdsb2JhbE9iamVjdCgpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUzMjIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgcHJvdG90eXBlIGNoYWluIG9mIHRoZSBKU1By
b3h5IG9iamVjdCBzaG91bGQgbWF0Y2ggdGhhdCBvZiB0aGUgSlNHbG9iYWxPYmplY3QuIAorCisg
ICAgICAgIFRoaXMgaXMgYSBzZXBhcmF0ZSBidXQgcmVsYXRlZCBpc3N1ZSB3aXRoIEpTT2JqZWN0
U2V0UHJvdG90eXBlIHdoaWNoIGRvZXNuJ3QgY29ycmVjdGx5IAorICAgICAgICBhY2NvdW50IGZv
ciBKU1Byb3hpZXMuIEkgYWxzbyBhdWRpdGVkIHRoZSByZXN0IG9mIHRoZSBDIEFQSSB0byBjaGVj
ayB0aGF0IHdlIGNvcnJlY3RseSAKKyAgICAgICAgaGFuZGxlIEpTUHJveGllcyBpbiBhbGwgb3Ro
ZXIgc2l0dWF0aW9ucyB3aGVyZSB3ZSBleHBlY3QgYSBKU0NhbGxiYWNrT2JqZWN0IG9mIHNvbWUg
c29ydAorICAgICAgICBhbmQgZm91bmQgc29tZSBTUEkgY2FsbHMgKEpTT2JqZWN0KlByaXZhdGVQ
cm9wZXJ0eSkgdGhhdCBkaWRuJ3QgYmVoYXZlIGNvcnJlY3RseSB3aGVuIAorICAgICAgICBwYXNz
ZWQgYSBKU1Byb3h5LgorCisgICAgICAgIEkgYWxzbyBhZGRlZCBzb21lIG5ldyB0ZXN0cyBmb3Ig
dGhlc2UgY2FzZXMuCisKKyAgICAgICAgKiBBUEkvSlNPYmplY3RSZWYuY3BwOgorICAgICAgICAo
SlNPYmplY3RTZXRQcm90b3R5cGUpOgorICAgICAgICAoSlNPYmplY3RHZXRQcml2YXRlUHJvcGVy
dHkpOgorICAgICAgICAoSlNPYmplY3RTZXRQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAoSlNP
YmplY3REZWxldGVQcml2YXRlUHJvcGVydHkpOgorICAgICAgICAqIEFQSS9KU1dlYWtPYmplY3RN
YXBSZWZQcml2YXRlLmNwcDoKKyAgICAgICAgKiBBUEkvdGVzdHMvQ3VzdG9tR2xvYmFsT2JqZWN0
Q2xhc3NUZXN0LmM6CisgICAgICAgIChnbG9iYWxPYmplY3RTZXRQcm90b3R5cGVUZXN0KToKKyAg
ICAgICAgKGdsb2JhbE9iamVjdFByaXZhdGVQcm9wZXJ0eVRlc3QpOgorICAgICAgICAqIEFQSS90
ZXN0cy9DdXN0b21HbG9iYWxPYmplY3RDbGFzc1Rlc3QuaDoKKyAgICAgICAgKiBBUEkvdGVzdHMv
dGVzdGFwaS5jOgorICAgICAgICAobWFpbik6CisKIDIwMTQtMDctMjggIEJyaWFuIEouIEJ1cmcg
IDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBSZXBsYXk6IGF1dG8tZGVj
b2Rpbmcgb2YgcGFyYW1ldGVyaXplZCB2ZWN0b3IncyBlbGVtZW50cyBpcyBpbmNvcnJlY3QKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAx
NzE2NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAyLDYgKzMwMiwxNCBAQCB2b2lkIEpTT2JqZWN0U2V0UHJvdG90eXBl
KEpTQ29udGV4dFJlZiBjCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwog
ICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgdmFsdWUpOwogCisgICAgaWYgKEpTUHJv
eHkqIHByb3h5ID0ganNEeW5hbWljQ2FzdDxKU1Byb3h5Kj4oanNPYmplY3QpKSB7CisgICAgICAg
IGlmIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU0dsb2Jh
bE9iamVjdCo+KHByb3h5LT50YXJnZXQoKSkpIHsKKyAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+
cmVzZXRQcm90b3R5cGUoZXhlYy0+dm0oKSwganNWYWx1ZSA/IGpzVmFsdWUgOiBqc051bGwoKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gU29tZWRheSB3ZSBt
aWdodCB1c2UgcHJveGllcyBmb3Igc29tZXRoaW5nIG90aGVyIHRoYW4gSlNHbG9iYWxPYmplY3Rz
LCBidXQgdG9kYXkgaXMgbm90IHRoYXQgZGF5LgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KICAgICBqc09iamVjdC0+c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hl
Y2soZXhlYywganNWYWx1ZS5pc09iamVjdCgpID8ganNWYWx1ZSA6IGpzTnVsbCgpKTsKIH0KIApA
QCAtNTAxLDYgKzUwOSwxMSBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJpdmF0ZVByb3BlcnR5
KEpTCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogICAgIEpTVmFsdWUg
cmVzdWx0OwogICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4
ZWMtPnZtKCkpKTsKKworICAgIC8vIEdldCB3cmFwcGVkIG9iamVjdCBpZiBwcm94aWVkCisgICAg
aWYgKGpzT2JqZWN0LT5pbmhlcml0cyhKU1Byb3h5OjppbmZvKCkpKQorICAgICAgICBqc09iamVj
dCA9IGpzQ2FzdDxKU1Byb3h5Kj4oanNPYmplY3QpLT50YXJnZXQoKTsKKwogICAgIGlmIChqc09i
amVjdC0+aW5oZXJpdHMoSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OmluZm8oKSkp
CiAgICAgICAgIHJlc3VsdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0
Pio+KGpzT2JqZWN0KS0+Z2V0UHJpdmF0ZVByb3BlcnR5KG5hbWUpOwogICAgIGVsc2UgaWYgKGpz
T2JqZWN0LT5pbmhlcml0cyhKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6
aW5mbygpKSkKQEAgLTUxOSw2ICs1MzIsMTEgQEAgYm9vbCBKU09iamVjdFNldFByaXZhdGVQcm9w
ZXJ0eShKU0NvbnRleAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZSA/IHRvSlMoZXhlYywgdmFsdWUpIDogSlNWYWx1ZSgp
OwogICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPnZt
KCkpKTsKKworICAgIC8vIEdldCB3cmFwcGVkIG9iamVjdCBpZiBwcm94aWVkCisgICAgaWYgKGpz
T2JqZWN0LT5pbmhlcml0cyhKU1Byb3h5OjppbmZvKCkpKQorICAgICAgICBqc09iamVjdCA9IGpz
Q2FzdDxKU1Byb3h5Kj4oanNPYmplY3QpLT50YXJnZXQoKTsKKwogICAgIGlmIChqc09iamVjdC0+
aW5oZXJpdHMoSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OmluZm8oKSkpIHsKICAg
ICAgICAganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+Kj4oanNPYmplY3Qp
LT5zZXRQcml2YXRlUHJvcGVydHkoZXhlYy0+dm0oKSwgbmFtZSwganNWYWx1ZSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtNTQyLDYgKzU2MCwxMSBAQCBib29sIEpTT2JqZWN0RGVsZXRlUHJp
dmF0ZVByb3BlcnR5KEpTQ29uCiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKICAgICBK
U09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAgICAgSWRlbnRpZmllciBuYW1lKHBy
b3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+dm0oKSkpOworCisgICAgLy8gR2V0IHdyYXBw
ZWQgb2JqZWN0IGlmIHByb3hpZWQKKyAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKEpTUHJveHk6
OmluZm8oKSkpCisgICAgICAgIGpzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihqc09iamVjdCkt
PnRhcmdldCgpOworCiAgICAgaWYgKGpzT2JqZWN0LT5pbmhlcml0cyhKU0NhbGxiYWNrT2JqZWN0
PEpTR2xvYmFsT2JqZWN0Pjo6aW5mbygpKSkgewogICAgICAgICBqc0Nhc3Q8SlNDYWxsYmFja09i
amVjdDxKU0dsb2JhbE9iamVjdD4qPihqc09iamVjdCktPmRlbGV0ZVByaXZhdGVQcm9wZXJ0eShu
YW1lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5jcHAJKHJldmlzaW9u
IDE3MTY3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXZWFrT2JqZWN0TWFwUmVm
UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDkgQEAgdm9pZCBKU1dlYWtP
YmplY3RNYXBTZXQoSlNDb250ZXh0UmVmIGN0eAogICAgIEpTT2JqZWN0KiBvYmogPSB0b0pTKG9i
amVjdCk7CiAgICAgaWYgKCFvYmopCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQob2JqLT5p
bmhlcml0cyhKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6aW5mbygpKSB8fCBvYmot
PmluaGVyaXRzKEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjppbmZvKCkp
KTsKKyAgICBBU1NFUlQob2JqLT5pbmhlcml0cyhKU1Byb3h5OjppbmZvKCkpCisgICAgICAgIHx8
IG9iai0+aW5oZXJpdHMoSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OmluZm8oKSkg
CisgICAgICAgIHx8IG9iai0+aW5oZXJpdHMoSlNDYWxsYmFja09iamVjdDxKU0Rlc3RydWN0aWJs
ZU9iamVjdD46OmluZm8oKSkpOwogICAgIG1hcC0+bWFwKCkuc2V0KGtleSwgb2JqKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9DdXN0b21HbG9iYWxPYmplY3RD
bGFzc1Rlc3QuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L0N1c3RvbUdsb2JhbE9iamVjdENsYXNzVGVzdC5jCShyZXZpc2lvbiAxNzE2NzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0N1c3RvbUdsb2JhbE9iamVjdENsYXNzVGVzdC5j
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJDdXN0b21HbG9i
YWxPYmplY3RDbGFzc1Rlc3QuaCIKIAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0
UmVmUHJpdmF0ZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+
CiAjaW5jbHVkZSA8c3RkaW8uaD4KIApAQCAtOTgsMyArOTksNDcgQEAgdm9pZCBjdXN0b21HbG9i
YWxPYmplY3RDbGFzc1Rlc3QoKQogCiAgICAgYXNzZXJ0VHJ1ZShleGVjdXRlZENhbGxiYWNrLCAi
RXhlY3V0ZWQgY3VzdG9tIGdsb2JhbCBvYmplY3QgY2FsbGJhY2siKTsKIH0KKwordm9pZCBnbG9i
YWxPYmplY3RTZXRQcm90b3R5cGVUZXN0KCkKK3sKKyAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZp
bml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CisgICAgZGVmaW5pdGlvbi5jbGFzc05h
bWUgPSAiR2xvYmFsIjsKKyAgICBKU0NsYXNzUmVmIGdsb2JhbCA9IEpTQ2xhc3NDcmVhdGUoJmRl
ZmluaXRpb24pOworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gSlNHbG9iYWxDb250
ZXh0Q3JlYXRlKGdsb2JhbCk7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNDb250ZXh0R2V0
R2xvYmFsT2JqZWN0KGNvbnRleHQpOworCisgICAgSlNPYmplY3RSZWYgYWJvdmUgPSBKU09iamVj
dE1ha2UoY29udGV4dCwgMCwgMCk7CisgICAgSlNTdHJpbmdSZWYgdGVzdCA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJ0ZXN0Iik7CisgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTVmFs
dWVNYWtlU3RyaW5nKGNvbnRleHQsIHRlc3QpOworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29u
dGV4dCwgYWJvdmUsIHRlc3QsIHZhbHVlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtLCAw
KTsKKworICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGNvbnRleHQsIG9iamVjdCwgYWJvdmUpOwor
ICAgIEpTU3RyaW5nUmVmIHNjcmlwdCA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0
ZXN0ID09PSBcInRlc3RcIiIpOworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNj
cmlwdChjb250ZXh0LCBzY3JpcHQsIDAsIDAsIDAsIDApOworCisgICAgYXNzZXJ0VHJ1ZShKU1Zh
bHVlVG9Cb29sZWFuKGNvbnRleHQsIHJlc3VsdCksICJ0ZXN0ID09PSBcInRlc3RcIiIpOworCisg
ICAgSlNTdHJpbmdSZWxlYXNlKHRlc3QpOworICAgIEpTU3RyaW5nUmVsZWFzZShzY3JpcHQpOwor
fQorCit2b2lkIGdsb2JhbE9iamVjdFByaXZhdGVQcm9wZXJ0eVRlc3QoKQoreworICAgIEpTQ2xh
c3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKKyAgICBk
ZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJHbG9iYWwiOworICAgIEpTQ2xhc3NSZWYgZ2xvYmFsID0g
SlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRl
eHQgPSBKU0dsb2JhbENvbnRleHRDcmVhdGUoZ2xvYmFsKTsKKyAgICBKU09iamVjdFJlZiBnbG9i
YWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCk7CisKKyAgICBKU1N0
cmluZ1JlZiBwcml2YXRlTmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcml2
YXRlIik7CisgICAgSlNWYWx1ZVJlZiBwcml2YXRlVmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhj
b250ZXh0LCBwcml2YXRlTmFtZSk7CisgICAgYXNzZXJ0VHJ1ZShKU09iamVjdFNldFByaXZhdGVQ
cm9wZXJ0eShjb250ZXh0LCBnbG9iYWxPYmplY3QsIHByaXZhdGVOYW1lLCBwcml2YXRlVmFsdWUp
LCAiSlNPYmplY3RTZXRQcml2YXRlUHJvcGVydHkgc3VjY2VlZGVkIik7CisgICAgSlNWYWx1ZVJl
ZiByZXN1bHQgPSBKU09iamVjdEdldFByaXZhdGVQcm9wZXJ0eShjb250ZXh0LCBnbG9iYWxPYmpl
Y3QsIHByaXZhdGVOYW1lKTsKKyAgICBhc3NlcnRUcnVlKEpTVmFsdWVJc1N0cmljdEVxdWFsKGNv
bnRleHQsIHByaXZhdGVWYWx1ZSwgcmVzdWx0KSwgInByaXZhdGVWYWx1ZSA9PT0gXCJwcml2YXRl
XCIiKTsKKworICAgIGFzc2VydFRydWUoSlNPYmplY3REZWxldGVQcml2YXRlUHJvcGVydHkoY29u
dGV4dCwgZ2xvYmFsT2JqZWN0LCBwcml2YXRlTmFtZSksICJKU09iamVjdERlbGV0ZVByaXZhdGVQ
cm9wZXJ0eSBzdWNjZWVkZWQiKTsKKyAgICByZXN1bHQgPSBKU09iamVjdEdldFByaXZhdGVQcm9w
ZXJ0eShjb250ZXh0LCBnbG9iYWxPYmplY3QsIHByaXZhdGVOYW1lKTsKKyAgICBhc3NlcnRUcnVl
KEpTVmFsdWVJc051bGwoY29udGV4dCwgcmVzdWx0KSwgIkRlbGV0ZWQgcHJpdmF0ZSBwcm9wZXJ0
eSBpcyBpbmRlZWQgbm8gbG9uZ2VyIHByZXNlbnQiKTsKKworICAgIEpTU3RyaW5nUmVsZWFzZShw
cml2YXRlTmFtZSk7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0N1
c3RvbUdsb2JhbE9iamVjdENsYXNzVGVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvdGVzdHMvQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0LmgJKHJldmlzaW9u
IDE3MTY3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvQ3VzdG9tR2xvYmFs
T2JqZWN0Q2xhc3NUZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDUgKzI3LDcgQEAKICNkZWZp
bmUgQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0X2gKIAogdm9pZCBjdXN0b21HbG9iYWxPYmpl
Y3RDbGFzc1Rlc3Qodm9pZCk7Cit2b2lkIGdsb2JhbE9iamVjdFNldFByb3RvdHlwZVRlc3Qodm9p
ZCk7Cit2b2lkIGdsb2JhbE9iamVjdFByaXZhdGVQcm9wZXJ0eVRlc3Qodm9pZCk7CiAKICNlbmRp
ZiAvLyBDdXN0b21HbG9iYWxPYmplY3RDbGFzc1Rlc3RfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJKHJldmlzaW9uIDE3MTY3OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCSh3b3JraW5nIGNvcHkpCkBAIC0yMDc5
LDYgKzIwNzksOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICBw
cmludGYoIlBBU1M6IGdsb2JhbCBjb250ZXh0IG5hbWUgYmVoYXZlcyBhcyBleHBlY3RlZC5cbiIp
OwogCiAgICAgY3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0KCk7CisgICAgZ2xvYmFsT2JqZWN0
U2V0UHJvdG90eXBlVGVzdCgpOworICAgIGdsb2JhbE9iamVjdFByaXZhdGVQcm9wZXJ0eVRlc3Qo
KTsKIAogICAgIGlmIChmYWlsZWQpIHsKICAgICAgICAgcHJpbnRmKCJGQUlMOiBTb21lIHRlc3Rz
IGZhaWxlZC5cbiIpOwo=
</data>
<flag name="review"
          id="260188"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>