<?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>175075</bug_id>
          
          <creation_ts>2017-08-02 10:10:05 -0700</creation_ts>
          <short_desc>webkitpy: Allow caller to specify response to unicode encode/decode error in filesystem</short_desc>
          <delta_ts>2017-08-07 10:50:36 -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>Tools / Tests</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="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>ap</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>glenn</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1334264</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-08-02 10:10:05 -0700</bug_when>
    <thetext>Currently, if there is an encode or decode error encountered while reading or writing to a text file, there is no way to specify the response, an exception will always be thrown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334267</commentid>
    <comment_count>1</comment_count>
      <attachid>316970</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-08-02 10:12:29 -0700</bug_when>
    <thetext>Created attachment 316970
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334271</commentid>
    <comment_count>2</comment_count>
      <attachid>316970</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-08-02 10:17:53 -0700</bug_when>
    <thetext>Comment on attachment 316970
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334315</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-02 11:22:00 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 316970:

The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334360</commentid>
    <comment_count>4</comment_count>
      <attachid>316970</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-02 13:01:36 -0700</bug_when>
    <thetext>Comment on attachment 316970
Patch

Clearing flags on attachment: 316970

Committed r220150: &lt;http://trac.webkit.org/changeset/220150&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334361</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-02 13:01:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334362</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-02 13:02:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/33683253&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334380</commentid>
    <comment_count>7</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-08-02 14:07:20 -0700</bug_when>
    <thetext>I know that this patch was already reviewed and landed. It seems error prone to allow a caller to relax UTF-8 decoding rules and I worry it may led to a proliferation of sloppy coding. With the exception of one or two methods, the FileSystem methods that work with text-files assume UTF-8 encoded text files. We should raise an error when a text file contains malformed UTF-8 data and we should make it hard for a person to use FileSystem methods meant for interacting with a text-file on a non-text file because both of these activities indicate a correctness issue.

From talking with Jonathan today in-person, the motivation for this change is to ignore  decoding errors that have been seen when processing some crash logs. We should acquire one of these problematic crash logs and analyze it. I hope that from this analysis we can revert this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335401</commentid>
    <comment_count>8</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-08-04 12:48:28 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #7)
&gt; I know that this patch was already reviewed and landed. It seems error prone
&gt; to allow a caller to relax UTF-8 decoding rules and I worry it may led to a
&gt; proliferation of sloppy coding. With the exception of one or two methods,
&gt; the FileSystem methods that work with text-files assume UTF-8 encoded text
&gt; files. We should raise an error when a text file contains malformed UTF-8
&gt; data and we should make it hard for a person to use FileSystem methods meant
&gt; for interacting with a text-file on a non-text file because both of these
&gt; activities indicate a correctness issue.

So your concern is that the &quot;errors=&apos;strict&apos;&quot; default value is too easily overridden by someone just trying to make a script work, and that the reviewer of a future patch wouldn&apos;t question why &quot;errors=&apos;replace&apos;&quot; or &quot;errors=&apos;ignore&apos;&quot; is being used when it shouldn&apos;t be?

    def read_text_file(self, path, errors=&apos;strict&apos;):

I was assuming a best-case scenario where both patch author and reviewer understood what they were doing, although I can see how it could easily be misused.

&gt; From talking with Jonathan today in-person, the motivation for this change
&gt; is to ignore  decoding errors that have been seen when processing some crash
&gt; logs. We should acquire one of these problematic crash logs and analyze it.
&gt; I hope that from this analysis we can revert this change.

If the invalid UTF-8 characters are in the &quot;Filtered syslog&quot; section of the crash log, it will be difficult to (a) fix all of them in a timely manner and (b) prevent invalid UTF-8 characters from being introduced in the future.

In that case, do we need a separate method to read a text file with potentially invalid UTF-8 characters named something like this (to make it clear what it does, and to make it easier to raise awareness during code reviews)?

    def read_text_file_ignoring_invalid_utf_8_characters(self, path):</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336029</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-08-07 10:50:36 -0700</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #8)
