<?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>170720</bug_id>
          
          <creation_ts>2017-04-11 02:12:43 -0700</creation_ts>
          <short_desc>[JSC] Date.parse should accept wider range of representation</short_desc>
          <delta_ts>2017-07-25 12:46:45 -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>JavaScriptCore</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>vitaliy.slobodin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1296322</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-11 02:12:43 -0700</bug_when>
    <thetext>Date.parse now conforms the spec. But it is a bit strict and users want to parse some more relaxed ones[1].
What we would like is adding a fallback path to try to parse it if the current Date.parse fails to parse.

[1]: https://github.com/ariya/phantomjs/issues/11151</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296988</commentid>
    <comment_count>1</comment_count>
      <attachid>306985</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-13 05:23:11 -0700</bug_when>
    <thetext>Created attachment 306985
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297043</commentid>
    <comment_count>2</comment_count>
      <attachid>306985</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-04-13 11:27:16 -0700</bug_when>
    <thetext>Comment on attachment 306985
Patch

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

&gt; Source/WTF/wtf/DateMath.cpp:897
&gt; +    std::optional&lt;int&gt; year = std::nullopt;

No need for &quot;= std::nullopt&quot;. That’s what optionals do when not specified.

&gt; Source/WTF/wtf/DateMath.cpp:1132
&gt; +        // 1. According to the V8, this default value is compatible to the old KJS. While current V8 uses 2001,
&gt; +        //    SpiderMonkey does not have such a fallback path. So this reason is not big deal.

I am a bit confused by this comment. V8 is the name of a JavaScript engine, not a person, so I don’t know what &quot;according to the V8&quot; means; maybe someone on the V8 team did some research about the behavior of older versions of WebKit? I don’t know what &quot;compatible to the old KJS&quot; means or why it’s relevant to our decision of what behavior is best. “The old KJS” seems quite unimportant; very few websites were tailored to assume the behavior of the KJS engine since it wasn’t used by all that many people. So maybe it’s simply a peculiar way to talk about older versions of WebKit and JavaScriptCore. The term “current V8” is not good since the comment is likely to last a long time and this may no longer be true in the future, so we should probably say this in a different way. Sometimes I use the phrase &quot;as of this writing&quot;. Here’s a comment I might write, but I don’t know if it’s accurate:

    // 1. Year 2000 was used in older versions of JavaScriptCore, thus some older content
    //    tested only with WebKit might rely on this behavior (according to research done by the V8 team).
    //    (As of April 2017, V8 is using the year 2001 and Spider Monkey is not doing this kind of fallback.)

But when written this way it becomes clear that it’s a little strange to rely on research done by the V8 team to know what the behavior of old versions of WebKit is. Can’t we just check this rather than relying on what they say?

Also, it would be nice to be precise rather than just &quot;older versions of JavaScriptCore&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297353</commentid>
    <comment_count>3</comment_count>
      <attachid>306985</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-14 00:56:14 -0700</bug_when>
    <thetext>Comment on attachment 306985
Patch

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

&gt;&gt; Source/WTF/wtf/DateMath.cpp:1132
&gt;&gt; +        //    SpiderMonkey does not have such a fallback path. So this reason is not big deal.
&gt; 
&gt; I am a bit confused by this comment. V8 is the name of a JavaScript engine, not a person, so I don’t know what &quot;according to the V8&quot; means; maybe someone on the V8 team did some research about the behavior of older versions of WebKit? I don’t know what &quot;compatible to the old KJS&quot; means or why it’s relevant to our decision of what behavior is best. “The old KJS” seems quite unimportant; very few websites were tailored to assume the behavior of the KJS engine since it wasn’t used by all that many people. So maybe it’s simply a peculiar way to talk about older versions of WebKit and JavaScriptCore. The term “current V8” is not good since the comment is likely to last a long time and this may no longer be true in the future, so we should probably say this in a different way. Sometimes I use the phrase &quot;as of this writing&quot;. Here’s a comment I might write, but I don’t know if it’s accurate:
&gt; 
&gt;     // 1. Year 2000 was used in older versions of JavaScriptCore, thus some older content
&gt;     //    tested only with WebKit might rely on this behavior (according to research done by the V8 team).
&gt;     //    (As of April 2017, V8 is using the year 2001 and Spider Monkey is not doing this kind of fallback.)
&gt; 
&gt; But when written this way it becomes clear that it’s a little strange to rely on research done by the V8 team to know what the behavior of old versions of WebKit is. Can’t we just check this rather than relying on what they say?
&gt; 
&gt; Also, it would be nice to be precise rather than just &quot;older versions of JavaScriptCore&quot;.

