<?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>16696</bug_id>
          
          <creation_ts>2008-01-01 01:46:04 -0800</creation_ts>
          <short_desc>JSCRE fails fails to match Acid3 regexp</short_desc>
          <delta_ts>2008-01-02 22:59:04 -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>All</rep_platform>
          <op_sys>All</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="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>ian</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>65884</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-01 01:46:04 -0800</bug_when>
    <thetext>JSCRE fails fails to match Acid3 regexp

This is the assert we fail:
assert(x == 4, &quot;/(\\3)(\\1)(a)/ failed to match &apos;cat&apos;&quot;);

I&apos;m really not sure why that assert is valid in the first place.

    function () {
      // test 86: Regular Expressions
      var ok = true;
      try {
        eval(&quot;/TA[])]/.exec(&apos;TA]&apos;)&quot;);
        // JS regexps aren&apos;t like Perl regexps, if their character
        // classes start with a ] that means they&apos;re empty. So this
        // is a syntax error; if we get here it&apos;s a bug.
        ok = false;
      } catch (e) { }
      assert(ok, &quot;orphaned bracket not considered parse error in regular expression literal&quot;);
      try {
        if (eval(&quot;/[]/.exec(&apos;&apos;)&quot;))
          ok = false;
      } catch (e) {
        ok = false;
      }
      assert(ok, &quot;/[]/ either failed to parse or matched something&quot;);
      var x = /(\3)(\1)(a)/.exec(&apos;cat&apos;);
      assert(x == 4, &quot;/(\\3)(\\1)(a)/ failed to match &apos;cat&apos;&quot;);
      assert(x.length == 4, &quot;/(\\3)(\\1)(a)/ failed to return four components&quot;);
      assert(x[0] == &quot;a&quot;, &quot;/(\\3)(\\1)(a)/ failed to find &apos;a&apos; in &apos;cat&apos;&quot;);
      assert(x[1] == &quot;&quot;, &quot;/(\\3)(\\1)(a)/ failed to find &apos;&apos; in &apos;cat&apos; as first part&quot;);
      assert(x[2] == &quot;&quot;, &quot;/(\\3)(\\1)(a)/ failed to find &apos;&apos; in &apos;cat&apos; as second part&quot;);
      assert(x[3] == &quot;a&quot;, &quot;/(\\3)(\\1)(a)/ failed to find &apos;a&apos; in &apos;cat&apos; as third part&quot;);
      return 6;
    },</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65902</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-01 09:49:33 -0800</bug_when>
    <thetext>There may be a problem with the test here; it looks to me like that expression requires three &quot;a&quot; characters in a row, so the test string would need to be &quot;caaat&quot;.

But also, our regular expression engine has a bug (and IE shares the bug, which is one reason I didn&apos;t fix it), where we don&apos;t recognize the \3 as a backreference because it&apos;s a forward reference. At the time we process it we don&apos;t know that there are 3 capturing brackets in the expression, so we treat it as an octal escape. To fix that we&apos;ll need to scan the regular expression for the number of brackets first before we do other computations on it. A simpler test case is just:

    /\1(a)/.exec(&apos;aa&apos;)

Which will return null in Safari, but should return &quot;a,a&quot;.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65910</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-01 11:11:37 -0800</bug_when>
    <thetext>CCing Ian just to make sure he sees this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65935</commentid>
    <comment_count>3</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2008-01-01 14:29:46 -0800</bug_when>
    <thetext>Forward references to capture brackets that haven&apos;t been seen yet, in ES4, are defined to always match the empty string. So this:
   /a(\2)(x)a/
...matches only &quot;axa&quot;, not &quot;axxa&quot;, and on a positive match always returns [&apos;axa&apos;, &apos;&apos;, &apos;x&apos;, &apos;a&apos;].

FWIW, ES4 regexps are not Perl-compatible in this and many other edge cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65939</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-01 14:43:55 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Forward references to capture brackets that haven&apos;t been seen yet, in ES4, are defined to always match the empty string. So this:
&gt;    /a(\2)(x)a/
&gt; ...matches only &quot;axa&quot;, not &quot;axxa&quot;, and on a positive match always returns
&gt; [&apos;axa&apos;, &apos;&apos;, &apos;x&apos;, &apos;a&apos;].

