<?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>26890</bug_id>
          
          <creation_ts>2009-07-01 10:54:19 -0700</creation_ts>
          <short_desc>String.prototype.match and replace do not clear global regexp lastIndex per ES5.1 15.5.4.10</short_desc>
          <delta_ts>2012-03-08 16:49:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>0</everconfirmed>
          <reporter name="John-David Dalton">john.david.dalton</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>joepeck</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>129315</commentid>
    <comment_count>0</comment_count>
    <who name="John-David Dalton">john.david.dalton</who>
    <bug_when>2009-07-01 10:54:19 -0700</bug_when>
    <thetext>According to spec String#replace should perform the following.

var s = &apos;0x2x4x6x8&apos;;
var p = /x/g;
s.replace(p, function() { alert(p.lastIndex)  });
// alert 2, then 4, then 6, then 8

alert(p.lastIndex); // alert 0

Opera currently does this correctly. There is a bug reported to Mozilla as well.
https://bugzilla.mozilla.org/show_bug.cgi?id=501739

Discussion:
https://mail.mozilla.org/pipermail/es-discuss/2009-July/009628.html
https://mail.mozilla.org/pipermail/es-discuss/2009-July/009631.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573549</commentid>
    <comment_count>1</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-07 20:42:26 -0800</bug_when>
    <thetext>We definitely have a bug here,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573617</commentid>
    <comment_count>2</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-07 22:27:51 -0800</bug_when>
    <thetext>Gah, premature commit!  Anyway, we definitely have a bug here, but I think the spec may actually call for slightly different expected results.

The spec requires that match first clears lastIndex, then calls exec until it returns null (per 15.5.4.10 8.f.ii).  When exec returns null, it also clears lastIndex (per 15.10.6.2 step 9.a.1).  So after a match, the value of lastIndex must be 0.  Our implementation of match ignores and does not update lastIndex.  Ignoring its initial value is correct, failing to reset it isn&apos;t.

var s = &apos;0x2x4x6x8&apos;;
var p = /x/g;
p.lastIndex = 3;
s.match(p);
print(p.lastIndex); // prints 3, should be 0 after a match.

Similarly, after a replace without a callback replacer function, the lastIndex should definitely be reset.

var s = &apos;0x2x4x6x8&apos;;
var p = /x/g;
p.lastIndex = 3;
s.replace(p,&apos;y&apos;);
print(p.lastIndex); // prints 3, should be 0 after a replace.

The spec does not enumerate the stages of performing a replace as clearly as it does for some library functions, but it contains the following two directions:

firstly: &quot;If searchValue.global is true, then search string for all matches of the regular expression searchValue. Do the search in the same manner as in String.prototype.match, including the update of searchValue.lastIndex.&quot;
secondly: &quot;If replaceValue is a function, then for each matched substring, call the function&quot;

This clearly implies that these actions should take place in the following order:
1) Find all match results
2) Set the value of lastIndex to 0 (implicitly performed by 15.10.6.2 step 9.a.1 called via the action of the last iteration of 15.5.4.10 8.f.i).
3) Call all replacers.

As such, the replace method should set lastIndex to 0 once, before any replacers are called, and then not change the value.

var s = &apos;0x1x2x3x4&apos;;
var p = /x/g;
p.lastIndex = 5;
s.replace(p, function() { return ++p.lastIndex; })
// should be &quot;011223344&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574358</commentid>
    <comment_count>3</comment_count>
      <attachid>130933</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-08 16:14:37 -0800</bug_when>
    <thetext>Created attachment 130933
Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574390</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-08 16:49:45 -0800</bug_when>
    <thetext>Fixed in r110233</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130933</attachid>
            <date>2012-03-08 16:14:37 -0800</date>
            <delta_ts>2012-03-08 16:16:12 -0800</delta_ts>
            <desc>Fix</desc>
            <filename>26890.patch</filename>
            <type>text/plain</type>
            <size>12037</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEwMjI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBA
