<?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>155442</bug_id>
          
          <creation_ts>2016-03-14 10:23:59 -0700</creation_ts>
          <short_desc>Support manually accepting invalid SSL certificates with NetworkSession</short_desc>
          <delta_ts>2016-03-17 12:28:57 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1174520</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-14 10:23:59 -0700</bug_when>
    <thetext>Support manually accepting invalid SSL certificates with NetworkSession</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174521</commentid>
    <comment_count>1</comment_count>
      <attachid>273986</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-14 10:29:00 -0700</bug_when>
    <thetext>Created attachment 273986
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174554</commentid>
    <comment_count>2</comment_count>
    <who name="">mitz</who>
    <bug_when>2016-03-14 11:24:34 -0700</bug_when>
    <thetext>Can an API test be written for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174563</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-14 11:32:22 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Can an API test be written for this?
Not easily.  The easiest way I can think of would be to use https://bugs.webkit.org/show_bug.cgi?id=148719 and do all the steps of an ssl handshake manually.  That would be fun, but probably not a good use of time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174565</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-14 11:32:46 -0700</bug_when>
    <thetext>The test I have been doing manually is going to badssl.com and clicking on something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174590</commentid>
    <comment_count>5</comment_count>
      <attachid>273986</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-03-14 11:56:03 -0700</bug_when>
    <thetext>Comment on attachment 273986
Patch

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

&gt; Source/WebKit2/ChangeLog:5
&gt; +        rdar://problem/24847398

This should be wrapped in &lt;&gt;

&gt; Source/WebKit2/ChangeLog:7
&gt; +        Reviewed by NOBODY (OOPS!).

Can you add your manual test step here, so others can try it?

&gt; Source/WebKit2/NetworkProcess/NetworkLoad.cpp:350
&gt; +        completionHandler(AuthenticationChallengeDisposition::RejectProtectionSpace, { });

Why change from the explicit constructor syntax to an implicit credential constructor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174632</commentid>
    <comment_count>6</comment_count>
      <attachid>273986</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-14 12:56:56 -0700</bug_when>
    <thetext>Comment on attachment 273986
Patch

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

&gt;&gt; Source/WebKit2/NetworkProcess/NetworkLoad.cpp:350
&gt;&gt; +        completionHandler(AuthenticationChallengeDisposition::RejectProtectionSpace, { });
&gt; 
&gt; Why change from the explicit constructor syntax to an implicit credential constructor?

To be consistent.  The only AuthenticationChallengeDisposition that actually uses the credential is UseCredential.  The others are ignored.  See https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSessionDelegate_protocol/index.html#//apple_ref/doc/c_ref/NSURLSessionAuthChallengeDisposition</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174634</commentid>
    <comment_count>7</comment_count>
      <attachid>274005</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-14 12:59:04 -0700</bug_when>
    <thetext>Created attachment 274005
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174681</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-14 13:52:21 -0700</bug_when>
    <thetext>I manually verified this fixes the behavior on iOS with NetworkSession, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175556</commentid>
    <comment_count>9</comment_count>
      <attachid>274005</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-16 16:43:50 -0700</bug_when>
    <thetext>Comment on attachment 274005
Patch

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

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:354
&gt; +        CFIndex length1 = CFDataGetLength(data1.get());
&gt; +        CFIndex length2 = CFDataGetLength(data2.get());
&gt; +        if (length1 != length2)
&gt; +            return false;
&gt; +        if (memcmp(CFDataGetBytePtr(data1.get()), CFDataGetBytePtr(data2.get()), length1))
&gt; +            return false;

Probably better to use CFEqual here:

    if (!CFEqual(data1.get(), data2.get()))
        return false;