I&apos;ve dived into old logs... This function is added at r34872 and not changed so much. While year is first initialized 0 and later it will be converted to 2000, we do not produce any values without parsing year before this patch. So, users won&apos;t see 2000 default value I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297356</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-14 01:00:04 -0700</bug_when>
    <thetext>Committed r215359: &lt;http://trac.webkit.org/changeset/215359&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331829</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-07-24 18:51:07 -0700</bug_when>
    <thetext>This caused the graphs on https://www.recode.net/2017/7/18/15994992/isabel-ge-mahe-apple-china-managing-director to render incorrectly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331880</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-07-24 22:24:49 -0700</bug_when>
    <thetext>Do we know why it caused that, specifically what date strings were being passed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331924</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-25 05:04:34 -0700</bug_when>
    <thetext>Oh, that&apos;s very interesting b/c it means some libs would depend on super tricky behavior. I&apos;ll setup the environment to check what is going.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331936</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-07-25 08:35:22 -0700</bug_when>
    <thetext>I didn&apos;t have time to do any investigation other than autospading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332025</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-25 11:35:59 -0700</bug_when>
    <thetext>I&apos;ve investigated it.

## Situation

This web site passes a string like &quot;Jun. ‘15&quot; to `Date.parse`.
To make this site work correctly, we need to return NaN for this value.

This patch relaxes Date parsing, then, for the above case, we return 2000/Jun/15 Date.
This is expected behavior. As you can see the phantomjs issue in this bug, webdevs want to generate ????/Jun/15 for a string like &quot;Jun 15&quot;.

Why Chrome works fine is that it returns NaN for &quot;Jun. ‘15&quot;. But it returns 2001/Jun/15 for &quot;Jun. 15&quot;, &quot;Jun 15&quot; etc.

## In terms of the spec