CisyMDEyLTAzLTA4ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBTdHJpbmcucHJvdG90eXBlLm1hdGNoIGFuZCByZXBsYWNlIGRvIG5vdCBjbGVh
ciBnbG9iYWwgcmVnZXhwIGxhc3RJbmRleCBwZXIgRVM1LjEgMTUuNS40LjEwCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjg5MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBlciAxNS4xMC42LjIgc3RlcCA5
LmEuMSBjYWxsZWQgdmlhIHRoZSBhY3Rpb24gb2YgdGhlIGxhc3QgaXRlcmF0aW9uIG9mIDE1LjUu
NC4xMCA4LmYuaS4KKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6cmVwbGFjZVVzaW5nUmVnRXhwU2VhcmNoKToKKyAgICAgICAgKEpTQzo6c3Ry
aW5nUHJvdG9GdW5jTWF0Y2gpOgorICAgICAgICAgICAgLSBhZGRlZCBjYWxscyB0byBzZXRMYXN0
SW5kZXguCisKIDIwMTItMDMtMDcgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAgICAg
ICAgIEFkZCBzdXBwb3J0IGZvciBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDExMDAyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NSwxMSArNDU1LDE5IEBAIHN0YXRp
YyBORVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKICAgICB1bnNpZ25lZCBzb3VyY2VM
ZW4gPSBzb3VyY2UubGVuZ3RoKCk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Ci0gICAgUmVnRXhwKiByZWdF
eHAgPSBhc1JlZ0V4cE9iamVjdChzZWFyY2hWYWx1ZSktPnJlZ0V4cCgpOworICAgIFJlZ0V4cE9i
amVjdCogcmVnRXhwT2JqZWN0ID0gYXNSZWdFeHBPYmplY3Qoc2VhcmNoVmFsdWUpOworICAgIFJl
Z0V4cCogcmVnRXhwID0gcmVnRXhwT2JqZWN0LT5yZWdFeHAoKTsKICAgICBib29sIGdsb2JhbCA9
IHJlZ0V4cC0+Z2xvYmFsKCk7CiAKLSAgICBpZiAoZ2xvYmFsICYmIGNhbGxUeXBlID09IENhbGxU
eXBlTm9uZSAmJiAhcmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBy
ZW1vdmVVc2luZ1JlZ0V4cFNlYXJjaChleGVjLCBzdHJpbmcsIHNvdXJjZSwgcmVnRXhwKTsKKyAg
ICBpZiAoZ2xvYmFsKSB7CisgICAgICAgIC8vIEVTNS4xIDE1LjUuNC4xMCBzdGVwIDguYS4KKyAg
ICAgICAgcmVnRXhwT2JqZWN0LT5zZXRMYXN0SW5kZXgoZXhlYywgMCk7CisgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKKworICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lICYmICFy
ZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiByZW1vdmVVc2lu
Z1JlZ0V4cFNlYXJjaChleGVjLCBzdHJpbmcsIHNvdXJjZSwgcmVnRXhwKTsKKyAgICB9CiAKICAg
ICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCk7CiAKQEAgLTgwOCw5ICs4MTYsMTcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIEpTVmFsdWUgYTAg
PSBleGVjLT5hcmd1bWVudCgwKTsKIAogICAgIFJlZ0V4cCogcmVnOwotICAgIGlmIChhMC5pbmhl
cml0cygmUmVnRXhwT2JqZWN0OjpzX2luZm8pKQotICAgICAgICByZWcgPSBhc1JlZ0V4cE9iamVj
dChhMCktPnJlZ0V4cCgpOwotICAgIGVsc2UgeworICAgIGJvb2wgZ2xvYmFsID0gZmFsc2U7Cisg
ICAgaWYgKGEwLmluaGVyaXRzKCZSZWdFeHBPYmplY3Q6OnNfaW5mbykpIHsKKyAgICAgICAgUmVn
RXhwT2JqZWN0KiByZWdFeHBPYmplY3QgPSBhc1JlZ0V4cE9iamVjdChhMCk7CisgICAgICAgIHJl
ZyA9IHJlZ0V4cE9iamVjdC0+cmVnRXhwKCk7CisgICAgICAgIGlmICgoZ2xvYmFsID0gcmVnLT5n
bG9iYWwoKSkpIHsKKyAgICAgICAgICAgIC8vIEVTNS4xIDE1LjUuNC4xMCBzdGVwIDguYS4KKyAg
ICAgICAgICAgIHJlZ0V4cE9iamVjdC0+c2V0TGFzdEluZGV4KGV4ZWMsIDApOworICAgICAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CiAgICAgICAg
IC8qCiAgICAgICAgICAqICBFQ01BIDE1LjUuNC4xMiBTdHJpbmcucHJvdG90eXBlLnNlYXJjaCAo
cmVnZXhwKQogICAgICAgICAgKiAgSWYgcmVnZXhwIGlzIG5vdCBhbiBvYmplY3Qgd2hvc2UgW1tD
bGFzc11dIHByb3BlcnR5IGlzICJSZWdFeHAiLCBpdCBpcwpAQCAtODI1LDcgKzg0MSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpbnQgcG9zOwogICAg
IGludCBtYXRjaExlbmd0aCA9IDA7CiAgICAgcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRj
aCgqZ2xvYmFsRGF0YSwgcmVnLCBzLCAwLCBwb3MsIG1hdGNoTGVuZ3RoKTsKLSAgICBpZiAoIShy
ZWctPmdsb2JhbCgpKSkgeworICAgIGlmICghZ2xvYmFsKSB7CiAgICAgICAgIC8vIGNhc2Ugd2l0
aG91dCAnZycgZmxhZyBpcyBoYW5kbGVkIGxpa2UgUmVnRXhwLnByb3RvdHlwZS5leGVjCiAgICAg
ICAgIGlmIChwb3MgPCAwKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTAyMjcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0wMy0wOCAgR2F2aW4gQmFy
cmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAgU3RyaW5nLnByb3Rv
dHlwZS5tYXRjaCBhbmQgcmVwbGFjZSBkbyBub3QgY2xlYXIgZ2xvYmFsIHJlZ2V4cCBsYXN0SW5k
ZXggcGVyIEVTNS4xIDE1LjUuNC4xMAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjY4OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBQZXIgMTUuMTAuNi4yIHN0ZXAgOS5hLjEgY2FsbGVkIHZpYSB0aGUgYWN0
aW9uIG9mIHRoZSBsYXN0IGl0ZXJhdGlvbiBvZiAxNS41LjQuMTAgOC5mLmkuCisKKyAgICAgICAg
KiBmYXN0L2pzL3NjcmlwdC10ZXN0cy9zdHJpbmctbWF0Y2guanM6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvanMvc3RyaW5nLW1hdGNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9qcy9zdHJpbmctbWF0Y2guaHRtbDogQWRkZWQuCisgICAgICAgICAgICAtIEFkZGVkIHRlc3Qg
Y2FzZSBmb3IgbWF0Y2guCisgICAgICAgICogZmFzdC9qcy9zY3JpcHQtdGVzdHMvc3RyaW5nLXJl
cGxhY2UtMi5qczoKKyAgICAgICAgKiBmYXN0L2pzL3N0cmluZy1yZXBsYWNlLTItZXhwZWN0ZWQu
dHh0OgorICAgICAgICAgICAgLSBBZGRlZCB0ZXN0cyBmb3IgdXBkYXRlIGNvcnJlY3QgbGFzdElu
ZGV4IGhhbmRsaW5nLgorCiAyMDEyLTAzLTA4ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNv
bT4KIAogICAgICAgICBOVUxMIHJlbmRlcmVyIHBvc3NpYmxlIGluIFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OnNldENhblJlY2VpdmVEcm9wcGVkRmlsZXMoKQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9qcy9zdHJpbmctbWF0Y2gtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvanMvc3RyaW5nLW1hdGNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvanMvc3RyaW5nLW1hdGNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNyBAQAorU3RyaW5nLm1hdGNoKOKApikgdGVzdAorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyB0ZXN0TWF0Y2goL3gvZywgZmFsc2UpIGlzIFsieCIsIngi
XQorUEFTUyB0ZXN0TWF0Y2goL3gvZywgdHJ1ZSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
QXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4uCitQQVNTIHRlc3RNYXRj
aCgveC8sIGZhbHNlKSBpcyBbIngiXQorUEFTUyB0ZXN0TWF0Y2goL3gvLCB0cnVlKSBpcyBbIngi
XQorUEFTUyB0ZXN0TWF0Y2goL3gvZywgZmFsc2UpOyByZS5sYXN0SW5kZXggaXMgMAorUEFTUyB0
ZXN0TWF0Y2goL3gvZywgdHJ1ZSk7IHJlLmxhc3RJbmRleCB0aHJldyBleGNlcHRpb24gVHlwZUVy
cm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5Li4KK1BBU1MgdGVz
dE1hdGNoKC94LywgZmFsc2UpOyByZS5sYXN0SW5kZXggaXMgMworUEFTUyB0ZXN0TWF0Y2goL3gv
LCB0cnVlKTsgcmUubGFzdEluZGV4IGlzIDMKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3N0cmluZy1t
YXRjaC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc3RyaW5nLW1hdGNo
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3N0cmluZy1tYXRjaC5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSJzY3JpcHQtdGVzdHMvc3RyaW5nLW1hdGNoLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc3RyaW5nLXJlcGxhY2UtMi1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zdHJpbmctcmVwbGFjZS0yLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMTEwMDI0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zdHJp
bmctcmVwbGFjZS0yLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTIsNiArMTIsMzIg
QEAgUEFTUyB0ZXN0U3RyaW5nLnJlcGxhY2UoLyhbYWVpb3VdKShbYS16XQogUEFTUyB0ZXN0U3Ry
aW5nLnJlcGxhY2UoLyguKikvZywgZnVuY3Rpb24gcmVwbGFjZVdpdGhEb2xsYXJzKG1hdGNoR3Jv
dXApIHsgcmV0dXJuICckMSc7IH0pIGlzICIkMSQxIgogUEFTUyB0ZXN0U3RyaW5nLnJlcGxhY2Uo
LyguKSguKikvZywgZnVuY3Rpb24gcmVwbGFjZVdpdGhNdWx0aXBsZURvbGxhcnMobWF0Y2hHcm91
cCkgeyByZXR1cm4gJyQxJDInOyB9KSBpcyAiJDEkMiIKIFBBU1MgdGVzdFN0cmluZy5yZXBsYWNl
KC8oLikoLiopLywgZnVuY3Rpb24gY2hlY2tSZXBsYWNlbWVudEFyZ3VtZW50cygpIHsgcmV0dXJu
IGFyZ3VtZW50cy5sZW5ndGg7IH0pIGlzICI1IgorUEFTUyB0ZXN0UmVwbGFjZSgveC9nLCBmYWxz
ZSkgaXMgIjB5MXkyIgorUEFTUyB0ZXN0UmVwbGFjZSgveC9nLCB0cnVlKSB0aHJldyBleGNlcHRp
b24gVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5Li4K
K1BBU1MgdGVzdFJlcGxhY2UoL3gvLCBmYWxzZSkgaXMgIjB5MXgyIgorUEFTUyB0ZXN0UmVwbGFj
ZSgveC8sIHRydWUpIGlzICIweTF4MiIKK1BBU1MgdGVzdFJlcGxhY2UoL3gvZywgZmFsc2UpOyBy
ZS5sYXN0SW5kZXggaXMgMAorUEFTUyB0ZXN0UmVwbGFjZSgveC9nLCB0cnVlKTsgcmUubGFzdElu
ZGV4IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVh
ZG9ubHkgcHJvcGVydHkuLgorUEFTUyB0ZXN0UmVwbGFjZSgveC8sIGZhbHNlKTsgcmUubGFzdElu
ZGV4IGlzIDMKK1BBU1MgdGVzdFJlcGxhY2UoL3gvLCB0cnVlKTsgcmUubGFzdEluZGV4IGlzIDMK
K1BBU1MgdGVzdFJlcGxhY2UoL3gvZywgZmFsc2UpIGlzICIweTF5MiIKK1BBU1MgdGVzdFJlcGxh
Y2UoL3gvZywgdHJ1ZSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFz
c2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4uCitQQVNTIHRlc3RSZXBsYWNlKC94LywgZmFsc2Up
IGlzICIweTF4MiIKK1BBU1MgdGVzdFJlcGxhY2UoL3gvLCB0cnVlKSBpcyAiMHkxeDIiCitQQVNT
IHRlc3RSZXBsYWNlKC94L2csIGZhbHNlKTsgcmUubGFzdEluZGV4IGlzIDAKK1BBU1MgdGVzdFJl
cGxhY2UoL3gvZywgdHJ1ZSk7IHJlLmxhc3RJbmRleCB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5Li4KK1BBU1MgdGVzdFJl
cGxhY2UoL3gvLCBmYWxzZSk7IHJlLmxhc3RJbmRleCBpcyAzCitQQVNTIHRlc3RSZXBsYWNlKC94
LywgdHJ1ZSk7IHJlLmxhc3RJbmRleCBpcyAzCitQQVNTIHRlc3RSZXBsYWNlKC94L2csIGZhbHNl
KSBpcyAiMDExMjIiCitQQVNTIHRlc3RSZXBsYWNlKC94L2csIHRydWUpIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuLgor
UEFTUyB0ZXN0UmVwbGFjZSgveC8sIGZhbHNlKSBpcyAiMDQxeDIiCitQQVNTIHRlc3RSZXBsYWNl
KC94LywgdHJ1ZSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2ln
biB0byByZWFkb25seSBwcm9wZXJ0eS4uCitQQVNTIHRlc3RSZXBsYWNlKC94L2csIGZhbHNlKTsg
cmUubGFzdEluZGV4IGlzIDIKK1BBU1MgdGVzdFJlcGxhY2UoL3gvZywgdHJ1ZSk7IHJlLmxhc3RJ
bmRleCB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJl
YWRvbmx5IHByb3BlcnR5Li4KK1BBU1MgdGVzdFJlcGxhY2UoL3gvLCBmYWxzZSk7IHJlLmxhc3RJ
bmRleCBpcyA0CitQQVNTIHRlc3RSZXBsYWNlKC94LywgdHJ1ZSk7IHJlLmxhc3RJbmRleCB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHBy
b3BlcnR5Li4KK1BBU1MgdHJ5IHsgdGVzdFJlcGxhY2UoL3gvZywgZmFsc2UpOyB0aHJvdyAwOyB9
IGNhdGNoIChlKSB7IH07IHJlcGxhY2VyQ2FsbGVkOyBpcyB0cnVlCitQQVNTIHRyeSB7IHRlc3RS
ZXBsYWNlKC94L2csIHRydWUpOyB0aHJvdyAwOyB9IGNhdGNoIChlKSB7IH07IHJlcGxhY2VyQ2Fs
bGVkOyBpcyBmYWxzZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENP
TVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9zdHJpbmctbWF0
Y2guanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvc3Ry
aW5nLW1hdGNoLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQt
dGVzdHMvc3RyaW5nLW1hdGNoLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACitkZXNj
cmlwdGlvbigKKyJTdHJpbmcubWF0Y2goJmhlbGxpcDspIHRlc3QiCispOworCisvLyBtYXRjaCB3
aXRoIGEgZ2xvYmFsIHJlZ2V4cCBzaG91bGQgc2V0IGxhc3RJbmRleCB0byB6ZXJvOyBpZiByZWFk
LW9ubHkgdGhpcyBzaG91bGQgdGhyb3cuCisvLyBJZiB0aGUgcmVnZXhwIGlzIG5vdCBnbG9iYWws
IGxhc3RJbmRleCBpcyBub3QgbW9kaWZpZWQuCit2YXIgcmU7CitmdW5jdGlvbiB0ZXN0TWF0Y2go
X3JlLCByZWFkb25seSkKK3sKKyAgICByZSA9IF9yZTsKKyAgICByZS5sYXN0SW5kZXggPSAzOwor
ICAgIGlmIChyZWFkb25seSkKKyAgICAgICAgcmUgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkocmUs
ICdsYXN0SW5kZXgnLCB7d3JpdGFibGU6ZmFsc2V9KTsKKyAgICByZXR1cm4gJzB4MXgyJy5tYXRj
aChyZSk7Cit9CisKK3Nob3VsZEJlKCJ0ZXN0TWF0Y2goL3gvZywgZmFsc2UpIiwgJ1sieCIsIngi
XScpOworc2hvdWxkVGhyb3coInRlc3RNYXRjaCgveC9nLCB0cnVlKSIpOworc2hvdWxkQmUoInRl
c3RNYXRjaCgveC8sIGZhbHNlKSIsICdbIngiXScpOworc2hvdWxkQmUoInRlc3RNYXRjaCgveC8s
IHRydWUpIiwgJ1sieCJdJyk7CitzaG91bGRCZSgidGVzdE1hdGNoKC94L2csIGZhbHNlKTsgcmUu
bGFzdEluZGV4IiwgJzAnKTsKK3Nob3VsZFRocm93KCJ0ZXN0TWF0Y2goL3gvZywgdHJ1ZSk7IHJl
Lmxhc3RJbmRleCIpOworc2hvdWxkQmUoInRlc3RNYXRjaCgveC8sIGZhbHNlKTsgcmUubGFzdElu
ZGV4IiwgJzMnKTsKK3Nob3VsZEJlKCJ0ZXN0TWF0Y2goL3gvLCB0cnVlKTsgcmUubGFzdEluZGV4
IiwgJzMnKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL3N0cmluZy1y
ZXBsYWNlLTIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVz
dHMvc3RyaW5nLXJlcGxhY2UtMi5qcwkocmV2aXNpb24gMTEwMDI0KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9qcy9zY3JpcHQtdGVzdHMvc3RyaW5nLXJlcGxhY2UtMi5qcwkod29ya2luZyBjb3B5KQpA
QCAtMTgsMyArMTgsNTMgQEAgc2hvdWxkQmUoInRlc3RTdHJpbmcucmVwbGFjZSgvKFthZWlvdV0p
KAogc2hvdWxkQmUoInRlc3RTdHJpbmcucmVwbGFjZSgvKC4qKS9nLCBmdW5jdGlvbiByZXBsYWNl
V2l0aERvbGxhcnMobWF0Y2hHcm91cCkgeyByZXR1cm4gJyQxJzsgfSkiLCAiXCIkMSQxXCIiKTsK
IHNob3VsZEJlKCJ0ZXN0U3RyaW5nLnJlcGxhY2UoLyguKSguKikvZywgZnVuY3Rpb24gcmVwbGFj
ZVdpdGhNdWx0aXBsZURvbGxhcnMobWF0Y2hHcm91cCkgeyByZXR1cm4gJyQxJDInOyB9KSIsICJc
IiQxJDJcIiIpOwogc2hvdWxkQmUoInRlc3RTdHJpbmcucmVwbGFjZSgvKC4pKC4qKS8sIGZ1bmN0
aW9uIGNoZWNrUmVwbGFjZW1lbnRBcmd1bWVudHMoKSB7IHJldHVybiBhcmd1bWVudHMubGVuZ3Ro
OyB9KSIsICJcIjVcIiIpOworCisvLyByZXBsYWNlIHdpdGggYSBnbG9iYWwgcmVnZXhwIHNob3Vs
ZCBzZXQgbGFzdEluZGV4IHRvIHplcm87IGlmIHJlYWQtb25seSB0aGlzIHNob3VsZCB0aHJvdy4K
Ky8vIElmIHRoZSByZWdleHAgaXMgbm90IGdsb2JhbCwgbGFzdEluZGV4IGlzIG5vdCBtb2RpZmll
ZC4KK3ZhciByZTsKK3ZhciByZXBsYWNlcjsKK2Z1bmN0aW9uIHRlc3RSZXBsYWNlKF9yZSwgcmVh
ZG9ubHkpCit7CisgICAgcmUgPSBfcmU7CisgICAgcmUubGFzdEluZGV4ID0gMzsKKyAgICBpZiAo
cmVhZG9ubHkpCisgICAgICAgIHJlID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlLCAnbGFzdElu
ZGV4Jywge3dyaXRhYmxlOmZhbHNlfSk7CisgICAgcmV0dXJuICcweDF4MicucmVwbGFjZShyZSwg
cmVwbGFjZXIpOworfQorCityZXBsYWNlciA9ICd5JzsKK3Nob3VsZEJlKCJ0ZXN0UmVwbGFjZSgv
eC9nLCBmYWxzZSkiLCAnIjB5MXkyIicpOworc2hvdWxkVGhyb3coInRlc3RSZXBsYWNlKC94L2cs
IHRydWUpIik7CitzaG91bGRCZSgidGVzdFJlcGxhY2UoL3gvLCBmYWxzZSkiLCAnIjB5MXgyIicp
Oworc2hvdWxkQmUoInRlc3RSZXBsYWNlKC94LywgdHJ1ZSkiLCAnIjB5MXgyIicpOworc2hvdWxk
QmUoInRlc3RSZXBsYWNlKC94L2csIGZhbHNlKTsgcmUubGFzdEluZGV4IiwgJzAnKTsKK3Nob3Vs
ZFRocm93KCJ0ZXN0UmVwbGFjZSgveC9nLCB0cnVlKTsgcmUubGFzdEluZGV4Iik7CitzaG91bGRC
ZSgidGVzdFJlcGxhY2UoL3gvLCBmYWxzZSk7IHJlLmxhc3RJbmRleCIsICczJyk7CitzaG91bGRC
ZSgidGVzdFJlcGxhY2UoL3gvLCB0cnVlKTsgcmUubGFzdEluZGV4IiwgJzMnKTsKKworcmVwbGFj
ZXIgPSBmdW5jdGlvbigpIHsgcmV0dXJuICd5JzsgfTsKK3Nob3VsZEJlKCJ0ZXN0UmVwbGFjZSgv
eC9nLCBmYWxzZSkiLCAnIjB5MXkyIicpOworc2hvdWxkVGhyb3coInRlc3RSZXBsYWNlKC94L2cs
IHRydWUpIik7CitzaG91bGRCZSgidGVzdFJlcGxhY2UoL3gvLCBmYWxzZSkiLCAnIjB5MXgyIicp
Oworc2hvdWxkQmUoInRlc3RSZXBsYWNlKC94LywgdHJ1ZSkiLCAnIjB5MXgyIicpOworc2hvdWxk
QmUoInRlc3RSZXBsYWNlKC94L2csIGZhbHNlKTsgcmUubGFzdEluZGV4IiwgJzAnKTsKK3Nob3Vs
ZFRocm93KCJ0ZXN0UmVwbGFjZSgveC9nLCB0cnVlKTsgcmUubGFzdEluZGV4Iik7CitzaG91bGRC
ZSgidGVzdFJlcGxhY2UoL3gvLCBmYWxzZSk7IHJlLmxhc3RJbmRleCIsICczJyk7CitzaG91bGRC
ZSgidGVzdFJlcGxhY2UoL3gvLCB0cnVlKTsgcmUubGFzdEluZGV4IiwgJzMnKTsKKworcmVwbGFj
ZXIgPSBmdW5jdGlvbigpIHsgInVzZSBzdHJpY3QiOyByZXR1cm4gKytyZS5sYXN0SW5kZXg7IH07
CitzaG91bGRCZSgidGVzdFJlcGxhY2UoL3gvZywgZmFsc2UpIiwgJyIwMTEyMiInKTsKK3Nob3Vs
ZFRocm93KCJ0ZXN0UmVwbGFjZSgveC9nLCB0cnVlKSIpOworc2hvdWxkQmUoInRlc3RSZXBsYWNl
KC94LywgZmFsc2UpIiwgJyIwNDF4MiInKTsKK3Nob3VsZFRocm93KCJ0ZXN0UmVwbGFjZSgveC8s
IHRydWUpIik7CitzaG91bGRCZSgidGVzdFJlcGxhY2UoL3gvZywgZmFsc2UpOyByZS5sYXN0SW5k
ZXgiLCAnMicpOworc2hvdWxkVGhyb3coInRlc3RSZXBsYWNlKC94L2csIHRydWUpOyByZS5sYXN0
SW5kZXgiKTsKK3Nob3VsZEJlKCJ0ZXN0UmVwbGFjZSgveC8sIGZhbHNlKTsgcmUubGFzdEluZGV4
IiwgJzQnKTsKK3Nob3VsZFRocm93KCJ0ZXN0UmVwbGFjZSgveC8sIHRydWUpOyByZS5sYXN0SW5k
ZXgiKTsKKwordmFyIHJlcGxhY2VyQ2FsbGVkID0gZmFsc2U7CityZXBsYWNlciA9IGZ1bmN0aW9u
KCkgeyByZXBsYWNlckNhbGxlZCA9IHRydWU7IH07CitzaG91bGRCZVRydWUoInRyeSB7IHRlc3RS
ZXBsYWNlKC94L2csIGZhbHNlKTsgdGhyb3cgMDsgfSBjYXRjaCAoZSkgeyB9OyByZXBsYWNlckNh
bGxlZDsiKTsKK3ZhciByZXBsYWNlckNhbGxlZCA9IGZhbHNlOworcmVwbGFjZXIgPSBmdW5jdGlv
bigpIHsgcmVwbGFjZXJDYWxsZWQgPSB0cnVlOyB9Oworc2hvdWxkQmVGYWxzZSgidHJ5IHsgdGVz
dFJlcGxhY2UoL3gvZywgdHJ1ZSk7IHRocm93IDA7IH0gY2F0Y2ggKGUpIHsgfTsgcmVwbGFjZXJD
YWxsZWQ7Iik7Cg==
</data>
<flag name="review"
          id="134094"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>