Wish there was a CF equivalent to isEqualToData: but there does not seem to be.

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:362
&gt; +    if (NSArray *certArray = [NSURLRequest allowsSpecificHTTPSCertificateForHost:host]) {

Why not call this certificateArray or certificates?

Also, I suggest early return instead of nesting the entire function inside an if statement.

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:363
&gt; +        RetainPtr&lt;CFStringRef&gt; cfHost = host.createCFString();

I wouldn’t bother putting this into a local variable. Instead I would use a local variable, or helper function, for the super-long boolean expression:

    bool requireServerCertificates = challenge.protectionSpace().authenticationScheme() == WebCore::ProtectionSpaceAuthenticationScheme::ProtectionSpaceAuthenticationSchemeServerTrustEvaluationRequested;
    auto policy = adoptCF(SecPolicyCreateSSL(requireServerCertificates, host.createCFString().get()));

or:

    auto policy = adoptCF(SecPolicyCreateSSL(requireServerCertificates(challenge), host.createCFString().get()));

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:366
&gt; +        SecTrustRef trustRef = nil;

Should be nullptr. It’s right to use nil for Objective-C types, but not for CF types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175557</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-16 16:46:04 -0700</bug_when>
    <thetext>Thanks for the r+, Darin.  I&apos;m almost done with a new patch with a unit test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175561</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-16 16:49:33 -0700</bug_when>
    <thetext>(In reply to comment #9)

&gt; &gt; Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:354
&gt; &gt; +        CFIndex length1 = CFDataGetLength(data1.get());
&gt; &gt; +        CFIndex length2 = CFDataGetLength(data2.get());
&gt; &gt; +        if (length1 != length2)
&gt; &gt; +            return false;
&gt; &gt; +        if (memcmp(CFDataGetBytePtr(data1.get()), CFDataGetBytePtr(data2.get()), length1))
&gt; &gt; +            return false;
&gt; 
&gt; Probably better to use CFEqual here:
&gt; 
&gt;     if (!CFEqual(data1.get(), data2.get()))
&gt;         return false;
&gt; 
&gt; Wish there was a CF equivalent to isEqualToData: but there does not seem to
&gt; be.
I call CFEqual on the SecCertificateRefs in the next patch.  Much cleaner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175816</commentid>
    <comment_count>12</comment_count>
      <attachid>274313</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-17 12:27:43 -0700</bug_when>
    <thetext>Created attachment 274313
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175818</commentid>
    <comment_count>13</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-17 12:28:57 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/198347
I have a unit test on my computer I plan to land soon separately.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273986</attachid>
            <date>2016-03-14 10:29:00 -0700</date>
            <delta_ts>2016-03-14 12:59:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155442-20160314102848.patch</filename>
            <type>text/plain</type>
            <size>6535</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODEzOCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTAzLTE0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3VwcG9ydCBt
YW51YWxseSBhY2NlcHRpbmcgaW52YWxpZCBTU0wgY2VydGlmaWNhdGVzIHdpdGggTmV0d29ya1Nl
c3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NTQ0MgorICAgICAgICByZGFyOi8vcHJvYmxlbS8yNDg0NzM5OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gd2UgY2xpY2sgY29udGludWUgYWZ0
ZXIgZ2V0dGluZyBhIHdhcm5pbmcgYWJvdXQgYW4gaW52YWxpZCBTU0wgY2VydGlmaWNhdGUsIHdl
IGNhbGwKKyAgICAgICAgTlNVUkxSZXF1ZXN0IHNldEFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZp
Y2F0ZSBpbiBOZXR3b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0LAorICAgICAgICB3aGljaCBzdG9yZXMgaW5mb3JtYXRpb24gaW4gQ0ZOZXR3b3JrIGFib3V0
IHRoZSBzcGVjaWZpYyBpbnZhbGlkIFNTTCBjZXJ0aWZpY2F0ZSB3ZSB3YW50IHRvIGFjY2VwdC4K
KyAgICAgICAgSWYgd2Ugc2VlIHN1Y2ggYSBjZXJ0aWZpY2F0ZSBkdXJpbmcgYSBzZXJ2ZXIgdHJ1
c3QgZXZhbHVhdGlvbiwgd2Ugd2FudCB0byB0ZWxsIENGTmV0d29yayB0byBhY2NlcHQgaXQuCisK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaDoKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtM
b2FkOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6
OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW06CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6dHJhbnNmZXJTYW5kYm94RXh0ZW5zaW9uVG9Eb3du
bG9hZCk6CisgICAgICAgIChXZWJLaXQ6OmNlcnRpZmljYXRlc01hdGNoKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjphbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzdWdnZXN0ZWRGaWxlbmFt
ZSk6CisKIDIwMTYtMDMtMTQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCB0aGUgR1RLKyBidWlsZCBhZnRlciByMTk4
MTI0LgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Rh
dGFUYXNrLmgJKHJldmlzaW9uIDE5ODAyNSkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtEYXRhVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDcgQEAg
cHVibGljOgogICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSgpOwogICAgIHZvaWQgd2lsbFBl
cmZvcm1IVFRQUmVkaXJlY3Rpb24oY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKTsKICAg
ICB2b2lkIHRyYW5zZmVyU2FuZGJveEV4dGVuc2lvblRvRG93bmxvYWQoRG93bmxvYWQmKTsKKyAg
ICBib29sIGFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ29y
ZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICAKIHByaXZhdGU6CiAgICAgTmV0d29y
a0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMsIFdl
YkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25I
VFRQU1RvSFRUUFJlZGlyZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtMb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrTG9hZC5jcHAJKHJldmlzaW9uIDE5ODAyNSkKKysrIFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDcg
KzIwNiwxMCBAQCB2b2lkIE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvCiAgICAg
Ly8gSGFuZGxlIHNlcnZlciB0cnVzdCBldmFsdWF0aW9uIGF0IHBsYXRmb3JtLWxldmVsIGlmIHJl
cXVlc3RlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCiAgICAgaWYgKGNoYWxsZW5nZS5wcm90
ZWN0aW9uU3BhY2UoKS5hdXRoZW50aWNhdGlvblNjaGVtZSgpID09IFByb3RlY3Rpb25TcGFjZUF1
dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVkCiAgICAgICAg
ICYmICFOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuY2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVz
dEV2YWx1YXRpb24oKSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpSZWplY3RQcm90ZWN0aW9uU3BhY2UsIENyZWRlbnRpYWwo
KSk7CisgICAgICAgIGlmIChtX3Rhc2sgJiYgbV90YXNrLT5hbGxvd3NTcGVjaWZpY0hUVFBTQ2Vy
dGlmaWNhdGVGb3JIb3N0KGNoYWxsZW5nZSkpCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFsLCBzZXJ2
ZXJUcnVzdENyZWRlbnRpYWwobV9jaGFsbGVuZ2UpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6
UmVqZWN0UHJvdGVjdGlvblNwYWNlLCB7IH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0zNDQsNyArMzQ3LDcgQEAgdm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVDYW5BdXRoZW50aWNh
dAogICAgIEFTU0VSVChtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBhdXRvIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKTsK
ICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpSZWplY3RQcm90ZWN0aW9uU3BhY2UsIENyZWRlbnRp
YWwoKSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
RGlzcG9zaXRpb246OlJlamVjdFByb3RlY3Rpb25TcGFjZSwgeyB9KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKQEAgLTM1NCw3ICszNTcsNyBAQCB2b2lkIE5ldHdvcmtMb2FkOjpjb250
aW51ZUNhbkF1dGhlbnRpY2F0CiAgICAgfQogICAgIAogICAgIGlmIChtX3BhcmFtZXRlcnMuY2xp
ZW50Q3JlZGVudGlhbFBvbGljeSA9PSBEb05vdEFza0NsaWVudEZvckFueUNyZWRlbnRpYWxzKSB7
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9z
aXRpb246OlVzZUNyZWRlbnRpYWwsIENyZWRlbnRpYWwoKSk7CisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWws
IHsgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tD
b2NvYS5tbQkocmV2aXNpb24gMTk4MDI1KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzNiw2
ICszMzYsNDIgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnRyYW5zZmVyU2FuZGJveEV4dAogICAg
IGRvd25sb2FkLnNldFNhbmRib3hFeHRlbnNpb24oV1RGTW92ZShtX3NhbmRib3hFeHRlbnNpb24p
KTsKIH0KIAorc3RhdGljIGJvb2wgY2VydGlmaWNhdGVzTWF0Y2goU2VjVHJ1c3RSZWYgdHJ1c3Qx
LCBTZWNUcnVzdFJlZiB0cnVzdDIpCit7CisgICAgQ0ZJbmRleCBjb3VudDEgPSBTZWNUcnVzdEdl
dENlcnRpZmljYXRlQ291bnQodHJ1c3QxKTsKKyAgICBDRkluZGV4IGNvdW50MiA9IFNlY1RydXN0
R2V0Q2VydGlmaWNhdGVDb3VudCh0cnVzdDIpOworICAgIGlmIChjb3VudDEgIT0gY291bnQyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjb3Vu
dDE7IGkrKykgeworICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhMSA9IGFkb3B0Q0Yo
U2VjQ2VydGlmaWNhdGVDb3B5RGF0YShTZWNUcnVzdEdldENlcnRpZmljYXRlQXRJbmRleCh0cnVz
dDEsIGkpKSk7CisgICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEyID0gYWRvcHRDRihT
ZWNDZXJ0aWZpY2F0ZUNvcHlEYXRhKFNlY1RydXN0R2V0Q2VydGlmaWNhdGVBdEluZGV4KHRydXN0
MiwgaSkpKTsKKyAgICAgICAgQ0ZJbmRleCBsZW5ndGgxID0gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEx
LmdldCgpKTsKKyAgICAgICAgQ0ZJbmRleCBsZW5ndGgyID0gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEy
LmdldCgpKTsKKyAgICAgICAgaWYgKGxlbmd0aDEgIT0gbGVuZ3RoMikKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1lbWNtcChDRkRhdGFHZXRCeXRlUHRyKGRhdGExLmdl
dCgpKSwgQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhMi5nZXQoKSksIGxlbmd0aDEpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK2Jvb2wg
TmV0d29ya0RhdGFUYXNrOjphbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNv
bnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCit7CisgICAg
Y29uc3QgU3RyaW5nJiBob3N0ID0gY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLmhvc3QoKTsK
KyAgICBpZiAoTlNBcnJheSAqY2VydEFycmF5ID0gW05TVVJMUmVxdWVzdCBhbGxvd3NTcGVjaWZp
Y0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0Omhvc3RdKSB7CisgICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gY2ZIb3N0ID0gaG9zdC5jcmVhdGVDRlN0cmluZygpOworICAgICAgICBSZXRhaW5Q
dHI8U2VjUG9saWN5UmVmPiBwb2xpY3kgPSBhZG9wdENGKFNlY1BvbGljeUNyZWF0ZVNTTChjaGFs
bGVuZ2UucHJvdGVjdGlvblNwYWNlKCkuYXV0aGVudGljYXRpb25TY2hlbWUoKSA9PSBXZWJDb3Jl
OjpQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZTo6UHJvdGVjdGlvblNwYWNlQXV0
aGVudGljYXRpb25TY2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQsIGNmSG9zdC5n
ZXQoKSkpOworICAgICAgICAKKyAgICAgICAgU2VjVHJ1c3RSZWYgdHJ1c3RSZWYgPSBuaWw7Cisg
ICAgICAgIGlmIChTZWNUcnVzdENyZWF0ZVdpdGhDZXJ0aWZpY2F0ZXMoKENGQXJyYXlSZWYpY2Vy
dEFycmF5LCBwb2xpY3kuZ2V0KCksICZ0cnVzdFJlZikgIT0gbm9FcnIpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIFJldGFpblB0cjxTZWNUcnVzdFJlZj4gdHJ1c3QgPSBhZG9w
dENGKHRydXN0UmVmKTsKKyAgICAgICAgcmV0dXJuIGNlcnRpZmljYXRlc01hdGNoKHRydXN0Lmdl
dCgpLCBjaGFsbGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpLnByb3RlY3Rpb25T
cGFjZS5zZXJ2ZXJUcnVzdCk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogU3RyaW5n
IE5ldHdvcmtEYXRhVGFzazo6c3VnZ2VzdGVkRmlsZW5hbWUoKQogewogICAgIHJldHVybiBtX3Rh
c2suZ2V0KCkucmVzcG9uc2Uuc3VnZ2VzdGVkRmlsZW5hbWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274005</attachid>
            <date>2016-03-14 12:59:04 -0700</date>
            <delta_ts>2016-03-17 12:27:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155442-20160314125852.patch</filename>
            <type>text/plain</type>
            <size>6642</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODEzOCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDE2LTAzLTE0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3VwcG9ydCBt
YW51YWxseSBhY2NlcHRpbmcgaW52YWxpZCBTU0wgY2VydGlmaWNhdGVzIHdpdGggTmV0d29ya1Nl
c3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NTQ0MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjQ4NDczOTg+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiB3ZSBjbGljayBjb250aW51ZSBh
ZnRlciBnZXR0aW5nIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIFNTTCBjZXJ0aWZpY2F0ZSwg
d2UgY2FsbAorICAgICAgICBOU1VSTFJlcXVlc3Qgc2V0QWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRp
ZmljYXRlIGluIE5ldHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZv
ckhvc3QsCisgICAgICAgIHdoaWNoIHN0b3JlcyBpbmZvcm1hdGlvbiBpbiBDRk5ldHdvcmsgYWJv
dXQgdGhlIHNwZWNpZmljIGludmFsaWQgU1NMIGNlcnRpZmljYXRlIHdlIHdhbnQgdG8gYWNjZXB0
LgorICAgICAgICBJZiB3ZSBzZWUgc3VjaCBhIGNlcnRpZmljYXRlIGR1cmluZyBhIHNlcnZlciB0
cnVzdCBldmFsdWF0aW9uLCB3ZSB3YW50IHRvIHRlbGwgQ0ZOZXR3b3JrIHRvIGFjY2VwdCBpdC4K
KyAgICAgICAgVGhpcyBmaXhlcyBhIGxvb3Agd2hlbiBnb2luZyB0byBodHRwczovL2JhZHNzbC5j
b20sIGNsaWNraW5nIG9uIGV4cGlyZWQsIGFuZCBjbGlja2luZyBjb250aW51ZS4KKworICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtMb2FkLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OmRp
ZFJlY2VpdmVDaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6Y29udGlu
dWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrOjp0cmFuc2ZlclNhbmRib3hFeHRlbnNpb25Ub0Rvd25sb2FkKToK
KyAgICAgICAgKFdlYktpdDo6Y2VydGlmaWNhdGVzTWF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2s6OmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnN1Z2dlc3RlZEZpbGVuYW1lKToKKwog
MjAxNi0wMy0xNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZC4gRml4IHRoZSBHVEsrIGJ1aWxkIGFmdGVyIHIxOTgxMjQuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2su
aAkocmV2aXNpb24gMTk4MDI1KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0RhdGFUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw2ICsxMjUsNyBAQCBwdWJsaWM6
CiAgICAgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lKCk7CiAgICAgdm9pZCB3aWxsUGVyZm9ybUhU
VFBSZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiYsIFJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQg
dHJhbnNmZXJTYW5kYm94RXh0ZW5zaW9uVG9Eb3dubG9hZChEb3dubG9hZCYpOworICAgIGJvb2wg
YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDb3JlOjpBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpOwogICAgIAogcHJpdmF0ZToKICAgICBOZXR3b3JrRGF0YVRh
c2soTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6
Q29udGVudFNuaWZmaW5nUG9saWN5LCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9I
VFRQUmVkaXJlY3QpOwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0xvYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtMb2FkLmNwcAkocmV2aXNpb24gMTk4MDI1KQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDEw
IEBAIHZvaWQgTmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVDaGFsbGVuZ2UoY28KICAgICAvLyBIYW5k
bGUgc2VydmVyIHRydXN0IGV2YWx1YXRpb24gYXQgcGxhdGZvcm0tbGV2ZWwgaWYgcmVxdWVzdGVk
LCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KICAgICBpZiAoY2hhbGxlbmdlLnByb3RlY3Rpb25T
cGFjZSgpLmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkgPT0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGlj
YXRpb25TY2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQKICAgICAgICAgJiYgIU5l
dHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5jYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhbHVh
dGlvbigpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlRGlzcG9zaXRpb246OlJlamVjdFByb3RlY3Rpb25TcGFjZSwgQ3JlZGVudGlhbCgpKTsKKyAg
ICAgICAgaWYgKG1fdGFzayAmJiBtX3Rhc2stPmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0
ZUZvckhvc3QoY2hhbGxlbmdlKSkKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWwsIHNlcnZlclRydXN0
Q3JlZGVudGlhbChtX2NoYWxsZW5nZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpSZWplY3RQ
cm90ZWN0aW9uU3BhY2UsIHsgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM0NCw3
ICszNDcsNyBAQCB2b2lkIE5ldHdvcmtMb2FkOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0CiAgICAg
QVNTRVJUKG1fY2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXIpOwogICAgIGF1dG8gY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKG1fY2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXIpOwogICAgIGlm
ICghcmVzdWx0KSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlRGlzcG9zaXRpb246OlJlamVjdFByb3RlY3Rpb25TcGFjZSwgQ3JlZGVudGlhbCgpKTsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3Np
dGlvbjo6UmVqZWN0UHJvdGVjdGlvblNwYWNlLCB7IH0pOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIApAQCAtMzU0LDcgKzM1Nyw3IEBAIHZvaWQgTmV0d29ya0xvYWQ6OmNvbnRpbnVlQ2Fu
QXV0aGVudGljYXQKICAgICB9CiAgICAgCiAgICAgaWYgKG1fcGFyYW1ldGVycy5jbGllbnRDcmVk
ZW50aWFsUG9saWN5ID09IERvTm90QXNrQ2xpZW50Rm9yQW55Q3JlZGVudGlhbHMpIHsKLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6
VXNlQ3JlZGVudGlhbCwgQ3JlZGVudGlhbCgpKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6VXNlQ3JlZGVudGlhbCwgeyB9KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1t
CShyZXZpc2lvbiAxOTgwMjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2Nv
YS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzM2LDYgKzMzNiw0
MiBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6dHJhbnNmZXJTYW5kYm94RXh0CiAgICAgZG93bmxv
YWQuc2V0U2FuZGJveEV4dGVuc2lvbihXVEZNb3ZlKG1fc2FuZGJveEV4dGVuc2lvbikpOwogfQog
CitzdGF0aWMgYm9vbCBjZXJ0aWZpY2F0ZXNNYXRjaChTZWNUcnVzdFJlZiB0cnVzdDEsIFNlY1Ry
dXN0UmVmIHRydXN0MikKK3sKKyAgICBDRkluZGV4IGNvdW50MSA9IFNlY1RydXN0R2V0Q2VydGlm
aWNhdGVDb3VudCh0cnVzdDEpOworICAgIENGSW5kZXggY291bnQyID0gU2VjVHJ1c3RHZXRDZXJ0
aWZpY2F0ZUNvdW50KHRydXN0Mik7CisgICAgaWYgKGNvdW50MSAhPSBjb3VudDIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50MTsgaSsr
KSB7CisgICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGExID0gYWRvcHRDRihTZWNDZXJ0
aWZpY2F0ZUNvcHlEYXRhKFNlY1RydXN0R2V0Q2VydGlmaWNhdGVBdEluZGV4KHRydXN0MSwgaSkp
KTsKKyAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTIgPSBhZG9wdENGKFNlY0NlcnRp
ZmljYXRlQ29weURhdGEoU2VjVHJ1c3RHZXRDZXJ0aWZpY2F0ZUF0SW5kZXgodHJ1c3QyLCBpKSkp
OworICAgICAgICBDRkluZGV4IGxlbmd0aDEgPSBDRkRhdGFHZXRMZW5ndGgoZGF0YTEuZ2V0KCkp
OworICAgICAgICBDRkluZGV4IGxlbmd0aDIgPSBDRkRhdGFHZXRMZW5ndGgoZGF0YTIuZ2V0KCkp
OworICAgICAgICBpZiAobGVuZ3RoMSAhPSBsZW5ndGgyKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAobWVtY21wKENGRGF0YUdldEJ5dGVQdHIoZGF0YTEuZ2V0KCkpLCBD
RkRhdGFHZXRCeXRlUHRyKGRhdGEyLmdldCgpKSwgbGVuZ3RoMSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorICAgIAorYm9vbCBOZXR3b3Jr
RGF0YVRhc2s6OmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKK3sKKyAgICBjb25zdCBT
dHJpbmcmIGhvc3QgPSBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkuaG9zdCgpOworICAgIGlm
IChOU0FycmF5ICpjZXJ0QXJyYXkgPSBbTlNVUkxSZXF1ZXN0IGFsbG93c1NwZWNpZmljSFRUUFND
ZXJ0aWZpY2F0ZUZvckhvc3Q6aG9zdF0pIHsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiBjZkhvc3QgPSBob3N0LmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgICAgIFJldGFpblB0cjxTZWNQ
b2xpY3lSZWY+IHBvbGljeSA9IGFkb3B0Q0YoU2VjUG9saWN5Q3JlYXRlU1NMKGNoYWxsZW5nZS5w
cm90ZWN0aW9uU3BhY2UoKS5hdXRoZW50aWNhdGlvblNjaGVtZSgpID09IFdlYkNvcmU6OlByb3Rl
Y3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lOjpQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNh
dGlvblNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZCwgY2ZIb3N0LmdldCgpKSk7
CisgICAgICAgIAorICAgICAgICBTZWNUcnVzdFJlZiB0cnVzdFJlZiA9IG5pbDsKKyAgICAgICAg
aWYgKFNlY1RydXN0Q3JlYXRlV2l0aENlcnRpZmljYXRlcygoQ0ZBcnJheVJlZiljZXJ0QXJyYXks
IHBvbGljeS5nZXQoKSwgJnRydXN0UmVmKSAhPSBub0VycikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgUmV0YWluUHRyPFNlY1RydXN0UmVmPiB0cnVzdCA9IGFkb3B0Q0YodHJ1
c3RSZWYpOworICAgICAgICByZXR1cm4gY2VydGlmaWNhdGVzTWF0Y2godHJ1c3QuZ2V0KCksIGNo
YWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCkucHJvdGVjdGlvblNwYWNlLnNl
cnZlclRydXN0KTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBTdHJpbmcgTmV0d29y
a0RhdGFUYXNrOjpzdWdnZXN0ZWRGaWxlbmFtZSgpCiB7CiAgICAgcmV0dXJuIG1fdGFzay5nZXQo
KS5yZXNwb25zZS5zdWdnZXN0ZWRGaWxlbmFtZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274313</attachid>
            <date>2016-03-17 12:27:43 -0700</date>
            <delta_ts>2016-03-17 12:27:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155442-20160317122743.patch</filename>
            <type>text/plain</type>
            <size>6557</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODM0NikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDE2LTAzLTE3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3VwcG9ydCBt
YW51YWxseSBhY2NlcHRpbmcgaW52YWxpZCBTU0wgY2VydGlmaWNhdGVzIHdpdGggTmV0d29ya1Nl
c3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NTQ0MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjQ4NDczOTg+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgV2hlbiB3ZSBjbGljayBjb250aW51ZSBhZnRl
ciBnZXR0aW5nIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIFNTTCBjZXJ0aWZpY2F0ZSwgd2Ug
Y2FsbAorICAgICAgICBOU1VSTFJlcXVlc3Qgc2V0QWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRpZmlj
YXRlIGluIE5ldHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhv
c3QsCisgICAgICAgIHdoaWNoIHN0b3JlcyBpbmZvcm1hdGlvbiBpbiBDRk5ldHdvcmsgYWJvdXQg
dGhlIHNwZWNpZmljIGludmFsaWQgU1NMIGNlcnRpZmljYXRlIHdlIHdhbnQgdG8gYWNjZXB0Lgor
ICAgICAgICBJZiB3ZSBzZWUgc3VjaCBhIGNlcnRpZmljYXRlIGR1cmluZyBhIHNlcnZlciB0cnVz
dCBldmFsdWF0aW9uLCB3ZSB3YW50IHRvIHRlbGwgQ0ZOZXR3b3JrIHRvIGFjY2VwdCBpdC4KKyAg
ICAgICAgVGhpcyBmaXhlcyBhIGxvb3Agd2hlbiBnb2luZyB0byBodHRwczovL2JhZHNzbC5jb20s
IGNsaWNraW5nIG9uIGV4cGlyZWQsIGFuZCBjbGlja2luZyBjb250aW51ZS4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5oOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtMb2FkLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OmRpZFJl
Y2VpdmVDaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6Y29udGludWVD
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjp0cmFuc2ZlclNhbmRib3hFeHRlbnNpb25Ub0Rvd25sb2FkKToKKyAg
ICAgICAgKFdlYktpdDo6Y2VydGlmaWNhdGVzTWF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrRGF0YVRhc2s6OmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnN1Z2dlc3RlZEZpbGVuYW1lKToKKwogMjAx
Ni0wMy0xNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFtNYWNdW2NtYWtlXSBVbnJldmlld2VkIGJ1aWxkZml4IGFmdGVyIHIxOTgwNzAuIEp1c3QgZm9y
IGZ1bi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFz
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtE
YXRhVGFzay5oCShyZXZpc2lvbiAxOTgyMDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrRGF0YVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNyw3IEBA
IHB1YmxpYzoKICAgICBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUoKTsKICAgICB2b2lkIHdpbGxQ
ZXJmb3JtSFRUUFJlZGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgUmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcik7CiAg
ICAgdm9pZCB0cmFuc2ZlclNhbmRib3hFeHRlbnNpb25Ub0Rvd25sb2FkKERvd25sb2FkJik7Cisg
ICAgYm9vbCBhbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNv
cmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAgICAgCiBwcml2YXRlOgogICAgIE5ldHdv
cmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYsIE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBX
ZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9u
SFRUUFNUb0hUVFBSZWRpcmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrTG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0xvYWQuY3BwCShyZXZpc2lvbiAxOTgyMDkpCisrKyBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3
ICsyMDYsMTAgQEAgdm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2ZUNoYWxsZW5nZShjbwogICAg
IC8vIEhhbmRsZSBzZXJ2ZXIgdHJ1c3QgZXZhbHVhdGlvbiBhdCBwbGF0Zm9ybS1sZXZlbCBpZiBy
ZXF1ZXN0ZWQsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgogICAgIGlmIChjaGFsbGVuZ2UucHJv
dGVjdGlvblNwYWNlKCkuYXV0aGVudGljYXRpb25TY2hlbWUoKSA9PSBQcm90ZWN0aW9uU3BhY2VB
dXRoZW50aWNhdGlvblNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZAogICAgICAg
ICAmJiAhTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmNhbkhhbmRsZUhUVFBTU2VydmVyVHJ1
c3RFdmFsdWF0aW9uKCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6UmVqZWN0UHJvdGVjdGlvblNwYWNlLCBDcmVkZW50aWFs
KCkpOworICAgICAgICBpZiAobV90YXNrICYmIG1fdGFzay0+YWxsb3dzU3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdChjaGFsbGVuZ2UpKQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6VXNlQ3JlZGVudGlhbCwgc2Vy
dmVyVHJ1c3RDcmVkZW50aWFsKGNoYWxsZW5nZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpS
ZWplY3RQcm90ZWN0aW9uU3BhY2UsIHsgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTM0NCw3ICszNDcsMTAgQEAgdm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVDYW5BdXRoZW50aWNh
dAogICAgIEFTU0VSVChtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBhdXRvIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKTsK
ICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpSZWplY3RQcm90ZWN0aW9uU3BhY2UsIENyZWRlbnRp
YWwoKSk7CisgICAgICAgIGlmIChtX3Rhc2sgJiYgbV90YXNrLT5hbGxvd3NTcGVjaWZpY0hUVFBT
Q2VydGlmaWNhdGVGb3JIb3N0KG1fY2hhbGxlbmdlKSkKKyAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWws
IHNlcnZlclRydXN0Q3JlZGVudGlhbChtX2NoYWxsZW5nZSkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0
aW9uOjpSZWplY3RQcm90ZWN0aW9uU3BhY2UsIHsgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCkBAIC0zNTQsNyArMzYwLDcgQEAgdm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVDYW5B
dXRoZW50aWNhdAogICAgIH0KICAgICAKICAgICBpZiAobV9wYXJhbWV0ZXJzLmNsaWVudENyZWRl
bnRpYWxQb2xpY3kgPT0gRG9Ob3RBc2tDbGllbnRGb3JBbnlDcmVkZW50aWFscykgewotICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpV
c2VDcmVkZW50aWFsLCBDcmVkZW50aWFsKCkpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFsLCB7IH0pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0J
KHJldmlzaW9uIDE5ODIwOSkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29h
L05ldHdvcmtEYXRhVGFza0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsNiArMzI3LDQy
IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjp0cmFuc2ZlclNhbmRib3hFeHQKICAgICBkb3dubG9h
ZC5zZXRTYW5kYm94RXh0ZW5zaW9uKFdURk1vdmUobV9zYW5kYm94RXh0ZW5zaW9uKSk7CiB9CiAK
K3N0YXRpYyBib29sIGNlcnRpZmljYXRlc01hdGNoKFNlY1RydXN0UmVmIHRydXN0MSwgU2VjVHJ1
c3RSZWYgdHJ1c3QyKQoreworICAgIGlmICghdHJ1c3QxIHx8ICF0cnVzdDIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIENGSW5kZXggY291bnQxID0gU2VjVHJ1c3RHZXRDZXJ0aWZpY2F0
ZUNvdW50KHRydXN0MSk7CisgICAgQ0ZJbmRleCBjb3VudDIgPSBTZWNUcnVzdEdldENlcnRpZmlj
YXRlQ291bnQodHJ1c3QyKTsKKyAgICBpZiAoY291bnQxICE9IGNvdW50MikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgY291bnQxOyBpKyspIHsK
KyAgICAgICAgaWYgKCFDRkVxdWFsKFNlY1RydXN0R2V0Q2VydGlmaWNhdGVBdEluZGV4KHRydXN0
MSwgaSksIFNlY1RydXN0R2V0Q2VydGlmaWNhdGVBdEluZGV4KHRydXN0MiwgaSkpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IE5ldHdvcmtEYXRhVGFzazo6YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChj
b25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQoreworICAg
IGNvbnN0IFN0cmluZyYgaG9zdCA9IGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5ob3N0KCk7
CisgICAgTlNBcnJheSAqY2VydGlmaWNhdGVzID0gW05TVVJMUmVxdWVzdCBhbGxvd3NTcGVjaWZp
Y0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0Omhvc3RdOworICAgIGlmICghY2VydGlmaWNhdGVzKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYm9vbCByZXF1aXJlU2VydmVyQ2VydGlm
aWNhdGVzID0gY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLmF1dGhlbnRpY2F0aW9uU2NoZW1l
KCkgPT0gV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWU6OlByb3Rl
Y3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVz
dGVkOworICAgIFJldGFpblB0cjxTZWNQb2xpY3lSZWY+IHBvbGljeSA9IGFkb3B0Q0YoU2VjUG9s
aWN5Q3JlYXRlU1NMKHJlcXVpcmVTZXJ2ZXJDZXJ0aWZpY2F0ZXMsIGhvc3QuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKSkpOworICAgIAorICAgIFNlY1RydXN0UmVmIHRydXN0UmVmID0gbnVsbHB0cjsK
KyAgICBpZiAoU2VjVHJ1c3RDcmVhdGVXaXRoQ2VydGlmaWNhdGVzKChDRkFycmF5UmVmKWNlcnRp
ZmljYXRlcywgcG9saWN5LmdldCgpLCAmdHJ1c3RSZWYpICE9IG5vRXJyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgUmV0YWluUHRyPFNlY1RydXN0UmVmPiB0cnVzdCA9IGFkb3B0Q0YodHJ1
c3RSZWYpOworCisgICAgcmV0dXJuIGNlcnRpZmljYXRlc01hdGNoKHRydXN0LmdldCgpLCBjaGFs
bGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpLnByb3RlY3Rpb25TcGFjZS5zZXJ2
ZXJUcnVzdCk7Cit9CisKIFN0cmluZyBOZXR3b3JrRGF0YVRhc2s6OnN1Z2dlc3RlZEZpbGVuYW1l
KCkKIHsKICAgICByZXR1cm4gbV90YXNrLmdldCgpLnJlc3BvbnNlLnN1Z2dlc3RlZEZpbGVuYW1l
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>