&gt; So your concern is that the &quot;errors=&apos;strict&apos;&quot; default value is too easily
&gt; overridden by someone just trying to make a script work, and that the
&gt; reviewer of a future patch wouldn&apos;t question why &quot;errors=&apos;replace&apos;&quot; or
&gt; &quot;errors=&apos;ignore&apos;&quot; is being used when it shouldn&apos;t be?
&gt; 

My concern is that is that there may be a better approach to avoiding the UnicodeDecodeError exceptions if the motivation for adding the errors parameter was adequately explained. I was under the impression that it was good programming practice to read a file whose encoding is unknown or may contain malformed characters as a binary file (i.e. use FileSystem.read_binary_file()) as opposed to reading the file as UTF-8 with a decoder error strategy unless the output of the file will be used in some fashion that requires printable characters.

&gt;     def read_text_file(self, path, errors=&apos;strict&apos;):
&gt; 
&gt; I was assuming a best-case scenario where both patch author and reviewer
&gt; understood what they were doing, although I can see how it could easily be
&gt; misused.
&gt; 

This has nothing to do with the competency of the author and reviewer. I would like to know what is the preferred idiom for opening a file to read, searching for an ASCII character sequence, that has an unknown encoding or may contain malformed characters. More generally, when is it appropriate to read a file as binary VS read a file as UTF-8 with a decoder error strategy?

&gt; &gt; From talking with Jonathan today in-person, the motivation for this change
&gt; &gt; is to ignore  decoding errors that have been seen when processing some crash
&gt; &gt; logs. We should acquire one of these problematic crash logs and analyze it.
&gt; &gt; I hope that from this analysis we can revert this change.
&gt; 
&gt; If the invalid UTF-8 characters are in the &quot;Filtered syslog&quot; section of the
&gt; crash log, it will be difficult to (a) fix all of them in a timely manner
&gt; and (b) prevent invalid UTF-8 characters from being introduced in the future.
&gt; 

