<?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>46450</bug_id>
          
          <creation_ts>2010-09-23 23:27:28 -0700</creation_ts>
          <short_desc>Add Windows implementation of PlatformCertificateInfo</short_desc>
          <delta_ts>2010-09-24 09:12:56 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</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="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aroben</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>284248</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-23 23:27:28 -0700</bug_when>
    <thetext>Windows needs an implementation of PlatformCertificateInfo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284251</commentid>
    <comment_count>1</comment_count>
      <attachid>68653</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-23 23:29:02 -0700</bug_when>
    <thetext>Created attachment 68653
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284254</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-23 23:32:23 -0700</bug_when>
    <thetext>Attachment 68653 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/Shared/win/PlatformCertificateInfo.h:30:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebKit2/Shared/win/PlatformCertificateInfo.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/UIProcess/API/C/win/WKCertificateInfoWin.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 3 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284377</commentid>
    <comment_count>3</comment_count>
      <attachid>68653</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-09-24 07:46:02 -0700</bug_when>
    <thetext>Comment on attachment 68653
Patch

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

&gt; WebKit2/Shared/win/PlatformCertificateInfo.cpp:54
&gt; +    RetainPtr&lt;CFDictionaryRef&gt; certificateInfo = wkGetSSLCertificateInfo(cfResponse);
&gt; +    if (!certificateInfo)
&gt; +        return;

Why the RetainPtr? There&apos;s no need to retain/release the dictionary in this function.

&gt; WebKit2/Shared/win/PlatformCertificateInfo.cpp:60
&gt; +    m_certificateContext = CertDuplicateCertificateContext((PCCERT_CONTEXT)data);

static_cast would be nicer.

Seems like this file needs a sprinkling of :: on the CryptoAPI calls.

&gt; WebKit2/Shared/win/PlatformCertificateInfo.cpp:118
&gt; +    nameSize = CertGetNameString(certificate, dwType, 0, pvTypePara, 0, 0);
&gt; +    if (!nameSize)
&gt; +        return 0;
&gt; +    OwnArrayPtr&lt;WCHAR&gt; name(new WCHAR[nameSize - 1]);
&gt; +    CertGetNameString(certificate, dwType, 0, pvTypePara, name.get(), nameSize);

I think you&apos;re causing a buffer overrun here. You&apos;re telling CertGetNameString that the buffer is nameSize characters long, but it&apos;s only nameSize - 1 characters long!

You should also use ::CertGetNameStringW.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284416</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-24 09:02:04 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 68653 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=68653&amp;action=review
&gt; 
&gt; &gt; WebKit2/Shared/win/PlatformCertificateInfo.cpp:54
&gt; &gt; +    RetainPtr&lt;CFDictionaryRef&gt; certificateInfo = wkGetSSLCertificateInfo(cfResponse);
&gt; &gt; +    if (!certificateInfo)
&gt; &gt; +        return;
&gt; 
&gt; Why the RetainPtr? There&apos;s no need to retain/release the dictionary in this function.

Quite true. Removed.

&gt; 
&gt; &gt; WebKit2/Shared/win/PlatformCertificateInfo.cpp:60
&gt; &gt; +    m_certificateContext = CertDuplicateCertificateContext((PCCERT_CONTEXT)data);
&gt; 
&gt; static_cast would be nicer.
&gt; 
&gt; Seems like this file needs a sprinkling of :: on the CryptoAPI calls.
&gt; 

Fixed both.

&gt; &gt; WebKit2/Shared/win/PlatformCertificateInfo.cpp:118
&gt; &gt; +    nameSize = CertGetNameString(certificate, dwType, 0, pvTypePara, 0, 0);
&gt; &gt; +    if (!nameSize)
&gt; &gt; +        return 0;
&gt; &gt; +    OwnArrayPtr&lt;WCHAR&gt; name(new WCHAR[nameSize - 1]);
&gt; &gt; +    CertGetNameString(certificate, dwType, 0, pvTypePara, name.get(), nameSize);
&gt; 
&gt; I think you&apos;re causing a buffer overrun here. You&apos;re telling CertGetNameString that the buffer is nameSize characters long, but it&apos;s only nameSize - 1 characters long!
&gt; 
&gt; You should also use ::CertGetNameStringW.