ECMA262&apos;s guarantee about Date.parse is not-strict. ECMA262 requires that some descriptive format can be parsed by `Date.parse` correctly. In the case of the other values, Date.parse may either succeed or fail. It&apos;s implementation dependent heuristic. So, with regard to the spec, our current behavior is correct.
And ideally, users should not assume that the value must be rejected by Date.parse because the spec allows us to parse it with some heuristic.
But the real world is not ideal....... :(

https://tc39.github.io/ecma262/#sec-date.parse

## Possible solutions

1. Revert this patch

By reverting this patch, we return NaN for &quot;Jun. ‘15&quot;. But instead, we lose the ability to return 2001/Jun/15 for &quot;Jun. 15&quot;, &quot;Jun 15&quot; etc. which is requested in phantomjs&apos;s issue (And sometimes we see this request in twitter).

2. Add a hack for &quot;Jun. ‘15&quot; case

Add an additional heuristic for &quot;Jun. ‘15&quot; not to parse it as Date. Possible thing is that, if we see some leading text before the date (15), we do not recognize it as date. But it would break some existing heuristic.

3. Implement the heuristic completely same to the V8&apos;s one

Strictly speaking, these heuristics are not specified in the spec. So, the request in the phantomjs issue is basically saying &quot;We want to parse Date as if V8 parses it&quot;.
The simplest solution for that is importing the heuristics in V8.

4. Request the site to fix it

Ideally, anybody should not assume that Date.parse should fail with a specific format. The heuristics could recognize it.


To me, for the short term solution, (1) should be appropriate. (2) is a bit too dangerous.
For the long term solution, I think we have (1), (3), and (4).
If we do not want to relax it, (1) and leave the current heuristic as is is the solution.
If we would like to accept some form of Date which is requested in the original issue, we have (3) or (4).

If we need to fix it quickly right now, we should take (1).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332028</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-07-25 11:39:58 -0700</bug_when>
    <thetext>How do Gecko and Edge&apos;s Date parsing compare?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332030</commentid>
    <comment_count>11</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-25 11:48:39 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #10)
&gt; How do Gecko and Edge&apos;s Date parsing compare?

Because I don&apos;t have Windows machine in my office, I cannot check it in Edge right now (anyone has Edge machine?).
Firefox has different heuristic mechanism from V8.
And it returns NaN for &quot;Jun. ‘15&quot;, &quot;Jun 15&quot;, and &quot;Jun. 15&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332031</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-07-25 11:52:19 -0700</bug_when>
    <thetext>You can get an Edge VM at https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332048</commentid>
    <comment_count>13</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-25 12:46:45 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #12)
&gt; You can get an Edge VM at
&gt; https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/

Thank you! I&apos;ve just downloaded and tested.
Edge shows the same behavior to Firefox.
And it returns NaN for &quot;Jun. ‘15&quot;, &quot;Jun 15&quot;, and &quot;Jun. 15&quot;.

So, not relaxing our heuristic is one idea. Basically, phantom.js&apos;s issue is raised because it is different from V8.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306985</attachid>
            <date>2017-04-13 05:23:11 -0700</date>
            <delta_ts>2017-04-13 11:27:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170720-20170413212310.patch</filename>
            <type>text/plain</type>
            <size>8267</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MzE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDliNDFjMGI4MWQ3NmM1MWE5MzQ3NTVj
M2E3ZDQ0NThkNWY3YTJlNjAuLjliNzgxNjA5ODhhYTE5MDJkM2UyNzQ2ODg4NGU3ZjJjYWYwYWNj
NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTctMDQtMTMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW0pTQ10gRGF0ZS5wYXJzZSBzaG91bGQgYWNj
ZXB0IHdpZGVyIHJhbmdlIG9mIHJlcHJlc2VudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3MjAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSB3b3VsZCBsaWtlIHRvIHJlbGF4IERhdGUucGFy
c2UgdG8gYWNjZXB0IHRoZSByZXByZXNlbnRhdGlvbiAiTWF5IDgiLgorICAgICAgICBBdCB0aGF0
IHRpbWUsIHdlIGNob29zZSBgMjAwMGAgYXMgYSBkZWZhdWx0IHllYXIuIFRoaXMgaXMgYmVjYXVz
ZSBvZgorICAgICAgICB0aGUgZm9sbG93aW5nIHJlYXNvbi4KKworICAgICAgICAxLiBBY2NvcmRp
bmcgdG8gdGhlIFY4LCB0aGlzIGRlZmF1bHQgdmFsdWUgaXMgY29tcGF0aWJsZSB0byB0aGUgb2xk
IEtKUy4gV2hpbGUgY3VycmVudCBWOCB1c2VzIDIwMDEsCisgICAgICAgICAgIFNwaWRlck1vbmtl
eSBkb2VzIG5vdCBoYXZlIHN1Y2ggYSBmYWxsYmFjayBwYXRoLiBTbyB0aGlzIHJlYXNvbiBpcyBu
b3QgYmlnIGRlYWwuCisKKyAgICAgICAgMi4gSXQgaXMgYSBsZWFwIHllYXIuIFdoZW4gdXNpbmcg
YG5ldyBEYXRlKCJGZWIgMjkiKWAsIHdlIGFzc3VtZSB0aGF0IHBlb3BsZSB3YW50IHRvIHNhdmUg
bW9udGggYW5kIGRheS4KKyAgICAgICAgICAgTGVhcCB5ZWFyIGNhbiBzYXZlIHVzZXIgaW5wdXRz
IGlmIHRoZXkgaXMgdmFsaWQuIElmIHdlIHVzZSB0aGUgY3VycmVudCB5ZWFyIGluc3RlYWQsIHRo
ZSBjdXJyZW50IHllYXIKKyAgICAgICAgICAgbWF5IG5vdCBiZSBhIGxlYXAgeWVhci4gSW4gdGhh
dCBjYXNlLCBgbmV3IERhdGUoIkZlYiAyOSIpLmdldE1vbnRoKClgIGJlY29tZXMgMiAoTWFyY2gp
LgorCisgICAgICAgICogd3RmL0RhdGVNYXRoLmNwcDoKKyAgICAgICAgKFdURjo6cGFyc2VEYXRl
RnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyk6CisKIDIwMTctMDQtMTIgIFl1c3VrZSBTdXp1
a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgVXNlIEhBVkUoTUFDSElORV9D
T05URVhUKSBpbnN0ZWFkIG9mIFVTRShNQUNISU5FX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAKaW5k
ZXggMTM1MGUzMDQwNjQ3OTAzZTVlMzg4YWY2ZjVmNWQ5YWU0ZTBhMWY2Yi4uMWVmMTRmOTY0N2M4
NDMyMTcwYjQzZWE4MTM1YWY5NGIxZWYxZWE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
RGF0ZU1hdGguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0RhdGVNYXRoLmNwcApAQCAtODkxLDEz
ICs4OTEsMTAgQEAgZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMo
Y29uc3QgY2hhciogZGF0ZVN0cmluZywgYm9vbCYgaGF2ZVQKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CiAgICAgZGF0ZVN0cmluZyA9IG5l
d1Bvc1N0cjsKIAotICAgIGlmICghKmRhdGVTdHJpbmcpCi0gICAgICAgIHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotCiAgICAgaWYgKGRheSA8IDApCiAg
ICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwog
Ci0gICAgaW50IHllYXIgPSAwOworICAgIHN0ZDo6b3B0aW9uYWw8aW50PiB5ZWFyID0gc3RkOjpu
dWxsb3B0OwogICAgIGlmIChkYXkgPiAzMSkgewogICAgICAgICAvLyAjIyMgd2hlcmUgaXMgdGhl
IGJvdW5kYXJ5IGFuZCB3aGF0IGhhcHBlbnMgYmVsb3c/CiAgICAgICAgIGlmICgqZGF0ZVN0cmlu
ZyAhPSAnLycpCkBAIC05NjEsOSArOTU4LDExIEBAIGRvdWJsZSBwYXJzZURhdGVGcm9tTnVsbFRl
cm1pbmF0ZWRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcsIGJvb2wmIGhhdmVUCiAg
ICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwog
CiAgICAgLy8gJzk5IDIzOjEyOjQwIEdNVCcKLSAgICBpZiAoeWVhciA8PSAwICYmICpkYXRlU3Ry
aW5nKSB7Ci0gICAgICAgIGlmICghcGFyc2VJbnQoZGF0ZVN0cmluZywgJm5ld1Bvc1N0ciwgMTAs
ICZ5ZWFyKSkKKyAgICBpZiAoKmRhdGVTdHJpbmcgJiYgIXllYXIpIHsKKyAgICAgICAgaW50IHJl
c3VsdCA9IDA7CisgICAgICAgIGlmICghcGFyc2VJbnQoZGF0ZVN0cmluZywgJm5ld1Bvc1N0ciwg
MTAsICZyZXN1bHQpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgIHllYXIgPSByZXN1bHQ7CiAgICAgfQogCiAgICAg
Ly8gRG9uJ3QgZmFpbCBpZiB0aGUgdGltZSBpcyBtaXNzaW5nLgpAQCAtOTc4LDcgKzk3Nyw3IEBA
IGRvdWJsZSBwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIq
IGRhdGVTdHJpbmcsIGJvb2wmIGhhdmVUCiAgICAgICAgICAgICBpZiAoKm5ld1Bvc1N0ciAhPSAn
OicpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
cXVpZXRfTmFOKCk7CiAgICAgICAgICAgICAvLyBUaGVyZSB3YXMgbm8geWVhcjsgdGhlIG51bWJl
ciB3YXMgdGhlIGhvdXIuCi0gICAgICAgICAgICB5ZWFyID0gLTE7CisgICAgICAgICAgICB5ZWFy
ID0gc3RkOjpudWxsb3B0OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gaW4gdGhl
IG5vcm1hbCBjYXNlICh3ZSBwYXJzZWQgdGhlIHllYXIpLCBhZHZhbmNlIHRvIHRoZSBuZXh0IG51
bWJlcgogICAgICAgICAgICAgZGF0ZVN0cmluZyA9ICsrbmV3UG9zU3RyOwpAQCAtMTA0OCw5ICsx
MDQ3LDExIEBAIGRvdWJsZSBwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGNv
bnN0IGNoYXIqIGRhdGVTdHJpbmcsIGJvb2wmIGhhdmVUCiAgICAgfQogICAgIAogICAgIC8vIFRo
ZSB5ZWFyIG1heSBiZSBhZnRlciB0aGUgdGltZSBidXQgYmVmb3JlIHRoZSB0aW1lIHpvbmUuCi0g
ICAgaWYgKGlzQVNDSUlEaWdpdCgqZGF0ZVN0cmluZykgJiYgeWVhciA9PSAtMSkgewotICAgICAg
ICBpZiAoIXBhcnNlSW50KGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmeWVhcikpCisgICAg
aWYgKGlzQVNDSUlEaWdpdCgqZGF0ZVN0cmluZykgJiYgIXllYXIpIHsKKyAgICAgICAgaW50IHJl
c3VsdCA9IDA7CisgICAgICAgIGlmICghcGFyc2VJbnQoZGF0ZVN0cmluZywgJm5ld1Bvc1N0ciwg
MTAsICZyZXN1bHQpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgIHllYXIgPSByZXN1bHQ7CiAgICAgICAgIGRhdGVT
dHJpbmcgPSBuZXdQb3NTdHI7CiAgICAgICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3Ry
aW5nKTsKICAgICB9CkBAIC0xMTAyLDkgKzExMDMsMTEgQEAgZG91YmxlIHBhcnNlRGF0ZUZyb21O
dWxsVGVybWluYXRlZENoYXJhY3RlcnMoY29uc3QgY2hhciogZGF0ZVN0cmluZywgYm9vbCYgaGF2
ZVQKIAogICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsKIAotICAgIGlmICgq
ZGF0ZVN0cmluZyAmJiB5ZWFyID09IC0xKSB7Ci0gICAgICAgIGlmICghcGFyc2VJbnQoZGF0ZVN0
cmluZywgJm5ld1Bvc1N0ciwgMTAsICZ5ZWFyKSkKKyAgICBpZiAoKmRhdGVTdHJpbmcgJiYgIXll
YXIpIHsKKyAgICAgICAgaW50IHJlc3VsdCA9IDA7CisgICAgICAgIGlmICghcGFyc2VJbnQoZGF0
ZVN0cmluZywgJm5ld1Bvc1N0ciwgMTAsICZyZXN1bHQpKQogICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgIHllYXIgPSBy
ZXN1bHQ7CiAgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CiAgICAgICAgIHNraXBTcGFj
ZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsKICAgICB9CkBAIC0xMTE0LDE0ICsxMTE3LDI3IEBA
IGRvdWJsZSBwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIq
IGRhdGVTdHJpbmcsIGJvb2wmIGhhdmVUCiAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwogCiAgICAgLy8gWTJLOiBIYW5kbGUgMiBkaWdpdCB5
ZWFycy4KLSAgICBpZiAoeWVhciA+PSAwICYmIHllYXIgPCAxMDApIHsKLSAgICAgICAgaWYgKHll
YXIgPCA1MCkKLSAgICAgICAgICAgIHllYXIgKz0gMjAwMDsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgeWVhciArPSAxOTAwOworICAgIGlmICh5ZWFyKSB7CisgICAgICAgIGludCB5ZWFyVmFs
dWUgPSB5ZWFyLnZhbHVlKCk7CisgICAgICAgIGlmICh5ZWFyVmFsdWUgPj0gMCAmJiB5ZWFyVmFs
dWUgPCAxMDApIHsKKyAgICAgICAgICAgIGlmICh5ZWFyVmFsdWUgPCA1MCkKKyAgICAgICAgICAg
ICAgICB5ZWFyVmFsdWUgKz0gMjAwMDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB5ZWFyVmFsdWUgKz0gMTkwMDsKKyAgICAgICAgfQorICAgICAgICB5ZWFyID0geWVhclZhbHVl
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdlIHNlbGVjdCAyMDAwIGFzIGRlZmF1bHQgdmFs
dWUuIFRoaXMgaXMgYmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnMuCisgICAgICAgIC8v
IDEuIEFjY29yZGluZyB0byB0aGUgVjgsIHRoaXMgZGVmYXVsdCB2YWx1ZSBpcyBjb21wYXRpYmxl
IHRvIHRoZSBvbGQgS0pTLiBXaGlsZSBjdXJyZW50IFY4IHVzZXMgMjAwMSwKKyAgICAgICAgLy8g
ICAgU3BpZGVyTW9ua2V5IGRvZXMgbm90IGhhdmUgc3VjaCBhIGZhbGxiYWNrIHBhdGguIFNvIHRo
aXMgcmVhc29uIGlzIG5vdCBiaWcgZGVhbC4KKyAgICAgICAgLy8gMi4gSXQgaXMgYSBsZWFwIHll
YXIuIFdoZW4gdXNpbmcgYG5ldyBEYXRlKCJGZWIgMjkiKWAsIHdlIGFzc3VtZSB0aGF0IHBlb3Bs
ZSB3YW50IHRvIHNhdmUgbW9udGggYW5kIGRheS4KKyAgICAgICAgLy8gICAgTGVhcCB5ZWFyIGNh
biBzYXZlIHVzZXIgaW5wdXRzIGlmIHRoZXkgaXMgdmFsaWQuIElmIHdlIHVzZSB0aGUgY3VycmVu
dCB5ZWFyIGluc3RlYWQsIHRoZSBjdXJyZW50IHllYXIKKyAgICAgICAgLy8gICAgbWF5IG5vdCBi
ZSBhIGxlYXAgeWVhci4gSW4gdGhhdCBjYXNlLCBgbmV3IERhdGUoIkZlYiAyOSIpLmdldE1vbnRo
KClgIGJlY29tZXMgMiAoTWFyY2gpLgorICAgICAgICB5ZWFyID0gMjAwMDsKICAgICB9CisgICAg
QVNTRVJUKHllYXIpOwogICAgIAotICAgIHJldHVybiB5bWRobXNUb1NlY29uZHMoeWVhciwgbW9u
dGggKyAxLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSAqIG1zUGVyU2Vjb25kOworICAgIHJl
dHVybiB5bWRobXNUb1NlY29uZHMoeWVhci52YWx1ZSgpLCBtb250aCArIDEsIGRheSwgaG91ciwg
bWludXRlLCBzZWNvbmQpICogbXNQZXJTZWNvbmQ7CiB9CiAKIGRvdWJsZSBwYXJzZURhdGVGcm9t
TnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcpCmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDRhNjAwNjhh
YTQ2N2EzMzU5OGU2OTBlNjQyYzlhZmYxMjdmNjBhMWQuLjM5NjEyMzA2ZWRhODY2YmNiM2YxM2Fi
ZDIyYTg2N2E0NzA2YmZkMDIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pT
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMDQtMTMgIFl1c3VrZSBTdXp1
a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW0pTQ10gRGF0ZS5wYXJzZSBz
aG91bGQgYWNjZXB0IHdpZGVyIHJhbmdlIG9mIHJlcHJlc2VudGF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3MjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9kYXRlLXJlbGF4ZWQu
anM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAodGhyb3cubmV3LkVycm9y
KToKKwogMjAxNy0wNC0xMiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgog
CiAgICAgICAgIHRlc3QyNjI6IHRlc3QyNjIvdGVzdC9idWlsdC1pbnMvTmF0aXZlRXJyb3JzL0V2
YWxFcnJvci9wcm90by5qcwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZGF0ZS1yZWxheGVk
LmpzIGIvSlNUZXN0cy9zdHJlc3MvZGF0ZS1yZWxheGVkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2NDFkMTNm
YTE2MWQ1YWQzMmM3NjZjMDU2OGUyNWQ5OWIwNzc3N2UKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL3N0cmVzcy9kYXRlLXJlbGF4ZWQuanMKQEAgLTAsMCArMSw2MSBAQAorZnVuY3Rpb24gc2hv
dWxkQmUoYWN0dWFsLCBleHBlY3RlZCkKK3sKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWQgdmFsdWU6ICR7YWN0dWFsfWApOworfQorCit7
CisgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSgiTWF5IDgiKTsKKyAgICBzaG91bGRCZShkYXRlLmdl
dEZ1bGxZZWFyKCksIDIwMDApOworICAgIHNob3VsZEJlKGRhdGUuZ2V0TW9udGgoKSwgNCk7Cisg
ICAgc2hvdWxkQmUoZGF0ZS5nZXREYXRlKCksIDgpOworfQoreworICAgIGxldCBkYXRlID0gbmV3
IERhdGUoIkZlYiAyOSIpOworICAgIHNob3VsZEJlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMjAwMCk7
CisgICAgc2hvdWxkQmUoZGF0ZS5nZXRNb250aCgpLCAxKTsKKyAgICBzaG91bGRCZShkYXRlLmdl
dERhdGUoKSwgMjkpOworfQoreworICAgIGxldCBkYXRlID0gbmV3IERhdGUoIiBNYXkgOCAiKTsK
KyAgICBzaG91bGRCZShkYXRlLmdldEZ1bGxZZWFyKCksIDIwMDApOworICAgIHNob3VsZEJlKGRh
dGUuZ2V0TW9udGgoKSwgNCk7CisgICAgc2hvdWxkQmUoZGF0ZS5nZXREYXRlKCksIDgpOworfQor
eworICAgIGxldCBkYXRlID0gbmV3IERhdGUoIiBGZWIgMjkgIik7CisgICAgc2hvdWxkQmUoZGF0
ZS5nZXRGdWxsWWVhcigpLCAyMDAwKTsKKyAgICBzaG91bGRCZShkYXRlLmdldE1vbnRoKCksIDEp
OworICAgIHNob3VsZEJlKGRhdGUuZ2V0RGF0ZSgpLCAyOSk7Cit9Cit7CisgICAgbGV0IGRhdGUg
PSBuZXcgRGF0ZSgiTWF5LzgiKTsKKyAgICBzaG91bGRCZShkYXRlLmdldEZ1bGxZZWFyKCksIDIw
MDApOworICAgIHNob3VsZEJlKGRhdGUuZ2V0TW9udGgoKSwgNCk7CisgICAgc2hvdWxkQmUoZGF0
ZS5nZXREYXRlKCksIDgpOworfQoreworICAgIGxldCBkYXRlID0gbmV3IERhdGUoIkZlYi8yOSIp
OworICAgIHNob3VsZEJlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMjAwMCk7CisgICAgc2hvdWxkQmUo
ZGF0ZS5nZXRNb250aCgpLCAxKTsKKyAgICBzaG91bGRCZShkYXRlLmdldERhdGUoKSwgMjkpOwor
fQoreworICAgIGxldCBkYXRlID0gbmV3IERhdGUoIk1heTgiKTsKKyAgICBzaG91bGRCZShkYXRl
LmdldEZ1bGxZZWFyKCksIDIwMDApOworICAgIHNob3VsZEJlKGRhdGUuZ2V0TW9udGgoKSwgNCk7
CisgICAgc2hvdWxkQmUoZGF0ZS5nZXREYXRlKCksIDgpOworfQoreworICAgIGxldCBkYXRlID0g
bmV3IERhdGUoIkZlYjI5Iik7CisgICAgc2hvdWxkQmUoZGF0ZS5nZXRGdWxsWWVhcigpLCAyMDAw
KTsKKyAgICBzaG91bGRCZShkYXRlLmdldE1vbnRoKCksIDEpOworICAgIHNob3VsZEJlKGRhdGUu
Z2V0RGF0ZSgpLCAyOSk7Cit9CisKK3sKKyAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKCJNYXkgOCAt
MSIpOworICAgIHNob3VsZEJlKGRhdGUuZ2V0RnVsbFllYXIoKSwgLTEpOworICAgIHNob3VsZEJl
KGRhdGUuZ2V0TW9udGgoKSwgNCk7CisgICAgc2hvdWxkQmUoZGF0ZS5nZXREYXRlKCksIDgpOwor
fQo=
</data>
<flag name="review"
          id="328294"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>