If your hypothesis is correct then adding the optional parameter errors to FileSystem methods is more understandable. (Even more so if the intended use of these functions necessitates printable characters as output). It would be good to know if we should be reading crash logs on Darwin-based system as binary files as we do Windows. Regardless, I would not have commented in this bug if the description of this bug (comment #0) or the ChangeLog description explained that this parameter was added because of issues reading crash logs on Darwin-based systems with the suspected cause being that the &quot;Filtered syslog&quot; section of a crash log may contain arbitrary data. Both the bug description and ChangeLog make it sound like we are adding this parameter on a whim because we encountered Python UnicodeDecodeError exceptions and want to silence them without understanding the underlying cause of the exceptions and whether it makes sense to read the crash logs as text instead of binary.

&gt; In that case, do we need a separate method to read a text file with
&gt; potentially invalid UTF-8 characters named something like this (to make it
&gt; clear what it does, and to make it easier to raise awareness during code
&gt; reviews)?
&gt; 
&gt;     def read_text_file_ignoring_invalid_utf_8_characters(self, path):

I do not have a strong opinion on this. I do not get the impression that such a function name makes the code more understandable than the errors parameter.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316970</attachid>
            <date>2017-08-02 10:12:29 -0700</date>
            <delta_ts>2017-08-02 13:01:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175075-20170802101225.patch</filename>
            <type>text/plain</type>
            <size>6244</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMDEzMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI0IEBACisyMDE3LTA4LTAyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogQWxsb3cgY2FsbGVyIHRvIHNwZWNpZnkgcmVzcG9uc2Ug
dG8gdW5pY29kZSBlbmNvZGUvZGVjb2RlIGVycm9yIGluIGZpbGVzeXN0ZW0KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTA3NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGhhdmUgbm8gd2F5IG9mIGhh
bmRsaW5nIHRleHQgZmlsZXMgd2l0aCBpbGxlZ2FsIHVuaWNvZGUgY2hhcmFjdGVycy4gQWxsb3cg
dGhlIGNhbGxlcnMgb2YKKyAgICAgICAgZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZSB0byBzcGVj
aWZ5IG9uZSBvZiBQeXRob24gMi43J3Mgc3VwcG9ydGVkIHJlc3BvbnNlcyAoJ3N0cmljdCcsICdp
Z25vcmUnLCBvcgorICAgICAgICAncmVwbGFjZScpLiBTZWUgaHR0cHM6Ly9kb2NzLnB5dGhvbi5v
cmcvMi9ob3d0by91bmljb2RlLmh0bWwgZm9yIGRldGFpbHMgb24gdGhlc2UgcmVzcG9uc2VzLgor
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW0ucHk6
CisgICAgICAgIChGaWxlU3lzdGVtLnJlYWRfdGV4dF9maWxlKTogQWxsb3cgY2FsbGVyIHRvIHNw
ZWNpZnkgdW5pY29kZSBlcnJvciBoYW5kbGluZy4KKyAgICAgICAgKEZpbGVTeXN0ZW0ud3JpdGVf
dGV4dF9maWxlKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2ZpbGVzeXN0ZW1fbW9jay5weToKKyAgICAgICAgKE1vY2tGaWxlU3lzdGVtLnJlYWRfdGV4
dF9maWxlKTogQWxsb3cgY2FsbGVyIHRvIHNwZWNpZnkgdW5pY29kZSBlcnJvciBoYW5kbGluZy4K
KyAgICAgICAgKE1vY2tGaWxlU3lzdGVtLndyaXRlX3RleHRfZmlsZSk6IERpdHRvLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0ZXN0LnB5
OgorICAgICAgICAoUmVhbEZpbGVTeXN0ZW1UZXN0LnRlc3RfcmVhZF90ZXh0X2ZpbGVfdW5pY29k
ZV9kZWNvZGVfZXJyb3IpOiBUZXN0IHJlYWRpbmcgYSBmaWxlIHdpdGggaWxsZWdhbCB1bmljb2Rl
IGNvbnRlbnQuCisgICAgICAgIChSZWFsRmlsZVN5c3RlbVRlc3QudGVzdF93cml0ZV90ZXh0X2Zp
bGVfdW5pY29kZV9lbmNvZGVfZXJyb3IpOiBUZXN0IHdyaXRpbmcgaWxsZWdhbCB1bmljb2RlIGNv
bnRlbnQgdG8gYSBmaWxlLgorCiAyMDE3LTA4LTAyICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRh
bnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBbQ01ha2VdIFJlbW92ZSBvYnNvbGV0ZSBjb2Rl
IGluIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5CShyZXZpc2lvbiAyMjAx
MTUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5w
eQkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDE5ICsyNDYsMTkgQEAgY2xhc3MgRmlsZVN5c3RlbShv
YmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29k
ZWNzLmdldHdyaXRlcigndXRmOCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3JlcGxhY2UnKQogCi0gICAgZGVmIHJlYWRfdGV4dF9maWxlKHNlbGYsIHBh
dGgpOgorICAgIGRlZiByZWFkX3RleHRfZmlsZShzZWxmLCBwYXRoLCBlcnJvcnM9J3N0cmljdCcp
OgogICAgICAgICAiIiJSZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGF0IHRoZSBnaXZl
biBwYXRoIGFzIGEgVW5pY29kZSBzdHJpbmcuCiAKICAgICAgICAgVGhlIGZpbGUgaXMgcmVhZCBh
c3N1bWluZyBpdCBpcyBhIFVURi04IGVuY29kZWQgZmlsZSB3aXRoIG5vIEJPTS4iIiIKLSAgICAg
ICAgd2l0aCBjb2RlY3Mub3BlbihwYXRoLCAncicsICd1dGY4JykgYXMgZjoKKyAgICAgICAgd2l0
aCBjb2RlY3Mub3BlbihwYXRoLCAncicsICd1dGY4JywgZXJyb3JzPWVycm9ycykgYXMgZjoKICAg
ICAgICAgICAgIHJldHVybiBmLnJlYWQoKQogCi0gICAgZGVmIHdyaXRlX3RleHRfZmlsZShzZWxm
LCBwYXRoLCBjb250ZW50cyk6CisgICAgZGVmIHdyaXRlX3RleHRfZmlsZShzZWxmLCBwYXRoLCBj
b250ZW50cywgZXJyb3JzPSdzdHJpY3QnKToKICAgICAgICAgIiIiV3JpdGUgdGhlIGNvbnRlbnRz
IHRvIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiBsb2NhdGlvbi4KIAogICAgICAgICBUaGUgZmlsZSBp
cyB3cml0dGVuIGVuY29kZWQgYXMgVVRGLTggd2l0aCBubyBCT00uIiIiCi0gICAgICAgIHdpdGgg
Y29kZWNzLm9wZW4ocGF0aCwgJ3cnLCAndXRmLTgnKSBhcyBmOgotICAgICAgICAgICAgZi53cml0
ZShjb250ZW50cy5kZWNvZGUoJ3V0Zi04JykgaWYgdHlwZShjb250ZW50cykgPT0gc3RyIGVsc2Ug
Y29udGVudHMpCisgICAgICAgIHdpdGggY29kZWNzLm9wZW4ocGF0aCwgJ3cnLCAndXRmLTgnLCBl
cnJvcnM9ZXJyb3JzKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShjb250ZW50cy5kZWNvZGUo
J3V0Zi04JywgZXJyb3JzPWVycm9ycykgaWYgdHlwZShjb250ZW50cykgPT0gc3RyIGVsc2UgY29u
dGVudHMpCiAKICAgICBkZWYgc2hhMShzZWxmLCBwYXRoKToKICAgICAgICAgY29udGVudHMgPSBz
ZWxmLnJlYWRfYmluYXJ5X2ZpbGUocGF0aCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weQkocmV2aXNpb24g
MjIwMTE1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0
ZW1fbW9jay5weQkod29ya2luZyBjb3B5KQpAQCAtMzQwLDExICszNDAsMTEgQEAgY2xhc3MgTW9j
a0ZpbGVTeXN0ZW0ob2JqZWN0KToKICAgICBkZWYgb3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmco
c2VsZiwgcGF0aCwgc2hvdWxkX2FwcGVuZD1GYWxzZSk6CiAgICAgICAgIHJldHVybiBXcml0YWJs
ZVRleHRGaWxlT2JqZWN0KHNlbGYsIHBhdGgpCiAKLSAgICBkZWYgcmVhZF90ZXh0X2ZpbGUoc2Vs
ZiwgcGF0aCk6Ci0gICAgICAgIHJldHVybiBzZWxmLnJlYWRfYmluYXJ5X2ZpbGUocGF0aCkuZGVj
b2RlKCd1dGYtOCcpCisgICAgZGVmIHJlYWRfdGV4dF9maWxlKHNlbGYsIHBhdGgsIGVycm9ycz0n
c3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBzZWxmLnJlYWRfYmluYXJ5X2ZpbGUocGF0aCkuZGVj
b2RlKCd1dGYtOCcsIGVycm9ycz1lcnJvcnMpCiAKLSAgICBkZWYgd3JpdGVfdGV4dF9maWxlKHNl
bGYsIHBhdGgsIGNvbnRlbnRzKToKLSAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVfYmluYXJ5X2Zp
bGUocGF0aCwgY29udGVudHMuZW5jb2RlKCd1dGYtOCcpKQorICAgIGRlZiB3cml0ZV90ZXh0X2Zp
bGUoc2VsZiwgcGF0aCwgY29udGVudHMsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVy
biBzZWxmLndyaXRlX2JpbmFyeV9maWxlKHBhdGgsIGNvbnRlbnRzLmVuY29kZSgndXRmLTgnLCBl
cnJvcnM9ZXJyb3JzKSkKIAogICAgIGRlZiBzaGExKHNlbGYsIHBhdGgpOgogICAgICAgICBjb250
ZW50cyA9IHNlbGYucmVhZF9iaW5hcnlfZmlsZShwYXRoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRl
c3QucHkJKHJldmlzaW9uIDIyMDExNSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNiAr
MjAyLDQwIEBAIGNsYXNzIFJlYWxGaWxlU3lzdGVtVGVzdCh1bml0dGVzdC5UZXN0Q2EKICAgICAg
ICAgICAgIGlmIHRleHRfcGF0aCBhbmQgZnMuaXNmaWxlKHRleHRfcGF0aCk6CiAgICAgICAgICAg
ICAgICAgb3MucmVtb3ZlKHRleHRfcGF0aCkKIAorICAgIGRlZiB0ZXN0X3JlYWRfdGV4dF9maWxl
X3VuaWNvZGVfZGVjb2RlX2Vycm9yKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQor
ICAgICAgICB0ZXh0X3BhdGggPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRleHRf
cGF0aCA9IHRlbXBmaWxlLm1rdGVtcChwcmVmaXg9J3dyaXRlX3RleHRfdW5pdHRlc3RfJykKKyAg
ICAgICAgICAgIGZzLndyaXRlX2JpbmFyeV9maWxlKHRleHRfcGF0aCwgYnl0ZWFycmF5KGInXHg3
M1x4NzRceDcyXHg4YicpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2Rl
RGVjb2RlRXJyb3IsIGZzLnJlYWRfdGV4dF9maWxlLCB0ZXh0X3BhdGgpCisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHUnc3RyXHVmZmZkJywgZnMucmVhZF90ZXh0X2ZpbGUodGV4dF9wYXRo
LCBlcnJvcnM9J3JlcGxhY2UnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3N0cics
IGZzLnJlYWRfdGV4dF9maWxlKHRleHRfcGF0aCwgZXJyb3JzPSdpZ25vcmUnKSkKKyAgICAgICAg
ZmluYWxseToKKyAgICAgICAgICAgIGlmIHRleHRfcGF0aCBhbmQgZnMuaXNmaWxlKHRleHRfcGF0
aCk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRleHRfcGF0aCkKKworICAgIGRlZiB0ZXN0
X3dyaXRlX3RleHRfZmlsZV91bmljb2RlX2VuY29kZV9lcnJvcihzZWxmKToKKyAgICAgICAgZnMg
PSBGaWxlU3lzdGVtKCkKKyAgICAgICAgdGV4dF9wYXRoID0gTm9uZQorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICB0ZXh0X3BhdGggPSB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSd3cml0ZV90ZXh0
X3VuaXR0ZXN0XycpCisgICAgICAgICAgICBiaW5fcGF0aCA9IHRlbXBmaWxlLm1rdGVtcChwcmVm
aXg9J3dyaXRlX2Jpbl91bml0dGVzdF8nKQorICAgICAgICAgICAgZnMud3JpdGVfYmluYXJ5X2Zp
bGUoYmluX3BhdGgsIGJ5dGVhcnJheShiJ1x4NzNceDc0XHg3Mlx4OGInKSkKKyAgICAgICAgICAg
IGRhdGFfdG9fd3JpdGUgPSBmcy5yZWFkX2JpbmFyeV9maWxlKGJpbl9wYXRoKQorCisgICAgICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGZzLndyaXRlX3RleHRf
ZmlsZSwgdGV4dF9wYXRoLCBkYXRhX3RvX3dyaXRlKQorICAgICAgICAgICAgZnMud3JpdGVfdGV4
dF9maWxlKHRleHRfcGF0aCwgZGF0YV90b193cml0ZSwgJ3JlcGxhY2UnKQorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCh1J3N0clx1ZmZmZCcsIGZzLnJlYWRfdGV4dF9maWxlKHRleHRfcGF0
aCkpCisgICAgICAgICAgICBmcy53cml0ZV90ZXh0X2ZpbGUodGV4dF9wYXRoLCBkYXRhX3RvX3dy
aXRlLCAnaWdub3JlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3N0cicsIGZzLnJl
YWRfdGV4dF9maWxlKHRleHRfcGF0aCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBp
ZiB0ZXh0X3BhdGggYW5kIGZzLmlzZmlsZSh0ZXh0X3BhdGgpOgorICAgICAgICAgICAgICAgIG9z
LnJlbW92ZSh0ZXh0X3BhdGgpCisgICAgICAgICAgICBpZiBiaW5fcGF0aCBhbmQgZnMuaXNmaWxl
KGJpbl9wYXRoKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoYmluX3BhdGgpCisKICAgICBk
ZWYgdGVzdF9hcHBlbmRfdG9fdGV4dF9maWxlKHNlbGYpOgogICAgICAgICBmcyA9IEZpbGVTeXN0
ZW0oKQogICAgICAgICB0ZXh0X3BhdGggPSBOb25lCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>