Ok. This was debugging code I stole from somewhere else, but I will fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284426</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-24 09:12:56 -0700</bug_when>
    <thetext>Landed in r68260 without the function.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68653</attachid>
            <date>2010-09-23 23:29:02 -0700</date>
            <delta_ts>2010-09-24 07:46:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>cert.diff</filename>
            <type>text/plain</type>
            <size>13304</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODIzNykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDktMjMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgV2lu
ZG93cyBpbXBsZW1lbnRhdGlvbiBvZiBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbworICAgICAgICBQ
YXJ0IG9mIDwgcmRhcjovL3Byb2JsZW0vODM1MDE4OT4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NDUwCisKKyAgICAgICAgKiBTaGFyZWQvd2luL1Bs
YXRmb3JtQ2VydGlmaWNhdGVJbmZvLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlBsYXRm
b3JtQ2VydGlmaWNhdGVJbmZvOjpQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyk6CisgICAgICAgIChX
ZWJLaXQ6OlBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvOjp+UGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8p
OgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbzo6ZW5jb2RlKToKKyAg
ICAgICAgKFdlYktpdDo6UGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm86OmRlY29kZSk6CisgICAgICAg
IChXZWJLaXQ6Om9yZ2FuaXphdGlvbk5hbWVGb3JDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvOjpkdW1wKToKKyAgICAgICAgKiBTaGFyZWQvd2lu
L1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmg6CisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtQ2Vy
dGlmaWNhdGVJbmZvOjpjZXJ0aWZpY2F0ZUNvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy93aW4vV0tDZXJ0aWZpY2F0ZUluZm9XaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdLQ2Vy
dGlmaWNhdGVJbmZvR2V0Q2VydGlmaWNhdGVDb250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0Mvd2luL1dLQ2VydGlmaWNhdGVJbmZvV2luLmg6IEFkZGVkLgorICAgICAgICAqIHdpbi9X
ZWJLaXQyLnZjcHJvajoKKyAgICAgICAgKiB3aW4vV2ViS2l0MkdlbmVyYXRlZC5tYWtlOgorCiAy
MDEwLTA5LTIzICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCBidWlsZGZpeCBhZnRlciByNjgyMjAgb24gV2ViS2l0Mi4KSW5kZXg6IFdl
YktpdDIvU2hhcmVkL3dpbi9QbGF0Zm9ybUNlcnRpZmljYXRlSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9TaGFyZWQvd2luL1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYktpdDIvU2hhcmVkL3dpbi9QbGF0Zm9ybUNlcnRpZmljYXRlSW5mby5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlBs
YXRmb3JtQ2VydGlmaWNhdGVJbmZvLmgiCisKKyNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIK
KyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
UmVzcG9uc2UuaD4KKyNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVt
SW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQbGF0Zm9ybUNlcnRp
ZmljYXRlSW5mbzo6UGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8oKQorICAgIDogbV9jZXJ0aWZpY2F0
ZUNvbnRleHQoMCkKK3sKK30KKworUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm86OlBsYXRmb3JtQ2Vy
dGlmaWNhdGVJbmZvKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorICAgIDogbV9j
ZXJ0aWZpY2F0ZUNvbnRleHQoMCkKK3sKKyAgICBDRlVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2Ug
PSByZXNwb25zZS5jZlVSTFJlc3BvbnNlKCk7CisgICAgaWYgKCFjZlJlc3BvbnNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjZXJ0aWZpY2F0ZUlu
Zm8gPSB3a0dldFNTTENlcnRpZmljYXRlSW5mbyhjZlJlc3BvbnNlKTsKKyAgICBpZiAoIWNlcnRp
ZmljYXRlSW5mbykKKyAgICAgICAgcmV0dXJuOworCisgICAgdm9pZCogZGF0YSA9IHdrR2V0U1NM
UGVlckNlcnRpZmljYXRlRGF0YShjZXJ0aWZpY2F0ZUluZm8uZ2V0KCkpOworICAgIGlmICghZGF0
YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jZXJ0aWZpY2F0ZUNvbnRleHQgPSBDZXJ0RHVw
bGljYXRlQ2VydGlmaWNhdGVDb250ZXh0KChQQ0NFUlRfQ09OVEVYVClkYXRhKTsKK30KKworUGxh
dGZvcm1DZXJ0aWZpY2F0ZUluZm86On5QbGF0Zm9ybUNlcnRpZmljYXRlSW5mbygpCit7CisgICAg
aWYgKG1fY2VydGlmaWNhdGVDb250ZXh0KQorICAgICAgICBDZXJ0RnJlZUNlcnRpZmljYXRlQ29u
dGV4dChtX2NlcnRpZmljYXRlQ29udGV4dCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DZXJ0aWZpY2F0
ZUluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0Cit7
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBlbmNvZGUgdGhlIG5vIGNlcnRpZmljYXRlIGNvbnRl
eHQgY2FzZSBpbiB0aGUKKyAgICAvLyBudW1iZXIgb2YgdGhlIGJ5dGVzLgorICAgIGlmICghbV9j
ZXJ0aWZpY2F0ZUNvbnRleHQpIHsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlQm9vbCh0cnVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVuY29kZXItPmVuY29kZUJvb2woZmFsc2Up
OworICAgIGVuY29kZXItPmVuY29kZUJ5dGVzKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2NlcnRp
ZmljYXRlQ29udGV4dC0+cGJDZXJ0RW5jb2RlZCksIG1fY2VydGlmaWNhdGVDb250ZXh0LT5jYkNl
cnRFbmNvZGVkKTsKK30KKworYm9vbCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbzo6ZGVjb2RlKENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8m
IGMpCit7CisgICAgYm9vbCBub0NlcnRpZmljYXRlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2Rl
KG5vQ2VydGlmaWNhdGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobm9DZXJ0
aWZpY2F0ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gYnl0
ZXM7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVCeXRlcyhieXRlcykpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFBDQ0VSVF9DT05URVhUIGNlcnRpZmljYXRlQ29udGV4dCA9IENlcnRD
cmVhdGVDZXJ0aWZpY2F0ZUNvbnRleHQoUEtDU183X0FTTl9FTkNPRElORyB8IFg1MDlfQVNOX0VO
Q09ESU5HLCBieXRlcy5kYXRhKCksIGJ5dGVzLnNpemUoKSk7CisgICAgaWYgKCFjZXJ0aWZpY2F0
ZUNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGMubV9jZXJ0aWZpY2F0ZUNv
bnRleHQgPSBjZXJ0aWZpY2F0ZUNvbnRleHQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZm5k
ZWYgTkRFQlVHCitzdGF0aWMgUGFzc093bkFycmF5UHRyPFdDSEFSPiBvcmdhbml6YXRpb25OYW1l
Rm9yQ2VydGlmaWNhdGUoUENDRVJUX0NPTlRFWFQgY2VydGlmaWNhdGUpCit7CisgICAgRFdPUkQg
ZHdUeXBlID0gQ0VSVF9OQU1FX0FUVFJfVFlQRTsKKyAgICB2b2lkKiBwdlR5cGVQYXJhID0gc3pP
SURfT1JHQU5JWkFUSU9OX05BTUU7CisgICAgRFdPUkQgbmFtZVNpemUgPSBDZXJ0R2V0TmFtZVN0
cmluZyhjZXJ0aWZpY2F0ZSwgZHdUeXBlLCAwLCBwdlR5cGVQYXJhLCAwLCAwKTsKKyAgICBpZiAo
IW5hbWVTaXplKSB7CisgICAgICAgIC8vIFRyeSBhZ2FpbiBieSBnZXR0aW5nIHRoZSBmcmllbmRs
eSBuYW1lCisgICAgICAgIGR3VHlwZSA9IENFUlRfTkFNRV9GUklFTkRMWV9ESVNQTEFZX1RZUEU7
CisgICAgICAgIHB2VHlwZVBhcmEgPSAwOworICAgIH0KKyAgICBuYW1lU2l6ZSA9IENlcnRHZXRO
YW1lU3RyaW5nKGNlcnRpZmljYXRlLCBkd1R5cGUsIDAsIHB2VHlwZVBhcmEsIDAsIDApOworICAg
IGlmICghbmFtZVNpemUpCisgICAgICAgIHJldHVybiAwOworICAgIE93bkFycmF5UHRyPFdDSEFS
PiBuYW1lKG5ldyBXQ0hBUltuYW1lU2l6ZSAtIDFdKTsKKyAgICBDZXJ0R2V0TmFtZVN0cmluZyhj
ZXJ0aWZpY2F0ZSwgZHdUeXBlLCAwLCBwdlR5cGVQYXJhLCBuYW1lLmdldCgpLCBuYW1lU2l6ZSk7
CisgICAgcmV0dXJuIG5hbWUucmVsZWFzZSgpOworfQorCit2b2lkIFBsYXRmb3JtQ2VydGlmaWNh
dGVJbmZvOjpkdW1wKCkgY29uc3QKK3sKKyAgICBpZiAobV9jZXJ0aWZpY2F0ZUNvbnRleHQpIHsK
KyAgICAgICAgT3duQXJyYXlQdHI8V0NIQVI+IG5hbWUgPSBvcmdhbml6YXRpb25OYW1lRm9yQ2Vy
dGlmaWNhdGUobV9jZXJ0aWZpY2F0ZUNvbnRleHQpOworICAgICAgICBwcmludGYoIkNlcnRpZmlj
YXRlIGNvbnRleHQ6ICVTXG4iLCBuYW1lLmdldCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcHJp
bnRmKCJObyBjZXJ0aWZpY2F0ZSBjb250ZXh0IVxuIik7Cit9CisjZW5kaWYKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1NoYXJlZC93aW4vUGxhdGZvcm1DZXJ0aWZpY2F0
ZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC93aW4vUGxhdGZvcm1DZXJ0aWZp
Y2F0ZUluZm8uaAkocmV2aXNpb24gNjgxNzApCisrKyBXZWJLaXQyL1NoYXJlZC93aW4vUGxhdGZv
cm1DZXJ0aWZpY2F0ZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMzAgKzI2LDM0IEBACiAj
aWZuZGVmIFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvX2gKICNkZWZpbmUgUGxhdGZvcm1DZXJ0aWZp
Y2F0ZUluZm9faAogCi0jaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCi0jaW5jbHVkZSAiQXJn
dW1lbnRFbmNvZGVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+Citu
YW1lc3BhY2UgQ29yZUlQQyB7CisgICAgY2xhc3MgQXJndW1lbnREZWNvZGVyOworICAgIGNsYXNz
IEFyZ3VtZW50RW5jb2RlcjsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFJl
c291cmNlUmVzcG9uc2U7Cit9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBQbGF0Zm9y
bUNlcnRpZmljYXRlSW5mbyB7CiBwdWJsaWM6Ci0gICAgUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8o
KQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyhj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikKLSAgICB7Ci0gICAgfQotCi0gICAgdm9p
ZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29uc3QKLSAgICB7Ci0gICAgfQot
Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIFBsYXRm
b3JtQ2VydGlmaWNhdGVJbmZvJikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
KyAgICBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbygpOworICAgIGV4cGxpY2l0IFBsYXRmb3JtQ2Vy
dGlmaWNhdGVJbmZvKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsgICAgCisgICAg
flBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvKCk7CisKKyAgICBQQ0NFUlRfQ09OVEVYVCBjZXJ0aWZp
Y2F0ZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NlcnRpZmljYXRlQ29udGV4dDsgfQorCisg
ICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdDsK
KyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVy
LCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyYgdCk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9p
ZCBkdW1wKCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBQQ0NFUlRfQ09OVEVYVCBt
X2NlcnRpZmljYXRlQ29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLQ2VydGlmaWNhdGVJbmZvV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tDZXJ0aWZpY2F0ZUluZm9X
aW4uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLQ2Vy
dGlmaWNhdGVJbmZvV2luLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJXS0NlcnRpZmljYXRlSW5mb1dpbi5oIgorCisjaW5jbHVkZSAiV0tB
UElDYXN0LmgiCisjaW5jbHVkZSAiV2ViQ2VydGlmaWNhdGVJbmZvLmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7CisKK1BDQ0VSVF9DT05URVhUIFdLQ2VydGlmaWNhdGVJbmZvR2V0Q2VydGlm
aWNhdGVDb250ZXh0KFdLQ2VydGlmaWNhdGVJbmZvUmVmIGNlcnRpZmljYXRlSW5mb1JlZikKK3sK
KyAgICByZXR1cm4gdG9XSyhjZXJ0aWZpY2F0ZUluZm9SZWYpLT5wbGF0Zm9ybUNlcnRpZmljYXRl
SW5mbygpLmNlcnRpZmljYXRlQ29udGV4dCgpOworfQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0Mvd2luL1dLQ2VydGlmaWNhdGVJbmZvV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0Mvd2luL1dLQ2VydGlmaWNhdGVJbmZvV2luLmgJKHJldmlzaW9uIDApCisr
KyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tDZXJ0aWZpY2F0ZUluZm9XaW4uaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV0tDZXJ0aWZp
Y2F0ZUluZm9XaW5faAorI2RlZmluZSBXS0NlcnRpZmljYXRlSW5mb1dpbl9oCisKKyNpbmNsdWRl
IDxXZWJLaXQyL1dLQmFzZS5oPgorI2luY2x1ZGUgPFdpbmNyeXB0Lmg+CisKKyNpZmRlZiBfX2Nw
bHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworV0tfRVhQT1JUIFBDQ0VSVF9DT05URVhU
IFdLQ2VydGlmaWNhdGVJbmZvR2V0Q2VydGlmaWNhdGVDb250ZXh0KFdLQ2VydGlmaWNhdGVJbmZv
UmVmIGNlcnRpZmljYXRlSW5mbyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisK
KyNlbmRpZiAvKiBXS0NlcnRpZmljYXRlSW5mb1dpbl9oICovCkluZGV4OiBXZWJLaXQyL3dpbi9X
ZWJLaXQyLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagko
cmV2aXNpb24gNjgxNzApCisrKyBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkod29ya2luZyBj
b3B5KQpAQCAtNTU2LDYgKzU1NiwxMCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZp
bGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cU2hhcmVkXHdpblxQbGF0Zm9ybUNlcnRpZmljYXRl
SW5mby5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0
aXZlUGF0aD0iLi5cU2hhcmVkXHdpblxQbGF0Zm9ybUNlcnRpZmljYXRlSW5mby5oIg0KIAkJCQkJ
Pg0KIAkJCQk8L0ZpbGU+DQpAQCAtMTM1MSw2ICsxMzU1LDE0IEBACiAJCQkJCQk+DQogCQkJCQk8
L0ZpbGU+DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXEFQ
SVxDXHdpblxXS0NlcnRpZmljYXRlSW5mb1dpbi5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxl
Pg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xBUElcQ1x3
aW5cV0tDZXJ0aWZpY2F0ZUluZm9XaW4uaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJ
CQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXEFQSVxDXFdLQ29udGV4
dC5jcHAiDQogCQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KSW5kZXg6IFdlYktpdDIvd2luL1dlYktp
dDJHZW5lcmF0ZWQubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL3dpbi9XZWJLaXQyR2VuZXJh
dGVkLm1ha2UJKHJldmlzaW9uIDY4MTcwKQorKysgV2ViS2l0Mi93aW4vV2ViS2l0MkdlbmVyYXRl
ZC5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBAIGFsbDoKICAgICB4Y29weSAv
eSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXGNmXFdLVVJMQ0YuaCIgIiQoV0VCS0lUT1VUUFVURElS
KVxpbmNsdWRlXFdlYktpdDIiCiAgICAgeGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vzc1xBUElcQ1xj
ZlxXS1VSTFJlcXVlc3RDRi5oIiAiJChXRUJLSVRPVVRQVVRESVIpXGluY2x1ZGVcV2ViS2l0MiIK
ICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXGNmXFdLVVJMUmVzcG9uc2VDRi5o
IiAiJChXRUJLSVRPVVRQVVRESVIpXGluY2x1ZGVcV2ViS2l0MiIKKyAgICB4Y29weSAveSAvZCAi
Li5cVUlQcm9jZXNzXEFQSVxDXHdpblxXS0NlcnRpZmljYXRlSW5mb1dpbi5oIiAiJChXRUJLSVRP
VVRQVVRESVIpXGluY2x1ZGVcV2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNz
XEFQSVxDXHdpblxXS0NvbnRleHRQcml2YXRlV2luLmgiICIkKFdFQktJVE9VVFBVVERJUilcaW5j
bHVkZVxXZWJLaXQyIgogICAgIHhjb3B5IC95IC9kICIuLlxVSVByb2Nlc3NcQVBJXGNwcFxXS1Jl
dGFpblB0ci5oIiAiJChXRUJLSVRPVVRQVVRESVIpXGluY2x1ZGVcV2ViS2l0MiIKICAgICB4Y29w
eSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVx3aW5cV0tCYXNlV2luLmgiICIkKFdFQktJVE9VVFBV
VERJUilcaW5jbHVkZVxXZWJLaXQyIgo=
</data>
<flag name="review"
          id="58210"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>