<?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>157805</bug_id>
          
          <creation_ts>2016-05-17 11:48:28 -0700</creation_ts>
          <short_desc>REGRESSION(r192855): Math.random() always produces the same first 7 decimal points the first two invocations</short_desc>
          <delta_ts>2016-05-17 15:51:57 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>mark.lam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1193897</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-05-17 11:48:28 -0700</bug_when>
    <thetext>* SUMMARY
Math.random() always produces the same first 7 decimal points the first two invocations

* STEPS TO REPRODUCE
1. Inspect about:blank
2. Run Math.random() twice
  =&gt; first 7 decimals are identical

* EXAMPLES

  &gt; Math.random()
  &lt; 0.39641653952203815
  &lt; 0.39641654154667616

  &gt; Math.random()
  &lt; 0.7208129766006761
  &lt; 0.7208129575360934

* NOTES
Seen in a comment on Hacker News: &lt;https://news.ycombinator.com/item?id=11711912&gt;
&gt; 2) Math.random() returns the same result the first two calls on page load.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193900</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-17 11:50:06 -0700</bug_when>
    <thetext>Wow, that&apos;s hilarious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193906</commentid>
    <comment_count>2</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-05-17 12:01:18 -0700</bug_when>
    <thetext>Caused by r192855:
&lt;http://trac.webkit.org/changeset/192855&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193908</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-05-17 12:01:46 -0700</bug_when>
    <thetext>Probably too many zeroes in the initial seed, since our seed API is 32 bit. You can probably fix this by:

        uint64_t seed64 = seed;
        m_low = (seed64 &lt;&lt; 32) | seed64;
        m_high = (seed64 &lt;&lt; 32) | seed64;

Or you could update the seed API to be 128bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193918</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-05-17 12:21:48 -0700</bug_when>
    <thetext>&lt;rdar://problem/26327851&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193962</commentid>
    <comment_count>5</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-05-17 13:33:10 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Probably too many zeroes in the initial seed, since our seed API is 32 bit.
&gt; You can probably fix this by:
&gt; 
&gt;         uint64_t seed64 = seed;
&gt;         m_low = (seed64 &lt;&lt; 32) | seed64;
&gt;         m_high = (seed64 &lt;&lt; 32) | seed64;
&gt; 

After this the first 4 digits stayed nearly identical:

    &gt;&gt;&gt; Math.random()
    0.41647092963078913
    &gt;&gt;&gt; Math.random()
    0.41646612834590113

    &gt;&gt;&gt; Math.random()
    0.47840231815551537
    &gt;&gt;&gt; Math.random()
    0.47839187513838377

How about we just advance once after setting the seed?

    m_low = seed;
    m_high = seed;
    advance();

Do you see any disadvantages to this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193987</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-05-17 14:29:59 -0700</bug_when>
    <thetext>&gt; How about we just advance once after setting the seed?
&gt; 
&gt;     m_low = seed;
&gt;     m_high = seed;
&gt;     advance();
&gt; 
&gt; Do you see any disadvantages to this?

LOL. Brain fart. It&apos;s guaranteed that no better solution is possible.

We have 128 bits of state that we want to set based on 32 bits of input. All solutions to this problem include some kind of bias unless they are... random!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193993</commentid>
    <comment_count>7</comment_count>
      <attachid>279167</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-05-17 14:47:44 -0700</bug_when>
    <thetext>Created attachment 279167
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193995</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-05-17 14:48:51 -0700</bug_when>
    <thetext>An alternative test approach could be TestWebKitAPI creating a WeakRandom, or a jsc API that allows setting the random seed. But this tests Math.random which is web exposed so probably the safest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194017</commentid>
    <comment_count>9</comment_count>
      <attachid>279167</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-05-17 15:29:31 -0700</bug_when>
    <thetext>Comment on attachment 279167
[PATCH] Proposed Fix

EWS failure seems spurious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194027</commentid>
    <comment_count>10</comment_count>
      <attachid>279167</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-17 15:51:49 -0700</bug_when>
    <thetext>Comment on attachment 279167
[PATCH] Proposed Fix

Clearing flags on attachment: 279167

Committed r201053: &lt;http://trac.webkit.org/changeset/201053&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194028</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-17 15:51:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279167</attachid>
            <date>2016-05-17 14:47:44 -0700</date>
            <delta_ts>2016-05-17 15:51:49 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>random-1.patch</filename>
            <type>text/plain</type>
            <size>4707</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjYmEyZTMwLi43MjA4NzllIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTYtMDUt
MTcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdS
RVNTSU9OKHIxOTI4NTUpOiBNYXRoLnJhbmRvbSgpIGFsd2F5cyBwcm9kdWNlcyB0aGUgc2FtZSBm
aXJzdCA3IGRlY2ltYWwgcG9pbnRzIHRoZSBmaXJzdCB0d28gaW52b2NhdGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgwNQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjYzMjc4NTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBqcy9kb20vbWF0aC1yYW5kb20taW5pdGlhbC12YWx1ZXMtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9kb20vbWF0aC1yYW5kb20taW5pdGlhbC12
YWx1ZXMuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVzb3VyY2VzL21hdGgtcmFuZG9tLWlu
aXRpYWwtdmFsdWVzLWlmcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgVGVzdCB0aGF0IGxlc3Mg
dGhlbiA1JSBvZiB0aGUgdGltZSwgZWFybHkgTWF0aC5yYW5kb20gaW52b2NhdGlvbnMKKyAgICAg
ICAgcHJvZHVjZSB2ZXJ5IHNpbWlsaWFyIHZhbHVlcy4gQmVmb3JlIHRoaXMgY2hhbmdlIHdlIHdl
cmUgZmFpbGluZworICAgICAgICAxMDAlLCBidXQgYWZ0ZXIgd2Ugc2VlIHNpbWlsaWFyIHZhbHVl
cyBtb3N0bHkgYXJvdW5kIDAtMyUuCisKIDIwMTYtMDUtMTAgIEpvc2VwaCBQZWNvcmFybyAgPHBl
Y29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXByb3ZlIGVycm9yIG1lc3NhZ2VzIGZvciBh
Y2Nlc3NpbmcgYXJndW1lbnRzLmNhbGxlZSBhbmQgc2ltaWxhciBnZXR0ZXJzIGluIHN0cmljdCBt
b2RlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9kb20vbWF0aC1yYW5kb20taW5pdGlhbC12
YWx1ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvZG9tL21hdGgtcmFuZG9tLWluaXRp
YWwtdmFsdWVzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li43ZWFmYjc5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvZG9tL21hdGgtcmFu
ZG9tLWluaXRpYWwtdmFsdWVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitUaGlzIHRl
c3RzIGVhcmx5IE1hdGgucmFuZG9tIHZhbHVlcyBhcmUgbm90IGNvbnNpc3RlbnRseSBuZWFybHkg
aWRlbnRpY2FsLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBmcmFtZXNX
aXRoU2ltaWxpYXJFYXJseVJhbmRvbVZhbHVlcyA8PSA1IGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9qcy9kb20vbWF0aC1yYW5kb20taW5pdGlhbC12YWx1ZXMuaHRtbCBiL0xheW91dFRlc3Rz
L2pzL2RvbS9tYXRoLXJhbmRvbS1pbml0aWFsLXZhbHVlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjQxZGQ1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9qcy9kb20vbWF0aC1yYW5kb20taW5pdGlhbC12YWx1ZXMuaHRtbApAQCAtMCwwICsxLDQ0IEBA
Cis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dD4KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworZGVzY3JpcHRpb24oIlRoaXMgdGVz
dHMgZWFybHkgTWF0aC5yYW5kb20gdmFsdWVzIGFyZSBub3QgY29uc2lzdGVudGx5IG5lYXJseSBp
ZGVudGljYWwuIik7CisKK3ZhciBzZWVuID0gMDsKK3ZhciBleHBlY3RlZCA9IDEwMDsKK3ZhciBm
cmFtZXNXaXRoU2ltaWxpYXJFYXJseVJhbmRvbVZhbHVlcyA9IDA7Cit2YXIgbGFzdFJhbmRvbTEg
PSAwOworCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgaWYgKGV2ZW50LmRhdGEuc2ltaWxpYXIpCisgICAgICAgIGZyYW1lc1dpdGhTaW1p
bGlhckVhcmx5UmFuZG9tVmFsdWVzKys7CisKKyAgICBpZiAoZXZlbnQuZGF0YS5yYW5kb20xID09
PSBsYXN0UmFuZG9tMSkKKyAgICAgICAgdGVzdEZhaWxlZCgiUmFuZG9tIG51bWJlciBzaG91bGQg
YmUgZGlmZmVyZW50IGJldHdlZW4gZnJhbWVzIik7CisgICAgbGFzdFJhbmRvbTEgPSBldmVudC5k
YXRhLnJhbmRvbTE7CisKKyAgICBpZiAoKytzZWVuID09PSBleHBlY3RlZCkgeworICAgICAgICBz
aG91bGRCZVRydWUoImZyYW1lc1dpdGhTaW1pbGlhckVhcmx5UmFuZG9tVmFsdWVzIDw9IDUiKTsK
KyAgICAgICAgaWYgKGZyYW1lc1dpdGhTaW1pbGlhckVhcmx5UmFuZG9tVmFsdWVzID4gNSkKKyAg
ICAgICAgICAgIGRlYnVnKCJmcmFtZXNXaXRoU2ltaWxpYXJFYXJseVJhbmRvbVZhbHVlczogIiAr
IGZyYW1lc1dpdGhTaW1pbGlhckVhcmx5UmFuZG9tVmFsdWVzKTsKKyAgICAgICAgZmluaXNoSlNU
ZXN0KCk7CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIGNyZWF0ZUZyYW1lKCkgeworICAgIHZhciBp
ZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICBpZnJhbWUuc3Jj
ID0gIi4uL3Jlc291cmNlcy9tYXRoLXJhbmRvbS1pbml0aWFsLXZhbHVlcy1pZnJhbWUuaHRtbCI7
CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworfQorCitmb3IgKHZhciBp
ID0gMDsgaSA8IGV4cGVjdGVkOyArK2kpCisgICAgY3JlYXRlRnJhbWUoKTsKKzwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVzb3VyY2VzL21h
dGgtcmFuZG9tLWluaXRpYWwtdmFsdWVzLWlmcmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvanMvcmVz
b3VyY2VzL21hdGgtcmFuZG9tLWluaXRpYWwtdmFsdWVzLWlmcmFtZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZTE0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9qcy9yZXNvdXJjZXMvbWF0aC1yYW5kb20taW5pdGlhbC12YWx1ZXMtaWZyYW1lLmh0
bWwKQEAgLTAsMCArMSw2IEBACis8c2NyaXB0PgordmFyIHJhbmRvbTEgPSBNYXRoLnJhbmRvbSgp
OwordmFyIHJhbmRvbTIgPSBNYXRoLnJhbmRvbSgpOwordmFyIHNpbWlsaWFyID0gTWF0aC5mbG9v
cihyYW5kb20xICogMTAwMCkgPT09IE1hdGguZmxvb3IocmFuZG9tMiAqIDEwMDApOword2luZG93
LnRvcC5wb3N0TWVzc2FnZSh7c2ltaWxpYXIsIHJhbmRvbTEsIHJhbmRvbTJ9LCAiKiIpOworPC9z
Y3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCmluZGV4IDUyZjY5ZDcuLjIxOTZmMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYt
MDUtMTcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKworICAgICAgICBS
RUdSRVNTSU9OKHIxOTI4NTUpOiBNYXRoLnJhbmRvbSgpIGFsd2F5cyBwcm9kdWNlcyB0aGUgc2Ft
ZSBmaXJzdCA3IGRlY2ltYWwgcG9pbnRzIHRoZSBmaXJzdCB0d28gaW52b2NhdGlvbnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzgwNQorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMjYzMjc4NTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvV2Vha1JhbmRvbS5oOgorICAgICAgICAoV1RGOjpX
ZWFrUmFuZG9tOjpzZXRTZWVkKToKKyAgICAgICAgQWR2YW5jZSBvbmNlIHRvIHJhbmRvbWl6ZSB0
aGUgMzJiaXQgc2VlZCBhY3Jvc3MgdGhlIDEyOGJpdCBzdGF0ZQorICAgICAgICBhbmQgYXZvaWQg
cmUtdXNpbmcgNjRiaXRzIG9mIHN0YXRlIGluIHRoZSBzZWNvbmQgYWR2YW5jZS4KKwogMjAxNi0w
NS0xNyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAg
ICAgIERPTVByb21pc2Ugc2hvdWxkIG9ubHkgcmVzdHJpY3QgdGhlIHJlc29sdXRpb24gdHlwZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvV2Vha1JhbmRvbS5oIGIvU291cmNlL1dURi93dGYv
V2Vha1JhbmRvbS5oCmluZGV4IDljMGY1ODkuLjRkNTllNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1dlYWtSYW5kb20uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9XZWFrUmFuZG9tLmgKQEAg
LTU2LDYgKzU2LDcgQEAgcHVibGljOgogCiAgICAgICAgIG1fbG93ID0gc2VlZDsKICAgICAgICAg
bV9oaWdoID0gc2VlZDsKKyAgICAgICAgYWR2YW5jZSgpOwogICAgIH0KIAogICAgIHVuc2lnbmVk
IHNlZWQoKSBjb25zdCB7IHJldHVybiBtX3NlZWQ7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>