OK, I see.

I believe I made a fix to our code to handle that correctly a while back.

Then I guess it&apos;s just the issue that our regular expression code doesn&apos;t recognize the forward reference as a capture at all, because of the quirk of treating them as octal escapes if they are higher than the number of capturing brackets. And the fact that the number of capturing brackets is based on the point in the parsing that we&apos;re at. I think a fix requires another pass over the regular expression to count the capturing brackets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65945</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-01 15:07:14 -0800</bug_when>
    <thetext>The specific supporting text according to Hixie:

http://bclary.com/2004/11/07/#a-15.10.2.9
Step 8. sub-steps 2-3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65948</commentid>
    <comment_count>6</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2008-01-01 15:16:27 -0800</bug_when>
    <thetext>Er, I meant ES3.

DecimalEscape in regexps (\0 to \9) are only ever backreferences in ES3. However, you still to raise a SyntaxError exception if the digit exceeds the number of captures in the regexp. But I suppose you don&apos;t need a second pass for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66005</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-01 23:25:20 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; DecimalEscape in regexps (\0 to \9) are only ever backreferences in ES3.

That&apos;s true. The ES3 B.1.2 appendix only lists octal escape sequences as an extension for string literals, not regular expressions.

But both Gecko and IE support octal escape sequences as well as backreferences, and I believe they use the number of capturing parentheses in the expression as a cut-off.

For example, try this expression:

    /\1/.exec(String.fromCharCode(1)).toString().charCodeAt(0)

In Gecko this returns the value &quot;1&quot;.

&gt; However, you still to raise a SyntaxError exception if the digit exceeds the
&gt; number of captures in the regexp. But I suppose you don&apos;t need a second pass
&gt; for that.

I suspect the octal escape sequences are used in real-life web pages. So I do think I need an extra pass over the regular expression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66006</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-01 23:28:20 -0800</bug_when>
    <thetext>Maciej, Geoff, this is a flaw in ECMAScript that we should get fixed for version 4. It doesn&apos;t specify the octal escape sequences for regular expressions, only string literals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66007</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-01 23:51:33 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt;       assert(x == 4, &quot;/(\\3)(\\1)(a)/ failed to match &apos;cat&apos;&quot;);

I don&apos;t understand how this could be right. The value of x is an array, not the number 4.

&gt;       assert(x.length == 4, &quot;/(\\3)(\\1)(a)/ failed to return four components&quot;);
&gt;       assert(x[0] == &quot;a&quot;, &quot;/(\\3)(\\1)(a)/ failed to find &apos;a&apos; in &apos;cat&apos;&quot;);
&gt;       assert(x[1] == &quot;&quot;, &quot;/(\\3)(\\1)(a)/ failed to find &apos;&apos; in &apos;cat&apos; as first part&quot;);
&gt;       assert(x[2] == &quot;&quot;, &quot;/(\\3)(\\1)(a)/ failed to find &apos;&apos; in &apos;cat&apos; as second part&quot;);
&gt;       assert(x[3] == &quot;a&quot;, &quot;/(\\3)(\\1)(a)/ failed to find &apos;a&apos; in &apos;cat&apos; as third part&quot;);

We seem to pass all of these. I suspect this is just a mistake in the test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66008</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-02 00:10:45 -0800</bug_when>
    <thetext>We were passing all of this in Safari 3, but now it is broken. Patch on its way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66009</commentid>
    <comment_count>11</comment_count>
      <attachid>18235</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-02 00:27:47 -0800</bug_when>
    <thetext>Created attachment 18235
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66072</commentid>
    <comment_count>12</comment_count>
      <attachid>18235</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-01-02 15:28:38 -0800</bug_when>
    <thetext>Comment on attachment 18235
patch

r=me

