<?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>196081</bug_id>
          
          <creation_ts>2019-03-21 09:31:20 -0700</creation_ts>
          <short_desc>Web Automation: support uploading non-local file paths</short_desc>
          <delta_ts>2019-03-21 15:54:33 -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>WebDriver</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Blaze Burg">bburg</reporter>
          <assigned_to name="Blaze Burg">bburg</assigned_to>
          <cc>bburg</cc>
    
    <cc>cgarcia</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1519680</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-03-21 09:31:20 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519681</commentid>
    <comment_count>1</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-03-21 09:31:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/45819897&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519707</commentid>
    <comment_count>2</comment_count>
      <attachid>365563</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-03-21 10:26:07 -0700</bug_when>
    <thetext>Created attachment 365563
Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519761</commentid>
    <comment_count>3</comment_count>
      <attachid>365563</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-03-21 11:17:02 -0700</bug_when>
    <thetext>Comment on attachment 365563
Proposed Fix

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

r=me, although you may want to get another look of someone more familiar with ObjC :)

&gt; Source/WebKit/UIProcess/Automation/Automation.json:623
&gt; +                { &quot;name&quot;: &quot;filenames&quot;, &quot;type&quot;: &quot;array&quot;, &quot;items&quot;: { &quot;$ref&quot;: &quot;string&quot; }, &quot;description&quot;: &quot;Absolute paths to the files that should be selected.&quot; },
&gt; +                { &quot;name&quot;: &quot;fileContents&quot;, &quot;type&quot;: &quot;array&quot;, &quot;items&quot;: { &quot;$ref&quot; : &quot;string&quot; }, &quot;optional&quot;: true, &quot;description&quot;: &quot;An array of Base64-encoded binary data for each file to be selected. If this property is provided, it is assumed that &apos;filenames&apos; are not real file paths on the session host&apos;s filesystem, and this binary data will be used instead.&quot; }

Shouldn&apos;t these be `&quot;type&quot;: &quot;string&quot;`?

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1252
&gt; +            SYNC_FAIL_WITH_PREDEFINED_ERROR_AND_DETAILS(InternalError, &quot;The parameter &apos;filenames&apos; contains a non-string value.&quot;);

Should we add more detail, like &quot;The parameter &apos;filenames&apos; contains a non-string value at index ${i}.&quot;?

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1261
&gt; +            SYNC_FAIL_WITH_PREDEFINED_ERROR_AND_DETAILS(InternalError, &quot;The parameter &apos;fileContents&apos; contains a non-string value.&quot;);

Ditto (&gt;1252).

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1263
&gt; +        Optional&lt;String&gt; localFilePath = platformGenerateLocalFilePathForRemoteFile(filename, fileData);

`auto`?

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1264
&gt; +        if (!localFilePath.hasValue())

You can drop the `hasValue`.  It&apos;s the same as `operator bool`.

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1265
&gt; +            SYNC_FAIL_WITH_PREDEFINED_ERROR_AND_DETAILS(InternalError, &quot;The remote file could not be saved to a local temporary directory.&quot;);

Ditto (&gt;1252).

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:2068
&gt; +Optional&lt;String&gt; WebAutomationSession::platformGenerateLocalFilePathForRemoteFile(const String&amp; remoteFilePath, const String&amp; base64EncodedFileContents)

Don&apos;t include the parameter names if they aren&apos;t used (or surround them in an inline comment) (or use an `UNUSED_PARAM`).

&gt; Source/WebKit/UIProcess/Automation/cocoa/WebAutomationSessionCocoa.mm:64
&gt; +    NSString *temporaryDirectory = FileSystem::createTemporaryDirectory(@&quot;WebDriver&quot;);
&gt; +    NSURL *remoteFile = [NSURL fileURLWithPath:remoteFilePath isDirectory:NO];
&gt; +    NSString *localFilePath = [temporaryDirectory stringByAppendingPathComponent:remoteFile.lastPathComponent];

I&apos;d move these below the `if (!fileContents)` check, as they aren&apos;t needed before that.

