Ruby Issue Tracking System: Issues
https://bugs.ruby-lang.org/
https://bugs.ruby-lang.org/favicon.ico?1711330511
2022-06-13T20:43:17Z
Ruby Issue Tracking System
Redmine
Ruby master - Bug #18826 (Closed): Symbol#to_proc inconsistent, sometimes calls private methods
https://bugs.ruby-lang.org/issues/18826
2022-06-13T20:43:17Z
bjfish (Brandon Fish)
<p>The following usage calls a protected method and prints "hello":</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Test</span>
<span class="kp">protected</span>
<span class="k">def</span> <span class="nf">referenced_columns</span>
<span class="nb">puts</span> <span class="s2">"hello"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="no">Test</span><span class="p">.</span><span class="nf">new</span><span class="p">.</span><span class="nf">tap</span><span class="p">(</span><span class="o">&</span><span class="ss">:referenced_columns</span><span class="p">)</span>
</code></pre>
<p>However, the following usage results in a NoMethodError:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Integer</span>
<span class="kp">private</span>
<span class="k">def</span> <span class="nf">foo</span>
<span class="mi">42</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="p">(</span><span class="mi">1</span><span class="o">..</span><span class="mi">4</span><span class="p">).</span><span class="nf">collect</span><span class="p">(</span><span class="o">&</span><span class="ss">:foo</span><span class="p">)</span>
</code></pre>
<p>It seems to be a bug that tap calls a private method. It is also inconsistent with collect not calling private methods.</p>
Ruby master - Bug #18670 (Closed): MatchData#[start, length] pads nil values when negative start ...
https://bugs.ruby-lang.org/issues/18670
2022-03-30T16:30:04Z
bjfish (Brandon Fish)
<p>Example</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">001</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="sr">/(.)(.)(\d+)(\d)/</span><span class="p">.</span><span class="nf">match</span><span class="p">(</span><span class="s2">"THX1138."</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10</span><span class="p">]</span>
<span class="o">=></span> <span class="p">[</span><span class="s2">"8"</span><span class="p">,</span> <span class="kp">nil</span><span class="p">,</span> <span class="kp">nil</span><span class="p">,</span> <span class="kp">nil</span><span class="p">,</span> <span class="kp">nil</span><span class="p">,</span> <span class="kp">nil</span><span class="p">,</span> <span class="kp">nil</span><span class="p">,</span> <span class="kp">nil</span><span class="p">,</span> <span class="kp">nil</span><span class="p">,</span> <span class="kp">nil</span><span class="p">]</span>
</code></pre>
<p>I would expect this to be consistent with String or Array for example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">002</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="s2">"hello"</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10</span><span class="p">]</span>
<span class="o">=></span> <span class="s2">"o"</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">003</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">10</span><span class="p">]</span>
<span class="o">=></span> <span class="p">[</span><span class="mi">3</span><span class="p">]</span>
</code></pre>
Ruby master - Bug #18635 (Closed): Enumerable#inject without block/symbol will return values or r...
https://bugs.ruby-lang.org/issues/18635
2022-03-15T14:15:55Z
bjfish (Brandon Fish)
<p>The following shows inconsistent behavior when no block/symbol are provided to inject.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">002</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="p">{}.</span><span class="nf">inject</span>
<span class="o">=></span> <span class="kp">nil</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">003</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="p">{</span><span class="ss">one: </span><span class="mi">1</span><span class="p">}.</span><span class="nf">inject</span>
<span class="o">=></span> <span class="p">[</span><span class="ss">:one</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">004</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="p">{</span><span class="ss">one: </span><span class="mi">1</span><span class="p">,</span> <span class="ss">two: </span><span class="mi">2</span><span class="p">}.</span><span class="nf">inject</span>
<span class="p">(</span><span class="n">irb</span><span class="p">):</span><span class="mi">4</span><span class="ss">:in</span> <span class="sb">`each': no block given (LocalJumpError)
irb(main):005:0> [].inject
=> nil
irb(main):006:0> [1].inject
=> 1
irb(main):007:0> [1, 2].inject
(irb):7:in `</span><span class="n">each</span><span class="err">'</span><span class="p">:</span> <span class="n">no</span> <span class="n">block</span> <span class="n">given</span> <span class="p">(</span><span class="no">LocalJumpError</span><span class="p">)</span>
</code></pre>
<p>I would expect the results to be consistent by always raising a LocalJumpError or raising an ArgumentError when no block and symbol are given.</p>
Ruby master - Bug #17945 (Closed): Date::Infinity comparison <=> with Float::INFINITY not symmetric
https://bugs.ruby-lang.org/issues/17945
2021-06-10T17:35:03Z
bjfish (Brandon Fish)
<p><strong>Example</strong></p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s1">'date'</span>
<span class="nb">p</span> <span class="no">Float</span><span class="o">::</span><span class="no">INFINITY</span> <span class="o"><=></span> <span class="no">Date</span><span class="o">::</span><span class="no">Infinity</span><span class="p">.</span><span class="nf">new</span>
<span class="nb">p</span> <span class="no">Date</span><span class="o">::</span><span class="no">Infinity</span><span class="p">.</span><span class="nf">new</span> <span class="o"><=></span> <span class="no">Float</span><span class="o">::</span><span class="no">INFINITY</span>
</code></pre>
<p><strong>Expected Result</strong><br>
I expected the comparison to have the same result when the order of values is switched.</p>
<pre><code class="shell syntaxhl" data-language="shell">0
0
</code></pre>
<p><strong>Actual Result</strong></p>
<pre><code class="shell syntaxhl" data-language="shell">0
1
</code></pre>
Ruby master - Bug #17889 (Closed): Enumerator::Lazy#with_index should return size
https://bugs.ruby-lang.org/issues/17889
2021-05-26T17:21:58Z
bjfish (Brandon Fish)
<p>The following example shows <code>#size</code> returns <code>nil</code> when the <code>size</code> was provided to <code>new</code> as <code>3</code>.</p>
<p><strong>Example</strong></p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">p</span> <span class="no">Enumerator</span><span class="o">::</span><span class="no">Lazy</span><span class="p">.</span><span class="nf">new</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">],</span> <span class="mi">3</span><span class="p">){</span><span class="o">|</span><span class="n">y</span><span class="p">,</span> <span class="n">v</span><span class="o">|</span> <span class="n">y</span> <span class="o"><<</span> <span class="n">v</span><span class="p">}.</span><span class="nf">with_index</span><span class="p">.</span><span class="nf">size</span>
</code></pre>
<p><strong>Expected Result</strong></p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="mi">3</span>
</code></pre>
<p><strong>Actual Result</strong></p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="kp">nil</span>
</code></pre>
Ruby master - Bug #17887 (Closed): Missed constant lookup after prepend
https://bugs.ruby-lang.org/issues/17887
2021-05-24T17:08:19Z
bjfish (Brandon Fish)
<p><strong>Description</strong><br>
The following shows that the constant lookup from B does not find the constant in the prepended M module. I would expect this lookup to behave like "B.include M" which does print the constant from module M.</p>
<p><strong>Example</strong></p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">module</span> <span class="nn">M</span>
<span class="no">FOO</span> <span class="o">=</span> <span class="s1">'m'</span>
<span class="k">end</span>
<span class="k">class</span> <span class="nc">A</span>
<span class="no">FOO</span> <span class="o">=</span> <span class="s1">'a'</span>
<span class="k">end</span>
<span class="k">class</span> <span class="nc">B</span> <span class="o"><</span> <span class="no">A</span>
<span class="k">def</span> <span class="nf">foo</span>
<span class="no">FOO</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">b</span> <span class="o">=</span> <span class="no">B</span><span class="p">.</span><span class="nf">new</span>
<span class="nb">p</span> <span class="n">b</span><span class="p">.</span><span class="nf">foo</span>
<span class="no">A</span><span class="p">.</span><span class="nf">prepend</span> <span class="no">M</span>
<span class="nb">p</span> <span class="n">b</span><span class="p">.</span><span class="nf">foo</span>
</code></pre>
<p><strong>Expected Result</strong></p>
<pre><code>"a"
"m"
</code></pre>
<p><strong>Actual Result</strong></p>
<pre><code>"a"
"a"
</code></pre>
Ruby master - Bug #16738 (Closed): RbConfig::CONFIG["SDKROOT"] not frozen on macOS
https://bugs.ruby-lang.org/issues/16738
2020-03-24T15:57:15Z
bjfish (Brandon Fish)
<p>The <code>RbConfig::CONFIG["SDKROOT"]</code> is not frozen on macOS when the <code>SDKROOT</code> environment variable is set which causes the kernel spec (<a href="https://github.com/ruby/ruby/blob/1b3339528c0804aa0e673bd3f15be8b087d17bd8/spec/ruby/library/rbconfig/rbconfig_spec.rb#L27" class="external">https://github.com/ruby/ruby/blob/1b3339528c0804aa0e673bd3f15be8b087d17bd8/spec/ruby/library/rbconfig/rbconfig_spec.rb#L27</a>) to fail.</p>
<p><strong>Spec Failure</strong></p>
<pre><code>1)
RbConfig::CONFIG contains no frozen strings even with --enable-frozen-string-literal FAILED
Expected "SDKROOT Failure\n" + "Done\n" == "Done\n"
to be truthy but was false
/Users/bfish/Documents/projects/spec/library/rbconfig/rbconfig_spec.rb:28:in `block (2 levels) in <top (required)>'
/Users/bfish/Documents/projects/spec/library/rbconfig/rbconfig_spec.rb:4:in `<top (required)>'
</code></pre>
<p><strong>Example</strong></p>
<pre><code>% unset SDKROOT
% ruby -e 'p RbConfig::CONFIG["SDKROOT"].frozen?'
false
% export SDKROOT="test"
% ruby -e 'p RbConfig::CONFIG["SDKROOT"].frozen?'
true
</code></pre>
<p><strong>Environment</strong><br>
macOS</p>
<p><strong>Versions Tested</strong><br>
2.6.5<br>
2.7.0</p>
Ruby master - Bug #16612 (Closed): Enumerator::ArithmeticSequence#last with float range produces ...
https://bugs.ruby-lang.org/issues/16612
2020-02-06T19:26:57Z
bjfish (Brandon Fish)
<p><strong>Steps to reproduce</strong></p>
<pre><code class="shell syntaxhl" data-language="shell">% ruby <span class="nt">-e</span> <span class="s1">'p ((0.24901079128550474)...(340.25008088980684)).step(34.00010700985213).last'</span>
340.2500808898068
</code></pre>
<p><strong>Expected result</strong></p>
<p>Last value should match the value produced by the following:</p>
<pre><code class="shell syntaxhl" data-language="shell">ruby <span class="nt">-e</span> <span class="s1">'p ((0.24901079128550474)...(340.25008088980684)).step(34.00010700985213).to_a[-1]'</span>
306.24997387995467
</code></pre>
<p><strong>Environment</strong><br>
This was observed in versions <code>2.7.0</code> and <code>2.6.5</code>.</p>
Ruby master - Bug #14083 (Rejected): Refinement in block calling incorrect method
https://bugs.ruby-lang.org/issues/14083
2017-11-05T19:36:04Z
bjfish (Brandon Fish)
<p>Tested on ruby versions 2.3.4 and 2.4.1</p>
<p>When a refinement is used inside a block, the scope of the refinement is not ending when the block has ended. The following example illustrates the issue:</p>
<p>Example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Example</span>
<span class="k">def</span> <span class="nf">test</span>
<span class="nb">puts</span> <span class="s2">"Example#test"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">module</span> <span class="nn">M1</span>
<span class="n">refine</span> <span class="no">Example</span> <span class="k">do</span>
<span class="k">def</span> <span class="nf">test</span>
<span class="nb">puts</span> <span class="s2">"Example#test in M1"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">module</span> <span class="nn">M2</span>
<span class="n">refine</span> <span class="no">Example</span> <span class="k">do</span>
<span class="k">def</span> <span class="nf">test</span>
<span class="nb">puts</span> <span class="s2">"Example#test in M2"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">e</span> <span class="o">=</span> <span class="no">Example</span><span class="p">.</span><span class="nf">new</span>
<span class="p">[</span><span class="no">M1</span><span class="p">,</span> <span class="no">M2</span><span class="p">].</span><span class="nf">each</span> <span class="p">{</span> <span class="o">|</span><span class="n">r</span><span class="o">|</span>
<span class="n">e</span><span class="p">.</span><span class="nf">test</span>
<span class="n">using</span> <span class="n">r</span>
<span class="n">e</span><span class="p">.</span><span class="nf">test</span>
<span class="p">}</span>
</code></pre>
<p>Actual Output</p>
<pre><code class="text syntaxhl" data-language="text">Example#test
Example#test in M1
Example#test in M1
Example#test in M2
</code></pre>
<p>Expected output</p>
<pre><code class="text syntaxhl" data-language="text">Example#test
Example#test in M1
Example#test
Example#test in M2
</code></pre>