I wish the PCRE tests in fast/regexp were somehow separate from the rest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66102</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-02 22:59:04 -0800</bug_when>
    <thetext>Committed revision 29110.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18235</attachid>
            <date>2008-01-02 00:27:47 -0800</date>
            <delta_ts>2008-01-02 15:28:38 -0800</delta_ts>
            <desc>patch</desc>
            <filename>NumCapturesPatch.txt</filename>
            <type>text/plain</type>
            <size>11574</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5MDc4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDgtMDEtMDIgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gZml4IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2Njk2CisgICAgICAgICAgSlNDUkUgZmFpbHMgZmFpbHMgdG8gbWF0Y2ggQWNpZDMgcmVn
ZXhwCisKKyAgICAgICAgVGVzdDogZmFzdC9yZWdleC9lYXJseS1hY2lkMy04Ni5odG1sCisKKyAg
ICAgICAgVGhlIHByb2JsZW0gd2FzIHdpdGggdGhlIGN1dG9mZiBwb2ludCBiZXR3ZWVuIGJhY2ty
ZWZlcmVuY2VzIGFuZCBvY3RhbAorICAgICAgICBlc2NhcGUgc2VxdWVuY2VzLiBXZSBuZWVkIHRv
IGRldGVybWluZSB0aGUgY3V0b2ZmIHBvaW50IGJ5IGNvdW50aW5nIHRoZQorICAgICAgICB0b3Rh
bCBudW1iZXIgb2YgY2FwdHVyaW5nIGJyYWNrZXRzLCB3aGljaCByZXF1aXJlcyBhbiBleHRyYSBw
YXNzIHRocm91Z2gKKyAgICAgICAgdGhlIGV4cHJlc3Npb24gd2hlbiBjb21waWxpbmcgaXQuCisK
KyAgICAgICAgKiBwY3JlL3BjcmVfY29tcGlsZS5jcHA6CisgICAgICAgIChDb21waWxlRGF0YTo6
Q29tcGlsZURhdGEpOiBBZGRlZCBudW1DYXB0dXJpbmdCcmFja2V0cy4gUmVtb3ZlZCBzb21lCisg
ICAgICAgIHVudXNlZCBmaWVsZHMuCisgICAgICAgIChjb21waWxlQnJhbmNoKTogVXNlIG51bUNh
cHR1cmluZ0JyYWNrZXRzIHdoZW4gY2FsbGluZyBjaGVja0VzY2FwZS4KKyAgICAgICAgKGNhbGN1
bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0aCk6IFVzZSBudW1DYXB0dXJpbmdCcmFja2V0cyB3aGVu
IGNhbGxpbmcKKyAgICAgICAgY2hlY2tFc2NhcGUsIGFuZCBhbHNvIHN0b3JlIHRoZSBicmFja2V0
IGNvdW50IGF0IHRoZSBlbmQgb2YgdGhlIGNvbXBpbGUuCisgICAgICAgIChqc1JlZ0V4cENvbXBp
bGUpOiBDYWxsIGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0aCB0d2ljZSAtLSBvbmNlIHRv
CisgICAgICAgIGNvdW50IHRoZSBudW1iZXIgb2YgYnJhY2tldHMgYW5kIHRoZW4gYSBzZWNvbmQg
dGltZSB0byBjYWxjdWxhdGUgdGhlIGxlbmd0aC4KKwogMjAwOC0wMS0wMSAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYy4KSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9jb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9wY3JlL3BjcmVfY29tcGlsZS5jcHAJKHJldmlzaW9uIDI5MDc3KQorKysgSmF2YVNj
cmlwdENvcmUvcGNyZS9wY3JlX2NvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsMTkg
KzEzNSwxNyBAQCBkb2luZyB0aGUgY29tcGlsaW5nLiAqLwogCiBzdHJ1Y3QgQ29tcGlsZURhdGEg
ewogICAgIENvbXBpbGVEYXRhKCkgewotICAgICAgICBzdGFydF9jb2RlID0gMDsKLSAgICAgICAg
c3RhcnRfcGF0dGVybiA9IDA7CiAgICAgICAgIHRvcF9iYWNrcmVmID0gMDsKICAgICAgICAgYmFj
a3JlZk1hcCA9IDA7CiAgICAgICAgIHJlcV92YXJ5b3B0ID0gMDsKICAgICAgICAgbmVlZE91dGVy
QnJhY2tldCA9IGZhbHNlOworICAgICAgICBudW1DYXB0dXJpbmdCcmFja2V0cyA9IDA7CiAgICAg
fQotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHN0YXJ0X2NvZGU7ICAgLyogVGhlIHN0YXJ0IG9m
IHRoZSBjb21waWxlZCBjb2RlICovCi0gICAgY29uc3QgVUNoYXIqIHN0YXJ0X3BhdHRlcm47IC8q
IFRoZSBzdGFydCBvZiB0aGUgcGF0dGVybiAqLwogICAgIGludCB0b3BfYmFja3JlZjsgICAgICAg
ICAgICAvKiBNYXhpbXVtIGJhY2sgcmVmZXJlbmNlICovCiAgICAgdW5zaWduZWQgYmFja3JlZk1h
cDsgICAgICAgLyogQml0bWFwIG9mIGxvdyBiYWNrIHJlZnMgKi8KICAgICBpbnQgcmVxX3Zhcnlv
cHQ7ICAgICAgICAgICAgLyogIkFmdGVyIHZhcmlhYmxlIGl0ZW0iIGZsYWcgZm9yIHJlcWJ5dGUg
Ki8KICAgICBib29sIG5lZWRPdXRlckJyYWNrZXQ7CisgICAgaW50IG51bUNhcHR1cmluZ0JyYWNr
ZXRzOwogfTsKIAogLyogRGVmaW5pdGlvbnMgdG8gYWxsb3cgbXV0dWFsIHJlY3Vyc2lvbiAqLwpA
QCAtNzI5LDcgKzcyNyw3IEBAIGNvbXBpbGVCcmFuY2goaW50IG9wdGlvbnMsIGludCogYnJhY2tl
dHMKICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciBpbiB0aGVtLCBzbyBzZXQgY2xhc3Nf
Y2hhcmNvdW50IGJpZ2dlciB0aGFuIG9uZS4gKi8KICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIGlmIChjID09ICdcXCcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGMgPSBjaGVja0VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCBlcnJvcmNvZGVwdHIsICpicmFja2V0
cywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjID0gY2hlY2tFc2NhcGUoJnB0ciwg
cGF0dGVybkVuZCwgZXJyb3Jjb2RlcHRyLCBjZC5udW1DYXB0dXJpbmdCcmFja2V0cywgdHJ1ZSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA8IDApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGFzc19jaGFyY291bnQgKz0gMjsgICAgIC8qIEdyZWF0ZXIgdGhhbiAxIGlz
IHdoYXQgbWF0dGVycyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoLWMp
IHsKQEAgLTc5Niw3ICs3OTQsNyBAQCBjb21waWxlQnJhbmNoKGludCBvcHRpb25zLCBpbnQqIGJy
YWNrZXRzCiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChkID09ICdcXCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hh
ciogb2xkcHRyID0gcHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBjaGVja0Vz
Y2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCBlcnJvcmNvZGVwdHIsICpicmFja2V0cywgdHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGNoZWNrRXNjYXBlKCZwdHIsIHBhdHRlcm5F
bmQsIGVycm9yY29kZXB0ciwgY2QubnVtQ2FwdHVyaW5nQnJhY2tldHMsIHRydWUpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxY
IGlzIGxpdGVyYWwgWDsgYW55IG90aGVyIHNwZWNpYWwgbWVhbnMgdGhlICctJyB3YXMgbGl0ZXJh
bCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkIDwgMCkgewpAQCAtMTU2NCw3
ICsxNTYyLDcgQEAgY29tcGlsZUJyYW5jaChpbnQgb3B0aW9ucywgaW50KiBicmFja2V0cwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSAnXFwnOgogICAgICAgICAgICAgICAgIHRl
bXBwdHIgPSBwdHI7Ci0gICAgICAgICAgICAgICAgYyA9IGNoZWNrRXNjYXBlKCZwdHIsIHBhdHRl
cm5FbmQsIGVycm9yY29kZXB0ciwgKmJyYWNrZXRzLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
YyA9IGNoZWNrRXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsIGVycm9yY29kZXB0ciwgY2QubnVtQ2Fw
dHVyaW5nQnJhY2tldHMsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAvKiBIYW5kbGUgbWV0YWNoYXJhY3RlcnMgaW50cm9kdWNlZCBieSBcLiBGb3Igb25lcyBsaWtl
IFxkLCB0aGUgRVNDXyB2YWx1ZXMKICAgICAgICAgICAgICAgICAgYXJlIGFycmFuZ2VkIHRvIGJl
IHRoZSBuZWdhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBPUF92YWx1ZXMuIEZvciB0aGUKQEAg
LTE5ODcsMTUgKzE5ODUsMTIgQEAgc3RhdGljIGludCBicmFja2V0RmluZEZpcnN0QXNzZXJ0ZWRD
aGFyYQogICAgIHJldHVybiBjOwogfQogCi1zdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0
dGVybkxlbmd0aEFuZEZsYWdzKGNvbnN0IFVDaGFyKiBwYXR0ZXJuLCBpbnQgcGF0dGVybkxlbmd0
aCwgSlNSZWdFeHBJZ25vcmVDYXNlT3B0aW9uIGlnbm9yZUNhc2UsCitzdGF0aWMgaW50IGNhbGN1
bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0aChjb25zdCBVQ2hhciogcGF0dGVybiwgaW50IHBhdHRl
cm5MZW5ndGgsIEpTUmVnRXhwSWdub3JlQ2FzZU9wdGlvbiBpZ25vcmVDYXNlLAogICAgIENvbXBp
bGVEYXRhJiBjZCwgRXJyb3JDb2RlJiBlcnJvcmNvZGUpCiB7CiAgICAgLyogTWFrZSBhIHBhc3Mg
b3ZlciB0aGUgcGF0dGVybiB0byBjb21wdXRlIHRoZQogICAgICBhbW91bnQgb2Ygc3RvcmUgcmVx
dWlyZWQgdG8gaG9sZCB0aGUgY29tcGlsZWQgY29kZS4gVGhpcyBkb2VzIG5vdCBoYXZlIHRvIGJl
Ci0gICAgIHBlcmZlY3QgYXMgbG9uZyBhcyBlcnJvcnMgYXJlIG92ZXJlc3RpbWF0ZXMuIEF0IHRo
ZSBzYW1lIHRpbWUgd2UgY2FuIGRldGVjdCBhbnkKLSAgICAgZmxhZyBzZXR0aW5ncyByaWdodCBh
dCB0aGUgc3RhcnQsIGFuZCBleHRyYWN0IHRoZW0uIE1ha2UgYW4gYXR0ZW1wdCB0byBjb3JyZWN0
Ci0gICAgIGZvciBhbnkgY291bnRlZCB3aGl0ZSBzcGFjZSBpZiBhbiAiZXh0ZW5kZWQiIGZsYWcg
c2V0dGluZyBhcHBlYXJzIGxhdGUgaW4gdGhlCi0gICAgIHBhdHRlcm4uIFdlIGNhbid0IGJlIHNv
IGNsZXZlciBmb3IgIy1jb21tZW50cy4gKi8KKyAgICAgcGVyZmVjdCBhcyBsb25nIGFzIGVycm9y
cyBhcmUgb3ZlcmVzdGltYXRlcy4gKi8KICAgICAKICAgICBpbnQgbGVuZ3RoID0gMSArIExJTktf
U0laRTsgICAgICAvKiBGb3IgaW5pdGlhbCBCUkEgcGx1cyBsZW5ndGggKi8KICAgICBpbnQgYnJh
bmNoX2V4dHJhID0gMDsKQEAgLTIwMTcsNyArMjAxMiw3IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRl
Q29tcGlsZWRQYXR0ZXJuTGVuZ3QKICAgICAgICAgICAgICBjaGFyYWN0ZXIgdHlwZS4gKi8KIAog
ICAgICAgICAgICAgY2FzZSAnXFwnOgotICAgICAgICAgICAgICAgIGMgPSBjaGVja0VzY2FwZSgm
cHRyLCBwYXR0ZXJuRW5kLCAmZXJyb3Jjb2RlLCBicmFjb3VudCwgZmFsc2UpOworICAgICAgICAg
ICAgICAgIGMgPSBjaGVja0VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCAmZXJyb3Jjb2RlLCBjZC5u
dW1DYXB0dXJpbmdCcmFja2V0cywgZmFsc2UpOwogICAgICAgICAgICAgICAgIGlmIChlcnJvcmNv
ZGUgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAg
IApAQCAtMjE1MCw3ICsyMTQ1LDcgQEAgc3RhdGljIGludCBjYWxjdWxhdGVDb21waWxlZFBhdHRl
cm5MZW5ndAogICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgZXNjYXBlcyAqLwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKCpwdHIgPT0gJ1xcJykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGNoZWNrRXNjYXBlKCZwdHIsIHBhdHRlcm5F
bmQsICZlcnJvcmNvZGUsIGJyYWNvdW50LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGMgPSBjaGVja0VzY2FwZSgmcHRyLCBwYXR0ZXJuRW5kLCAmZXJyb3Jjb2RlLCBjZC5udW1DYXB0
dXJpbmdCcmFja2V0cywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Jj
b2RlICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAg
ICAgICAgICAgICAgICAgICAgCkBAIC0yMTg1LDcgKzIxODAsNyBAQCBzdGF0aWMgaW50IGNhbGN1
bGF0ZUNvbXBpbGVkUGF0dGVybkxlbmd0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNo
YXIgY29uc3QgKmh5cHRyID0gcHRyKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHNhZmVseUNoZWNrTmV4dENoYXIocHRyLCBwYXR0ZXJuRW5kLCAnXFwnKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZCA9IGNoZWNrRXNjYXBlKCZwdHIsIHBhdHRlcm5FbmQsICZlcnJvcmNvZGUsIGJyYWNv
dW50LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGNoZWNrRXNj
YXBlKCZwdHIsIHBhdHRlcm5FbmQsICZlcnJvcmNvZGUsIGNkLm51bUNhcHR1cmluZ0JyYWNrZXRz
LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yY29kZSAh
PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI0NjgsNiArMjQ2Myw4IEBAIHN0YXRpYyBp
bnQgY2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3QKICAgICB9CiAgICAgCiAgICAgbGVuZ3Ro
ICs9IDIgKyBMSU5LX1NJWkU7ICAgIC8qIEZvciBmaW5hbCBLRVQgYW5kIEVORCAqLworCisgICAg
Y2QubnVtQ2FwdHVyaW5nQnJhY2tldHMgPSBicmFjb3VudDsKICAgICByZXR1cm4gbGVuZ3RoOwog
fQogCkBAIC0yNTEyLDcgKzI1MDksMTAgQEAgSlNSZWdFeHAqIGpzUmVnRXhwQ29tcGlsZShjb25z
dCBVQ2hhciogcAogICAgIENvbXBpbGVEYXRhIGNkOwogICAgIAogICAgIEVycm9yQ29kZSBlcnJv
cmNvZGUgPSBFUlIwOwotICAgIGludCBsZW5ndGggPSBjYWxjdWxhdGVDb21waWxlZFBhdHRlcm5M
ZW5ndGhBbmRGbGFncyhwYXR0ZXJuLCBwYXR0ZXJuTGVuZ3RoLCBpZ25vcmVDYXNlLCBjZCwgZXJy
b3Jjb2RlKTsKKyAgICAvKiBDYWxsIHRoaXMgb25jZSBqdXN0IHRvIGNvdW50IHRoZSBicmFja2V0
cy4gKi8KKyAgICBjYWxjdWxhdGVDb21waWxlZFBhdHRlcm5MZW5ndGgocGF0dGVybiwgcGF0dGVy
bkxlbmd0aCwgaWdub3JlQ2FzZSwgY2QsIGVycm9yY29kZSk7CisgICAgLyogQ2FsbCBpdCBhZ2Fp
biB0byBjb21wdXRlIHRoZSBsZW5ndGguICovCisgICAgaW50IGxlbmd0aCA9IGNhbGN1bGF0ZUNv
bXBpbGVkUGF0dGVybkxlbmd0aChwYXR0ZXJuLCBwYXR0ZXJuTGVuZ3RoLCBpZ25vcmVDYXNlLCBj
ZCwgZXJyb3Jjb2RlKTsKICAgICBpZiAoZXJyb3Jjb2RlKQogICAgICAgICByZXR1cm4gcmV0dXJu
RXJyb3IoZXJyb3Jjb2RlLCBlcnJvcnB0cik7CiAgICAgCkBAIC0yNTMxLDggKzI1MzEsNiBAQCBK
U1JlZ0V4cCoganNSZWdFeHBDb21waWxlKGNvbnN0IFVDaGFyKiBwCiAgICAgIHBhc3NlZCBhcm91
bmQgaW4gdGhlIGNvbXBpbGUgZGF0YSBibG9jay4gKi8KICAgICAKICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBjb2RlU3RhcnQgPSAoY29uc3QgdW5zaWduZWQgY2hhciopKHJlICsgMSk7Ci0gICAg
Y2Quc3RhcnRfY29kZSA9IGNvZGVTdGFydDsKLSAgICBjZC5zdGFydF9wYXR0ZXJuID0gKGNvbnN0
IFVDaGFyKilwYXR0ZXJuOwogICAgIAogICAgIC8qIFNldCB1cCBhIHN0YXJ0aW5nLCBub24tZXh0
cmFjdGluZyBicmFja2V0LCB0aGVuIGNvbXBpbGUgdGhlIGV4cHJlc3Npb24uIE9uCiAgICAgIGVy
cm9yLCBlcnJvcmNvZGUgd2lsbCBiZSBzZXQgbm9uLXplcm8sIHNvIHdlIGRvbid0IG5lZWQgdG8g
bG9vayBhdCB0aGUgcmVzdWx0CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyOTA3OCkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDA4LTAxLTAy
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIHRlc3QgZm9yIGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2Njk2CisgICAgICAgICAgSlNDUkUgZmFpbHMgZmFpbHMgdG8g
bWF0Y2ggQWNpZDMgcmVnZXhwCisKKyAgICAgICAgKiBmYXN0L3JlZ2V4L2Vhcmx5LWFjaWQzLTg2
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9yZWdleC9lYXJseS1hY2lkMy04
Ni5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3JlZ2V4L3Jlc291cmNlcy9lYXJseS1hY2lk
My04Ni5qczogQWRkZWQuCisKKyAgICAgICAgKiBmYXN0L3JlZ2V4L3Rlc3QxLWV4cGVjdGVkLnR4
dDogVXBkYXRlZCBmb3IgYSBmZXcgY2FzZXMgd2hlcmUgd2Ugbm93IGZhaWwuCisgICAgICAgIEJ1
dCB0aGVzZSAiZmFpbHVyZXMiIHJlcHJlc2VudCB1cyByZXBsYWNpbmcgUENSRSBiZWhhdmlvciB3
aXRoIHNlbWFudGljcworICAgICAgICB0aGF0IGFyZSBjb3JyZWN0IGZvciBKYXZhU2NyaXB0IHJl
Z3VsYXIgZXhwcmVzc2lvbnMuCisKIDIwMDgtMDEtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMuCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3JlZ2V4L2Vhcmx5LWFjaWQzLTg2LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3JlZ2V4L2Vhcmx5LWFjaWQzLTg2LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvcmVnZXgvZWFybHktYWNpZDMtODYtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACitUZXN0IHRoYXQgY292ZXJzIGNhcHR1cmlu
ZyBicmFja2V0cywgYW5kIHdhcyBhZGFwdGVkIGZyb20gYSBwYXJ0IG9mIGFuIGVhcmx5IHZlcnNp
b24gb2YgQWNpZDMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIC9UQVtd
KV0vLmV4ZWMoJ1RBXScpIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogSW52YWxpZCByZWd1
bGFyIGV4cHJlc3Npb246IHVubWF0Y2hlZCBwYXJlbnRoZXNlcy4KK1BBU1MgL1tdLy5leGVjKCcn
KSBpcyBudWxsCitQQVNTIC8oXDMpKFwxKShhKS8uZXhlYygnY2F0JykudG9TdHJpbmcoKSBpcyAn
YSwsLGEnCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9yZWdleC9lYXJseS1hY2lk
My04Ni1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0
aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9yZWdleC9lYXJseS1hY2lkMy04Ni5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvcmVnZXgvZWFybHktYWNpZDMtODYuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvcmVnZXgvZWFybHktYWNpZDMtODYuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9lYXJseS1hY2lkMy04Ni5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L3Jl
Z2V4L2Vhcmx5LWFjaWQzLTg2Lmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAg
ICsgdGV4dC9odG1sCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3JlZ2V4L3Rlc3QxLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3JlZ2V4L3Rlc3QxLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjkwNzcpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3Rlc3QxLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTc4NSwxMCArMTc4NSwxMCBAQCBGQUlMRUQgVE8gQ09NUElMRQogICAgIGFiYWJiYmNi
YzogUEFTUwogCiAvKChcM3xiKVwyKGEpeCkrLwotICAgIGFhYXhhYmF4YmFheGJiYXg6IFBBU1MK
KyAgICBhYWF4YWJheGJhYXhiYmF4OiBGQUlMLiBBY3R1YWwgcmVzdWx0czogImF4LGF4LCxhIgog
CiAvKChcM3xiKVwyKGEpKXsyLH0vCi0gICAgYmJhYWJhYmJhYmFhYWFhYmJhYWFhYmJhOiBGQUlM
LiBBY3R1YWwgcmVzdWx0czogIm51bGwiCisgICAgYmJhYWJhYmJhYmFhYWFhYmJhYWFhYmJhOiBG
QUlMLiBBY3R1YWwgcmVzdWx0czogImFiYmEsYmJhLGIsYSIKIAogL2FiYy9pCiAgICAgQUJDOiBQ
QVNTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3Jlc291cmNlcy9lYXJseS1hY2lkMy04
Ni5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3Jlc291cmNlcy9lYXJs
eS1hY2lkMy04Ni5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvcmVnZXgvcmVz
b3VyY2VzL2Vhcmx5LWFjaWQzLTg2LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACitk
ZXNjcmlwdGlvbigKKydUZXN0IHRoYXQgY292ZXJzIGNhcHR1cmluZyBicmFja2V0cywgYW5kIHdh
cyBhZGFwdGVkIGZyb20gYSBwYXJ0IG9mIGFuIGVhcmx5IHZlcnNpb24gb2YgQWNpZDMuJworKTsK
KworLy8gSlMgcmVnZXhwcyBhcmVuJ3QgbGlrZSBQZXJsIHJlZ2V4cHMsIGlmIHRoZWlyIGNoYXJh
Y3RlcgorLy8gY2xhc3NlcyBzdGFydCB3aXRoIGEgXSB0aGF0IG1lYW5zIHRoZXkncmUgZW1wdHku
IFNvIHRoaXMKKy8vIGlzIGEgc3ludGF4IGVycm9yOyBpZiB3ZSBnZXQgaGVyZSBpdCdzIGEgYnVn
Lgorc2hvdWxkVGhyb3coIi9UQVtdKV0vLmV4ZWMoJ1RBXScpIik7CitzaG91bGRCZSgiL1tdLy5l
eGVjKCcnKSIsICJudWxsIik7CitzaG91bGRCZSgiLyhcXDMpKFxcMSkoYSkvLmV4ZWMoJ2NhdCcp
LnRvU3RyaW5nKCkiLCAiJ2EsLCxhJyIpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsK
</data>
<flag name="review"
          id="7938"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>