&gt; Source/WebKit/UIProcess/Automation/cocoa/WebAutomationSessionCocoa.mm:65
&gt; +    NSData *fileContents = [[NSData alloc] initWithBase64EncodedString:base64EncodedFileContents options:0];

Should we `adoptNS` or retain/release this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519764</commentid>
    <comment_count>4</comment_count>
      <attachid>365563</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-03-21 11:20:19 -0700</bug_when>
    <thetext>Comment on attachment 365563
Proposed Fix

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

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.h:266
&gt; +    // Save base64-encoded file contents to a local file path, and return the path.

It may be worth mentioning that this uses the `lastPathComponent` of the `remoteFilePath` as the filename, just so it&apos;s a bit clearer why &quot;/a/b/c.txt&quot; might get moved to only be &quot;WebDriver/c.txt&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519783</commentid>
    <comment_count>5</comment_count>
      <attachid>365563</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-03-21 11:43:57 -0700</bug_when>
    <thetext>Comment on attachment 365563
Proposed Fix

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

r=me as well

&gt;&gt; Source/WebKit/UIProcess/Automation/cocoa/WebAutomationSessionCocoa.mm:65
&gt;&gt; +    NSData *fileContents = [[NSData alloc] initWithBase64EncodedString:base64EncodedFileContents options:0];
&gt; 
&gt; Should we `adoptNS` or retain/release this?

Good catch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519784</commentid>
    <comment_count>6</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-03-21 11:44:53 -0700</bug_when>
    <thetext>(In reply to Devin Rousso from comment #4)
&gt; Comment on attachment 365563 [details]
&gt; Proposed Fix
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=365563&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.h:266
&gt; &gt; +    // Save base64-encoded file contents to a local file path, and return the path.
&gt; 
&gt; It may be worth mentioning that this uses the `lastPathComponent` of the
&gt; `remoteFilePath` as the filename, just so it&apos;s a bit clearer why
&gt; &quot;/a/b/c.txt&quot; might get moved to only be &quot;WebDriver/c.txt&quot;.

It&apos;ll be WebDriver-XXXXXXXX where the Xs are randomized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519993</commentid>
    <comment_count>7</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-03-21 15:54:33 -0700</bug_when>
    <thetext>Committed r243340: &lt;https://trac.webkit.org/changeset/243340&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365563</attachid>
            <date>2019-03-21 10:26:07 -0700</date>
            <delta_ts>2019-03-21 11:17:02 -0700</delta_ts>
            <desc>Proposed Fix</desc>
            <filename>bug-196081-20190321102607.patch</filename>
            <type>text/plain</type>
            <size>10132</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzMjk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk4ODkzMmU3ODIzMzdiNGRl
MWYwZTA0MGU5NTZlMTViNmYwMDA4N2EuLmJiMmIzN2Y4NDdkNzQxZjFiMTU3YjE3YjY1ZjZlZmM3
YTFlNDI5MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTktMDMtMjEgIEJyaWFuIEJ1
cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEF1dG9tYXRpb246IHN1cHBvcnQg
dXBsb2FkaW5nIG5vbi1sb2NhbCBmaWxlIHBhdGhzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTYwODEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ1
ODE5ODk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRvIHN1cHBvcnQgY2FzZXMgd2hlcmUgc3VwcGxpZWQgZmlsZSBwYXRocyBkbyBub3QgZXhpc3Qg
b24gdGhlIHNlc3Npb24gaG9zdCwgYWRkIHN1cHBvcnQgZm9yCisgICAgICAgIHJlY2VpdmluZyBm
aWxlIGNvbnRlbnRzIHZpYSBBdXRvbWF0aW9uLnNldEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBsb2Fk
LgorCisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uOiBBZGQg
bmV3IHBhcmFtZXRlci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
c2V0RmlsZXNUb1NlbGVjdEZvckZpbGVVcGxvYWQpOgorICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
cmVjZWl2aW5nIGFuZCBzYXZpbmcgZmlsZSBjb250ZW50cyB0byBhIHRlbXBvcmFyeSBkaXJlY3Rv
cnkuIFJld3JpdGUgdGhlIHVzZWQgcGF0aHMgc28KKyAgICAgICAgdGhhdCBXZWJDb3JlIGtub3dz
IHRvIGxvb2sgYXQgdGhlIHJldmlzZWQgcGF0aHMgd2hlcmUgdGhlIGZpbGUgY29udGVudHMgaGF2
ZSBiZWVuIHNhdmVkLgorCisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpw
bGF0Zm9ybUdlbmVyYXRlTG9jYWxGaWxlUGF0aEZvclJlbW90ZUZpbGUpOgorICAgICAgICBTaW5j
ZSBXZWJLaXQgZG9lcyBub3QgaGF2ZSB1c2FibGUgRmlsZVN5c3RlbSBpbXBsZW1lbnRhdGlvbnMg
Zm9yIGFsbCBwb3J0cywgc2hlbGwgb3V0IHRoZSBhY3R1YWwKKyAgICAgICAgc2F2aW5nIG9mIGJh
c2U2NC1lbmNvZGVkIGZpbGUgZGF0YS4gUHJvdmlkZSBhIENvY29hIGltcGxlbWVudGF0aW9uLCBz
aW5jZSB0aGF0J3Mgd2hhdCBJIGNhbiB0ZXN0LgorCisgICAgICAgICogVUlQcm9jZXNzL0F1dG9t
YXRpb24vY29jb2EvV2ViQXV0b21hdGlvblNlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViQXV0b21hdGlvblNlc3Npb246OnBsYXRmb3JtR2VuZXJhdGVMb2NhbEZpbGVQYXRoRm9y
UmVtb3RlRmlsZSk6CisgICAgICAgIFVzZSBXVEY6OkZpbGVTeXN0ZW0gdG8gY3JlYXRlIGEgdGVt
cG9yYXJ5IGRpcmVjdG9yeSwgYW5kIHVzZSBDb2NvYSBtZXRob2RzIHRvIGFjdHVhbGx5IHdyaXRl
IHRoZSBmaWxlLgorCiAyMDE5LTAzLTIxICBTaGF3biBSb2JlcnRzICA8c3JvYmVydHNAYXBwbGUu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyNDMyNTAuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbiBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCmluZGV4
IGQ0NzU3NDQ2NjQ2MmI3NDE1YzAyMzUwMDk1MzM0OWVhYjRkYmQ4ZTQuLjU1NjYwMjBiNzc0NWNi
Mjk5ODExODMzYTQ2YjVlOTZmNzAxMDNiZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCkBAIC02MTksNyArNjE5LDggQEAKICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTZXRzIHRoZSBmaWxlcyB0byBiZSBzZWxlY3RlZCB3
aGVuIGEgZmlsZSBpbnB1dCB0eXBlIGVsZW1lbnQgYmVjb21lcyBhY3RpdmUgaW4gYSBicm93c2lu
ZyBjb250ZXh0LiIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImJyb3dzaW5nQ29udGV4dEhhbmRsZSIsICIkcmVmIjogIkJyb3dzaW5nQ29u
dGV4dEhhbmRsZSIsICJkZXNjcmlwdGlvbiI6ICJUaGUgaGFuZGxlIGZvciB0aGUgYnJvd3Npbmcg
Y29udGV4dC4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmaWxlbmFtZXMiLCAidHlw
ZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAic3RyaW5nIiB9LCAiZGVzY3JpcHRpb24i
OiAiQWJzb2x1dGUgcGF0aHMgdG8gdGhlIGZpbGVzIHRoYXQgc2hvdWxkIGJlIHNlbGVjdGVkLiIg
fQorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZmlsZW5hbWVzIiwgInR5cGUiOiAiYXJyYXki
LCAiaXRlbXMiOiB7ICIkcmVmIjogInN0cmluZyIgfSwgImRlc2NyaXB0aW9uIjogIkFic29sdXRl
IHBhdGhzIHRvIHRoZSBmaWxlcyB0aGF0IHNob3VsZCBiZSBzZWxlY3RlZC4iIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJmaWxlQ29udGVudHMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVt
cyI6IHsgIiRyZWYiIDogInN0cmluZyIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9u
IjogIkFuIGFycmF5IG9mIEJhc2U2NC1lbmNvZGVkIGJpbmFyeSBkYXRhIGZvciBlYWNoIGZpbGUg
dG8gYmUgc2VsZWN0ZWQuIElmIHRoaXMgcHJvcGVydHkgaXMgcHJvdmlkZWQsIGl0IGlzIGFzc3Vt
ZWQgdGhhdCAnZmlsZW5hbWVzJyBhcmUgbm90IHJlYWwgZmlsZSBwYXRocyBvbiB0aGUgc2Vzc2lv
biBob3N0J3MgZmlsZXN5c3RlbSwgYW5kIHRoaXMgYmluYXJ5IGRhdGEgd2lsbCBiZSB1c2VkIGlu
c3RlYWQuIiB9CiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Np
b24uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9u
U2Vzc2lvbi5jcHAKaW5kZXggNWUwY2ExMDRiZjgyNzQ5YTFmNWM5MzI2ZTM2OTk1YmJjYzUwYTdh
ZS4uMDU2NzE5M2VmMDRlZDQzZWVjNGVhMDI1NGE3NmIyZWNlYjZkODFkMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9u
U2Vzc2lvbi5jcHAKQEAgLTEyMzgsMTcgKzEyMzgsMzMgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6c2V0VXNlcklucHV0Rm9yQ3VycmVudEphdmFTY3JpcHRQcm9tcHQoSW5zcGVjdG9yOjpF
cnIKICAgICBtX2NsaWVudC0+c2V0VXNlcklucHV0Rm9yQ3VycmVudEphdmFTY3JpcHRQcm9tcHRP
blBhZ2UoKnRoaXMsICpwYWdlLCBwcm9tcHRWYWx1ZSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OnNldEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBsb2FkKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEpTT046
OkFycmF5JiBmaWxlbmFtZXMpCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc1Rv
U2VsZWN0Rm9yRmlsZVVwbG9hZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgZmlsZW5hbWVzLCBj
b25zdCBKU09OOjpBcnJheSogZmlsZUNvbnRlbnRzKQogewogICAgIFZlY3RvcjxTdHJpbmc+IG5l
d0ZpbGVMaXN0OwogICAgIG5ld0ZpbGVMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5h
bWVzLmxlbmd0aCgpKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGZpbGVuYW1lcykg
eworICAgIGlmIChmaWxlQ29udGVudHMgJiYgZmlsZUNvbnRlbnRzLT5sZW5ndGgoKSAhPSBmaWxl
bmFtZXMubGVuZ3RoKCkpCisgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1Jf
QU5EX0RFVEFJTFMoSW50ZXJuYWxFcnJvciwgIlRoZSBwYXJhbWV0ZXJzICdmaWxlbmFtZXMnIGFu
ZCAnZmlsZUNvbnRlbnRzJyBtdXN0IGhhdmUgZXF1YWwgbGVuZ3RoLiIpOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMubGVuZ3RoKCk7ICsraSkgewogICAgICAgICBTdHJp
bmcgZmlsZW5hbWU7Ci0gICAgICAgIGlmICghaXRlbS0+YXNTdHJpbmcoZmlsZW5hbWUpKQotICAg
ICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihJbnRlcm5hbEVycm9yKTsK
KyAgICAgICAgaWYgKCFmaWxlbmFtZXMuZ2V0KGkpLT5hc1N0cmluZyhmaWxlbmFtZSkpCisgICAg
ICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludGVy
bmFsRXJyb3IsICJUaGUgcGFyYW1ldGVyICdmaWxlbmFtZXMnIGNvbnRhaW5zIGEgbm9uLXN0cmlu
ZyB2YWx1ZS4iKTsKKworICAgICAgICBpZiAoIWZpbGVDb250ZW50cykgeworICAgICAgICAgICAg
bmV3RmlsZUxpc3QuYXBwZW5kKGZpbGVuYW1lKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgU3RyaW5nIGZpbGVEYXRhOworICAgICAgICBpZiAoIWZpbGVDb250
ZW50cy0+Z2V0KGkpLT5hc1N0cmluZyhmaWxlRGF0YSkpCisgICAgICAgICAgICBTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludGVybmFsRXJyb3IsICJUaGUgcGFy
YW1ldGVyICdmaWxlQ29udGVudHMnIGNvbnRhaW5zIGEgbm9uLXN0cmluZyB2YWx1ZS4iKTsKKwor
ICAgICAgICBPcHRpb25hbDxTdHJpbmc+IGxvY2FsRmlsZVBhdGggPSBwbGF0Zm9ybUdlbmVyYXRl
TG9jYWxGaWxlUGF0aEZvclJlbW90ZUZpbGUoZmlsZW5hbWUsIGZpbGVEYXRhKTsKKyAgICAgICAg
aWYgKCFsb2NhbEZpbGVQYXRoLmhhc1ZhbHVlKCkpCisgICAgICAgICAgICBTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludGVybmFsRXJyb3IsICJUaGUgcmVtb3Rl
IGZpbGUgY291bGQgbm90IGJlIHNhdmVkIHRvIGEgbG9jYWwgdGVtcG9yYXJ5IGRpcmVjdG9yeS4i
KTsKIAotICAgICAgICBuZXdGaWxlTGlzdC5hcHBlbmQoZmlsZW5hbWUpOworICAgICAgICBuZXdG
aWxlTGlzdC5hcHBlbmQobG9jYWxGaWxlUGF0aC52YWx1ZSgpKTsKICAgICB9CiAKICAgICBtX2Zp
bGVzVG9TZWxlY3RGb3JGaWxlVXBsb2FkLnN3YXAobmV3RmlsZUxpc3QpOwpAQCAtMjA0OCw0ICsy
MDY0LDExIEBAIE9wdGlvbmFsPFN0cmluZz4gV2ViQXV0b21hdGlvblNlc3Npb246OnBsYXRmb3Jt
R2V0QmFzZTY0RW5jb2RlZFBOR0RhdGEoY29uc3QgU2hhCiB9CiAjZW5kaWYgLy8gIVBMQVRGT1JN
KENPQ09BKSAmJiAhVVNFKENBSVJPKQogCisjaWYgIVBMQVRGT1JNKENPQ09BKQorT3B0aW9uYWw8
U3RyaW5nPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGxhdGZvcm1HZW5lcmF0ZUxvY2FsRmlsZVBh
dGhGb3JSZW1vdGVGaWxlKGNvbnN0IFN0cmluZyYgcmVtb3RlRmlsZVBhdGgsIGNvbnN0IFN0cmlu
ZyYgYmFzZTY0RW5jb2RlZEZpbGVDb250ZW50cykKK3sKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworfQorI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uLmgKaW5kZXggNWRmZGMxOGMwOTZmZDJlNzU2NmVkZmY0Yzg5ZTJkNjZj
YWFkZTkzZC4uYWM0YzMxMzk5MjBmODY0NmRlZTQxNGYwN2U2OGU2M2ZmYzYzNjg4MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vz
c2lvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uaApAQCAtMTg2LDcgKzE4Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFjY2Vw
dEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBtZXNzYWdl
T2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFN0cmluZyogdGV4dCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNjcmlwdFByb21wdChJbnNwZWN0b3I6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0
IFN0cmluZyYgdGV4dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRGaWxlc1RvU2VsZWN0Rm9yRmls
ZVVwbG9hZChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0Nv
bnRleHRIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBmaWxlbmFtZXMpIG92ZXJyaWRlOworICAg
IHZvaWQgc2V0RmlsZXNUb1NlbGVjdEZvckZpbGVVcGxvYWQoSW5zcGVjdG9yOjpFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBKU09OOjpBcnJh
eSYgZmlsZW5hbWVzLCBjb25zdCBKU09OOjpBcnJheSogb3B0aW9uYWxGaWxlQ29udGVudHMpIG92
ZXJyaWRlOwogICAgIHZvaWQgZ2V0QWxsQ29va2llcyhjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29u
dGV4dEhhbmRsZSwgUmVmPEdldEFsbENvb2tpZXNDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBkZWxldGVTaW5nbGVDb29raWUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5k
bGUsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgUmVmPERlbGV0ZVNpbmdsZUNvb2tpZUNhbGxi
YWNrPiYmKSBvdmVycmlkZTsKICAgICB2b2lkIGFkZFNpbmdsZUNvb2tpZShjb25zdCBTdHJpbmcm
IGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSlNPTjo6T2JqZWN0JiBjb29raWUsIFJlZjxB
ZGRTaW5nbGVDb29raWVDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CkBAIC0yNjAsOSArMjYwLDEyIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybVNpbXVsYXRlS2V5U2VxdWVuY2UoV2ViUGFnZVBy
b3h5JiwgY29uc3QgU3RyaW5nJik7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9LRVlCT0FS
RF9JTlRFUkFDVElPTlMpCiAKLSAgICAvLyBHZXQgYmFzZTY0IGVuY29kZWQgUE5HIGRhdGEgZnJv
bSBhIGJpdG1hcC4KKyAgICAvLyBHZXQgYmFzZTY0LWVuY29kZWQgUE5HIGRhdGEgZnJvbSBhIGJp
dG1hcC4KICAgICBPcHRpb25hbDxTdHJpbmc+IHBsYXRmb3JtR2V0QmFzZTY0RW5jb2RlZFBOR0Rh
dGEoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmKTsKIAorICAgIC8vIFNhdmUgYmFzZTY0
LWVuY29kZWQgZmlsZSBjb250ZW50cyB0byBhIGxvY2FsIGZpbGUgcGF0aCwgYW5kIHJldHVybiB0
aGUgcGF0aC4KKyAgICBPcHRpb25hbDxTdHJpbmc+IHBsYXRmb3JtR2VuZXJhdGVMb2NhbEZpbGVQ
YXRoRm9yUmVtb3RlRmlsZShjb25zdCBTdHJpbmcmIHJlbW90ZUZpbGVQYXRoLCBjb25zdCBTdHJp
bmcmIGJhc2U2NEVuY29kZWRGaWxlQ29udGVudHMpOworCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgLy8gVGhlIHR5cGUgcGFyYW1ldGVyIG9mIHRoZSBOU0FycmF5IGFyZ3VtZW50IGlzIHBsYXRm
b3JtLWRlcGVuZGVudC4KICAgICB2b2lkIHNlbmRTeW50aGVzaXplZEV2ZW50c1RvUGFnZShXZWJQ
YWdlUHJveHkmLCBOU0FycmF5ICpldmVudHNUb1NlbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9jb2NvYS9XZWJBdXRvbWF0aW9uU2Vzc2lvbkNvY29h
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9jb2NvYS9XZWJBdXRvbWF0
aW9uU2Vzc2lvbkNvY29hLm1tCmluZGV4IGQzNDc3MThiMmZkODc5NjAyY2IzODU3NDg1MDBmZDJm
OTYzM2VkN2YuLjQ2MjUzNTU0NThlYzIzZDI0ZjczNzk2M2E1NWNmY2YzNTlmNGZkYjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vY29jb2EvV2ViQXV0b21h
dGlvblNlc3Npb25Db2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0
aW9uL2NvY29hL1dlYkF1dG9tYXRpb25TZXNzaW9uQ29jb2EubW0KQEAgLTI4LDYgKzI4LDggQEAK
IAogI2lmIFBMQVRGT1JNKENPQ09BKQogCisjaW1wb3J0IDx3dGYvRmlsZVN5c3RlbS5oPgorCiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbmNsdWRlIDxJbWFnZUlPL0NHSW1hZ2VEZXN0aW5h
dGlvbi5oPgogI2luY2x1ZGUgPE1vYmlsZUNvcmVTZXJ2aWNlcy9VVENvcmVUeXBlcy5oPgpAQCAt
NTUsNiArNTcsMjcgQEAgT3B0aW9uYWw8U3RyaW5nPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGxh
dGZvcm1HZXRCYXNlNjRFbmNvZGVkUE5HRGF0YShjb25zdCBTaGEKICAgICByZXR1cm4gU3RyaW5n
KFtpbWFnZURhdGEgYmFzZTY0RW5jb2RlZFN0cmluZ1dpdGhPcHRpb25zOjBdKTsKIH0KIAorT3B0
aW9uYWw8U3RyaW5nPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGxhdGZvcm1HZW5lcmF0ZUxvY2Fs
RmlsZVBhdGhGb3JSZW1vdGVGaWxlKGNvbnN0IFN0cmluZyYgcmVtb3RlRmlsZVBhdGgsIGNvbnN0
IFN0cmluZyYgYmFzZTY0RW5jb2RlZEZpbGVDb250ZW50cykKK3sKKyAgICBOU1N0cmluZyAqdGVt
cG9yYXJ5RGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6Y3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5KEAi
V2ViRHJpdmVyIik7CisgICAgTlNVUkwgKnJlbW90ZUZpbGUgPSBbTlNVUkwgZmlsZVVSTFdpdGhQ
YXRoOnJlbW90ZUZpbGVQYXRoIGlzRGlyZWN0b3J5Ok5PXTsKKyAgICBOU1N0cmluZyAqbG9jYWxG
aWxlUGF0aCA9IFt0ZW1wb3JhcnlEaXJlY3Rvcnkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9u
ZW50OnJlbW90ZUZpbGUubGFzdFBhdGhDb21wb25lbnRdOworICAgIE5TRGF0YSAqZmlsZUNvbnRl
bnRzID0gW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQmFzZTY0RW5jb2RlZFN0cmluZzpiYXNlNjRF
bmNvZGVkRmlsZUNvbnRlbnRzIG9wdGlvbnM6MF07CisgICAgaWYgKCFmaWxlQ29udGVudHMpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJXZWJBdXRvbWF0aW9uU2Vzc2lvbjogdW5hYmxlIHRvIGRlY29k
ZSBiYXNlNjQtZW5jb2RlZCBmaWxlIGNvbnRlbnRzLiIpOworICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIH0KKworICAgIE5TRXJyb3IgKmZpbGVXcml0ZUVycm9yOworICAgIFtmaWxl
Q29udGVudHMgd3JpdGVUb0ZpbGU6bG9jYWxGaWxlUGF0aCBvcHRpb25zOk5TRGF0YVdyaXRpbmdB
dG9taWMgZXJyb3I6JmZpbGVXcml0ZUVycm9yXTsKKyAgICBpZiAoZmlsZVdyaXRlRXJyb3IpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJXZWJBdXRvbWF0aW9uU2Vzc2lvbjogRXJyb3Igd3JpdGluZyBp
bWFnZSBkYXRhIHRvIHRlbXBvcmFyeSBmaWxlOiAlQCIsIGZpbGVXcml0ZUVycm9yKTsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICByZXR1cm4gU3RyaW5nKGxvY2Fs
RmlsZVBhdGgpOworfQorCiBPcHRpb25hbDx1bmljaGFyPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
Y2hhckNvZGVGb3JWaXJ0dWFsS2V5KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlZp
cnR1YWxLZXkga2V5KSBjb25zdAogewogICAgIHN3aXRjaCAoa2V5KSB7Cg==
</data>
<flag name="review"
          id="381999"
          type_id="1"
          status="+"
          setter="hi"
    />
          </attachment>
      

    </bug>

</bugzilla>