Ruby Issue Tracking System: Issues
https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1711330511
2024-03-29T01:55:10Z
Ruby Issue Tracking System
Redmine
Ruby master - Bug #20401 (Open): Duplicated when clause warning line number
https://redmine.ruby-lang.org/issues/20401
2024-03-29T01:55:10Z
kddnewton (Kevin Newton)
kddnewton@gmail.com
<p>When you have a duplicated when clause, you get a warning for it. For example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">case</span> <span class="n">foo</span>
<span class="k">when</span> <span class="ss">:bar</span>
<span class="k">when</span> <span class="ss">:baz</span>
<span class="k">when</span> <span class="ss">:bar</span>
<span class="k">end</span>
</code></pre>
<p>you get <code>warning: duplicated `when' clause with line 2 is ignored</code>.</p>
<p>But the when clause that is ignored is the one on line 4, not line 2. It seems like it's warning for the wrong line.</p>
Ruby master - Bug #20400 (Open): Nested BEGIN{} execution order
https://redmine.ruby-lang.org/issues/20400
2024-03-28T18:13:35Z
kddnewton (Kevin Newton)
kddnewton@gmail.com
<p>Right now there are specs for the order in which <code>BEGIN{}</code> should be executed, which is the order they appear in the file. For example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">BEGIN</span> <span class="p">{</span> <span class="nb">print</span> <span class="s2">"1"</span> <span class="p">}</span>
<span class="nb">print</span> <span class="s2">"4"</span>
<span class="k">BEGIN</span> <span class="p">{</span> <span class="nb">print</span> <span class="s2">"2"</span> <span class="p">}</span>
<span class="nb">print</span> <span class="s2">"5"</span>
<span class="k">BEGIN</span> <span class="p">{</span> <span class="nb">print</span> <span class="s2">"3"</span> <span class="p">}</span>
</code></pre>
<p>should output "12345". However, I couldn't find any tests/specs on what happens when <code>BEGIN{}</code> is nested. The order appears to be somewhat confusing, so I wanted to clarify if it was intentional or a bug. For example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">BEGIN</span> <span class="p">{</span>
<span class="nb">print</span> <span class="s2">"1"</span>
<span class="k">BEGIN</span> <span class="p">{</span> <span class="nb">print</span> <span class="s2">"2"</span> <span class="p">}</span>
<span class="p">}</span>
</code></pre>
<p>prints "21", and:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">BEGIN</span> <span class="p">{</span>
<span class="nb">print</span> <span class="s2">"1"</span>
<span class="k">BEGIN</span> <span class="p">{</span> <span class="nb">print</span> <span class="s2">"2"</span> <span class="p">}</span>
<span class="k">BEGIN</span> <span class="p">{</span> <span class="nb">print</span> <span class="s2">"3"</span> <span class="p">}</span>
<span class="p">}</span>
</code></pre>
<p>prints "231", and finally:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">BEGIN</span> <span class="p">{</span>
<span class="nb">print</span> <span class="s2">"1"</span>
<span class="k">BEGIN</span> <span class="p">{</span>
<span class="nb">print</span> <span class="s2">"2"</span>
<span class="k">BEGIN</span> <span class="p">{</span> <span class="nb">print</span> <span class="s2">"3"</span> <span class="p">}</span>
<span class="p">}</span>
<span class="k">BEGIN</span> <span class="p">{</span> <span class="nb">print</span> <span class="s2">"4"</span> <span class="p">}</span>
<span class="p">}</span>
</code></pre>
<p>prints "3241". Is this intentional?</p>
Ruby master - Bug #20395 (Open): Invalid license note in vsnprintf.c
https://redmine.ruby-lang.org/issues/20395
2024-03-26T11:19:39Z
vo.x (Vit Ondruch)
v.ondruch@tiscali.cz
<p>I am looking into Ruby licenses and I stumble upon vsnprintf.c, namely about these lines:</p>
<pre><code>/*
* IMPORTANT NOTE:
* --------------
* From ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
* paragraph 3 above is now null and void.
*/
</code></pre>
<p>I doubt the note is valid since <a class="changeset" title="* missing/crypt.c: replaced with 4.4BSD version. * missing/erf.c: ditto. * missing/vsnprintf.c:..." href="https://redmine.ruby-lang.org/projects/ruby-master/repository/git/revisions/626f1ee196fe06514d66771ff0e3f82d7686af25">git|626f1ee196fe06514d66771ff0e3f82d7686af25</a>, which actually removes the 3rd clause, while the (broken) URL refers to "4bsd". Can somebody please review? The note from the URL can be likely viewed e.g. <a href="https://www.freebsd.org/copyright/license/" class="external">here</a></p>
Ruby master - Bug #20346 (Open): FiberScheduler.unblock not called by Thread#join when Thread bod...
https://redmine.ruby-lang.org/issues/20346
2024-03-18T19:06:21Z
forthoney (Seong-Heon Jung)
castlehoneyjung@gmail.com
<p>When using a <code>Ractor.take</code> inside a different thread, <code>Thread#join</code> on the thread running <code>Ractor.take</code> fails to call <code>FiberScheduler.unblock</code>. The below code can replicate this behavior</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s2">"async"</span>
<span class="k">class</span> <span class="nc">RactorWrapper</span>
<span class="k">def</span> <span class="nf">initialize</span>
<span class="vi">@ractor</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="no">Ractor</span><span class="p">.</span><span class="nf">recv</span> <span class="c1"># Ractor doesn't start until explicitly told to</span>
<span class="c1"># Do some calculations</span>
<span class="n">fib</span> <span class="o">=</span> <span class="o">-></span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="p">{</span> <span class="n">x</span> <span class="o"><</span> <span class="mi">2</span> <span class="p">?</span> <span class="mi">1</span> <span class="p">:</span> <span class="n">fib</span><span class="p">.</span><span class="nf">call</span><span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="n">fib</span><span class="p">.</span><span class="nf">call</span><span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span> <span class="p">}</span>
<span class="n">fib</span><span class="p">.</span><span class="nf">call</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">take_async</span>
<span class="vi">@ractor</span><span class="p">.</span><span class="nf">send</span><span class="p">(</span><span class="kp">nil</span><span class="p">)</span>
<span class="no">Thread</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span> <span class="vi">@ractor</span><span class="p">.</span><span class="nf">take</span> <span class="p">}.</span><span class="nf">join</span><span class="p">.</span><span class="nf">value</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="no">Async</span> <span class="k">do</span> <span class="o">|</span><span class="n">task</span><span class="o">|</span>
<span class="mi">10000</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span> <span class="o">|</span><span class="n">i</span><span class="o">|</span>
<span class="n">task</span><span class="p">.</span><span class="nf">async</span> <span class="k">do</span>
<span class="no">RactorWrapper</span><span class="p">.</span><span class="nf">new</span><span class="p">.</span><span class="nf">take_async</span>
<span class="nb">puts</span> <span class="n">i</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<p>The above code deadlocks, and when we leave a debugging print statement inside of <code>Async</code>'s scheduler's <code>block</code> and <code>unblock</code> method, we can confirm that we only call <code>Scheduler.block</code>, and never <code>Scheduler.unblock</code></p>
Ruby master - Bug #20344 (Open): argument stack underflow (-1)
https://redmine.ruby-lang.org/issues/20344
2024-03-18T15:37:22Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<p>This file produces argument stack underflow, since ruby 2.5.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">proc</span> <span class="k">do</span>
<span class="k">next</span> <span class="k">if</span> <span class="kp">true</span>
<span class="k">case</span> <span class="kp">nil</span>
<span class="k">when</span> <span class="s2">"a"</span>
<span class="k">next</span>
<span class="k">when</span> <span class="s2">"b"</span>
<span class="k">when</span> <span class="s2">"c"</span>
<span class="nb">proc</span> <span class="p">{}</span>
<span class="k">end</span>
<span class="k">next</span> <span class="k">unless</span> <span class="kp">true</span>
<span class="k">end</span>
</code></pre>
<pre><code>-- raw disasm--------
trace: 100
0000 nop ( 1)
<L000> [sp: 0, unremovable: 1, refcnt: 5]
trace: 1
<L004> [sp: 0, unremovable: 0, refcnt: 1]
adjust: [label: 0]
0001 putnil ( 2)
0002 leave ( 13)
<L008> [sp: 1, unremovable: 0, refcnt: 1]
adjust: [label: 0]
0003 putnil ( 6)
0004 leave ( 13)
adjust: [label: 8]
0005 jump <L005> ( 5)
0007 pop ( 7)
0008 jump <L005> ( 7)
* 0010 pop ( 8)
trace: 1
<L011> [sp: -1, unremovable: 1, refcnt: 1]
0011 putself ( 9)
0012 send <calldata:proc, 0>, nil ( 9)
<L012> [sp: -1, unremovable: 0, refcnt: 2]
0015 pop ( 9)
<L005> [sp: 1, unremovable: 0, refcnt: 2]
trace: 1
0016 putnil ( 12)
<L001> [sp: -1, unremovable: 0, refcnt: 3]
trace: 200
0017 leave ( 13)
---------------------
</code></pre>
Ruby master - Bug #20340 (Open): Ractor comments not applying to constant targets
https://redmine.ruby-lang.org/issues/20340
2024-03-14T19:39:40Z
kddnewton (Kevin Newton)
kddnewton@gmail.com
<p>In this example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">C</span><span class="p">,</span> <span class="o">=</span> <span class="p">{</span> <span class="ss">foo: </span><span class="n">bar</span> <span class="p">}</span>
</code></pre>
<p>You get:</p>
<pre><code>== disasm: #<ISeq:<main>@test.rb:1 (1,0)-(1,17)>
0000 putobject :foo ( 1)[Li]
0002 putself
0003 opt_send_without_block <calldata!mid:bar, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0005 newhash 2
0007 dup
0008 expandarray 1, 0
0011 putspecialobject 3
0013 setconstant :C
0015 leave
</code></pre>
<p>But there's no difference from:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># shareable_constant_value: literal</span>
<span class="no">C</span><span class="p">,</span> <span class="o">=</span> <span class="p">{</span> <span class="ss">foo: </span><span class="n">bar</span> <span class="p">}</span>
</code></pre>
<p>I would have expected:</p>
<pre><code>== disasm: #<ISeq:<main>@test.rb:1 (1,0)-(2,16)>
0000 putobject RubyVM::FrozenCore ( 2)[Li]
0002 putobject :foo
0004 putobject RubyVM::FrozenCore
0006 putself
0007 opt_send_without_block <calldata!mid:bar, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0009 putobject "C"
0011 opt_send_without_block <calldata!mid:ensure_shareable, argc:2, ARGS_SIMPLE>
0013 newhash 2
0015 opt_send_without_block <calldata!mid:make_shareable, argc:1, ARGS_SIMPLE>
0017 dup
0018 expandarray 1, 0
0021 putspecialobject 3
0023 setconstant :C
0025 leave
</code></pre>
<p>Is this omission intentional? For context, I'm building this in prism and I need to know if I should explicitly disable this behavior.</p>
Ruby master - Bug #20337 (Open): Complex#inspect mutates the string returned by `real.inspect`
https://redmine.ruby-lang.org/issues/20337
2024-03-14T11:23:54Z
Eregon (Benoit Daloze)
<pre><code>irb(main):001:0> n = Numeric.new
=> #<Numeric:0x00007f81b2308578>
irb(main):004:0> class Numeric; def inspect = super.freeze; end
=> :inspect
irb(main):006:0> Complex(n, 1).inspect
(irb):6:in `inspect': can't modify frozen String: "#<Numeric:0x00007f81b2308578>" (FrozenError)
from (irb):6:in `<main>'
from /home/eregon/.rubies/ruby-3.2.2/lib/ruby/gems/3.2.0/gems/irb-1.6.2/exe/irb:11:in `<top (required)>'
from /home/eregon/.rubies/ruby-3.2.2/bin/irb:25:in `load'
from /home/eregon/.rubies/ruby-3.2.2/bin/irb:25:in `<main>'
</code></pre>
<p>It feels wrong to mutate the result of inspect at least in general, for instance <code>true.inspect</code> is frozen.</p>
<p>Discovered by <a href="https://github.com/ruby/spec/pull/1142" class="external">https://github.com/ruby/spec/pull/1142</a></p>
Ruby master - Bug #20332 (Open): After upgrading to ruby v 3.2.3 rb_scan_args() skips argument va...
https://redmine.ruby-lang.org/issues/20332
2024-03-12T18:06:04Z
praveenrocket (Praveen N)
<p>Hi,</p>
<p>Note: I am not an expert at ruby.</p>
<p>I am working on ibm_db gem, its an adapter developed using ruby C extension, which helps ruby & rails applications to connect to DB2 database.<br>
Here is a github link for its source <a href="https://github.com/ibmdb/ruby-ibmdb/tree/master" class="external">https://github.com/ibmdb/ruby-ibmdb/tree/master</a></p>
<p>As of now ibm_db gem is compatible with ruby v 3.1.<br>
Now I am trying to make ibm_db gem compatible with ruby v 3.2.3.</p>
<p>All my test cases were working for ruby v 3.1, but post upgrading to ruby v 3.2.3, most of my test cases are failing.</p>
<p>After debugging using gdb what I see is, my ruby test cases calls ruby C extension API passing required arguments, but inside C extension code arguments are not parsed, indeed nothing is read. Because of this most of test cases are failing.</p>
<p>Below is a sample ruby script which when run calls ibm_db extension,</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="err">$</span> <span class="n">irb</span>
<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="nb">require</span> <span class="s1">'ibm_db'</span>
<span class="o">=></span> <span class="kp">true</span>
<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="n">conn</span> <span class="o">=</span> <span class="no">IBM_DB</span><span class="p">.</span><span class="nf">connect</span><span class="p">(</span><span class="s2">"DATABASE=sample;HOSTNAME=waldevdbclnxtst06.dev.rocketsoftware.com;PORT=60000;PROTOCOL=TCPIP;UID=zurbie;PWD=A2m8test;"</span><span class="p">,</span><span class="s1">''</span><span class="p">,</span><span class="s1">''</span><span class="p">)</span>
<span class="p">(</span><span class="n">irb</span><span class="p">):</span><span class="mi">2</span><span class="p">:</span> <span class="ss">warning: </span><span class="n">undefining</span> <span class="n">the</span> <span class="n">allocator</span> <span class="n">of</span> <span class="no">T_DATA</span> <span class="k">class</span> <span class="nc">IBM_DB::Connection</span>
<span class="o">=></span> <span class="c1">#<IBM_DB::Connection:0x00007ff60314ce58></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="n">stmt</span> <span class="o">=</span> <span class="no">IBM_DB</span><span class="p">.</span><span class="nf">exec</span> <span class="n">conn</span><span class="p">,</span><span class="s1">'create table abc(C1 int)'</span>
<span class="o">=></span> <span class="kp">false</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="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">005</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="no">IBM_DB</span><span class="p">.</span><span class="nf">close</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
<span class="o">=></span> <span class="kp">true</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">006</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="nb">exit</span>
</code></pre>
<p>Above, If you observe IBM_DB.exec is called passing two arguments conn & string with create table query.<br>
In extension code <a href="https://github.com/ibmdb/ruby-ibmdb/blob/master/IBM_DB_Driver/ibm_db.c" class="external">https://github.com/ibmdb/ruby-ibmdb/blob/master/IBM_DB_Driver/ibm_db.c</a>,<br>
below function will be called</p>
<pre><code class="c syntaxhl" data-language="c"><span class="n">VALUE</span> <span class="nf">ibm_db_exec</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="n">VALUE</span> <span class="o">*</span><span class="n">argv</span><span class="p">,</span> <span class="n">VALUE</span> <span class="n">self</span><span class="p">)</span>
<span class="p">{</span>
<span class="p">....</span>
<span class="n">rb_scan_args</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">,</span> <span class="s">"21"</span><span class="p">,</span> <span class="o">&</span><span class="n">connection</span><span class="p">,</span> <span class="o">&</span><span class="n">stmt</span><span class="p">,</span> <span class="o">&</span><span class="n">options</span><span class="p">);</span>
<span class="p">......</span>
<span class="p">}</span>
</code></pre>
<p>Note: Please refer <a href="https://github.com/ibmdb/ruby-ibmdb/blob/master/IBM_DB_Driver/ibm_db.c" class="external">https://github.com/ibmdb/ruby-ibmdb/blob/master/IBM_DB_Driver/ibm_db.c</a> for complete code.</p>
<p>rb_scan_args used to parse arguments very well in ruby v 3.1, but now its failing to do so. I see stmt parameter doesnt hold anything.</p>
<p>I just want to know whats issue here, Am I passing arguments in wrong way (in ruby script), or am I not using rb_scan_args properly ?</p>
<p>To reproduce,<br>
Install ruby v 3.2.3,<br>
Install ibm_db gem version 5.4.1 (latest)<br>
Run above sample ruby script using IRB.</p>
<p>Response at earliest is much appreciated.</p>
<p>Thanks<br>
Praveen</p>
Ruby master - Bug #20330 (Open): [BUG] Segmentation fault at 0xffffffffffffffff
https://redmine.ruby-lang.org/issues/20330
2024-03-09T10:33:11Z
l33tname (Sir l33tname)
sirl33tname@gmail.com
<p>I get a segfault from ruby on fly.io (a platform to run full stack apps).<br>
As you can see from the stacktracke im using a jemalloc version but im getting the same crash with the<br>
ruby:3.3.0-slim docker image. (Thats the docker file: <a href="https://github.com/Binaergewitter/serious-bg/blob/be890bf6af110b02f22f359d395bedb0659f4243/Dockerfile.fly" class="external">https://github.com/Binaergewitter/serious-bg/blob/be890bf6af110b02f22f359d395bedb0659f4243/Dockerfile.fly</a> based on quay.io/evl.ms/fullstaq-ruby:3.3.0-jemalloc-slim)</p>
<p>Reverting back to ruby 3.2.3 solved the issue for now: <a href="https://github.com/Binaergewitter/serious-bg/commit/4eed4119706303383ce5994c796bc5a8a1813afc" class="external">https://github.com/Binaergewitter/serious-bg/commit/4eed4119706303383ce5994c796bc5a8a1813afc</a></p>
<p>I was not able to reproduce it locally.<br>
But the application is open source -> <a href="https://github.com/Binaergewitter/serious-bg" class="external">https://github.com/Binaergewitter/serious-bg</a></p>
<pre><code>2024-03-09T09:31:07Z app[3d8d7d99f40128] iad [info][ 0.037737] Spectre V2 : WARNING: Unprivileged eBPF is enabled with eIBRS on, data leaks possible via Spectre v2 BHB attacks!
2024-03-09T09:31:07Z app[3d8d7d99f40128] iad [info][ 0.041193] PCI: Fatal: No config space access function found
2024-03-09T09:31:07Z app[3d8d7d99f40128] iad [info] INFO Starting init (commit: 913ad9c)...
2024-03-09T09:31:07Z app[3d8d7d99f40128] iad [info] INFO Preparing to run: `bundle exec puma -e production -b tcp://0.0.0.0:8080 -t 0:5` as root
2024-03-09T09:31:07Z app[3d8d7d99f40128] iad [info] INFO [fly api proxy] listening at /.fly/api
2024-03-09T09:31:07Z app[3d8d7d99f40128] iad [info]2024/03/09 09:31:07 listening on [fdaa:0:182f:a7b:22c:a04d:ac4:2]:22 (DNS: [fdaa::3]:53)
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems.rb:165: [BUG] Segmentation fault at 0xffffffffffffffff
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]ruby 3.3.0 (2023-12-25 revision 5124f9ac75) +jemalloc [x86_64-linux]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]-- Control frame information -----------------------------------------------
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]c:0005 p:0074 s:0023 e:000021 CLASS /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems.rb:165
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]c:0004 p:0045 s:0019 e:000018 TOP /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems.rb:115 [FINISH]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]c:0003 p:---- s:0012 e:000011 CFUNC :require
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]c:0002 p:0012 s:0007 e:000006 TOP <internal:gem_prelude>:2 [FINISH]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]c:0001 p:0000 s:0003 E:0001c0 DUMMY [FINISH]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]-- Ruby level backtrace information ----------------------------------------
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]<internal:gem_prelude>:2:in `<internal:gem_prelude>'
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]<internal:gem_prelude>:2:in `require'
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems.rb:115:in `<top (required)>'
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems.rb:165:in `<module:Gem>'
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]-- Threading information ---------------------------------------------------
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]Total ractor count: 1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]Ruby thread count for this ractor: 1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]-- Machine register context ------------------------------------------------
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] RIP: 0x00007fc80e6c51b4 RBP: 0x00007fc80c400050 RSP: 0x00007ffee5a36a98
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] RAX: 0xffffffffffffffff RBX: 0x00007fc80c4003e8 RCX: 0x00007fc80c4003e9
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] RDX: 0xffffffffffffffff RDI: 0x00007fc80d8170d0 RSI: 0x000000000000c2d3
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] R8: 0x0000000000000000 R9: 0x00007fc80da36340 R10: 0x0000000000000001
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] R11: 0x00007fc80e026880 R12: 0x00007fc80ea4b860 R13: 0x0000000000000001
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] R14: 0x00007fc80c400550 R15: 0x00007fc80e026880 EFL: 0x0000000000010202
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]-- C level backtrace information -------------------------------------------
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_vm_bugreport+0x96b) [0x7fc80e77adab]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_bug_for_fatal_signal+0x100) [0x7fc80e576720]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(sigsegv+0x4b) [0x7fc80e6c74db]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/lib/x86_64-linux-gnu/libc.so.6(0x7fc80e13a050) [0x7fc80e13a050]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(redblack_insert_aux+0x364) [0x7fc80e6c51b4]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(redblack_cache_ancestors+0x8f) [0x7fc80e6c552f]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(redblack_cache_ancestors+0x6d) [0x7fc80e6c550d]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(redblack_cache_ancestors+0x6d) [0x7fc80e6c550d]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(redblack_cache_ancestors+0x6d) [0x7fc80e6c550d]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(redblack_cache_ancestors+0x6d) [0x7fc80e6c550d]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(redblack_cache_ancestors+0x6d) [0x7fc80e6c550d]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_shape_get_next+0x2a8) [0x7fc80e6c6458]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_class_ivar_set+0xb0) [0x7fc80e742560]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_ivar_set+0x83) [0x7fc80e742743]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(vm_exec_core+0x8ca) [0x7fc80e75ea1a]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_vm_exec+0x179) [0x7fc80e7640f9]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(require_internal+0xd2f) [0x7fc80e5e84bf]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_require_string+0x66) [0x7fc80e5e9156]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(vm_call_cfunc_other+0x169) [0x7fc80e74cf29]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(vm_exec_core+0x129) [0x7fc80e75e279]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_vm_exec+0x179) [0x7fc80e7640f9]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(ruby_opt_init.part.0+0xbf) [0x7fc80e6c185f]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(load_file_internal+0x47e) [0x7fc80e6c1e7e]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_ensure+0x110) [0x7fc80e580190]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(process_options+0x15fb) [0x7fc80e6c38ab]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(ruby_process_options+0x145) [0x7fc80e6c3ff5]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(ruby_options+0xc9) [0x7fc80e581249]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby(0x56225c24510a) [0x56225c24510a]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/lib/x86_64-linux-gnu/libc.so.6(0x7fc80e12524a) [0x7fc80e12524a]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x85) [0x7fc80e125305]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby(_start+0x21) [0x56225c245151]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]-- Other runtime information -----------------------------------------------
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]* Loaded script: /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]* Loaded features:
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 0 enumerator.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 1 thread.rb
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 2 fiber.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 3 rational.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 4 complex.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 5 ruby2_keywords.rb
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 6 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/encdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 7 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/trans/transdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 8 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/rbconfig.rb
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 9 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems/compatibility.rb
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 10 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems/defaults.rb
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 11 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems/deprecate.rb
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 12 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems/errors.rb
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]* Process memory map:
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]56225c244000-56225c245000 r--p 00000000 fe:00 134645 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]56225c245000-56225c246000 r-xp 00001000 fe:00 134645 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]56225c246000-56225c247000 r--p 00002000 fe:00 134645 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]56225c247000-56225c248000 r--p 00002000 fe:00 134645 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]56225c248000-56225c249000 rw-p 00003000 fe:00 134645 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80994f000-7fc80a000000 r--s 00000000 fe:00 134864 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a000000-7fc80a400000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a54a000-7fc80a720000 r--s 00000000 fe:00 131782 /usr/lib/x86_64-linux-gnu/libc.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a720000-7fc80a7b0000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a7bf000-7fc80a7c0000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a7c0000-7fc80a861000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a861000-7fc80a862000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a862000-7fc80a903000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a903000-7fc80a904000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a904000-7fc80a9a5000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a9a5000-7fc80a9a6000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a9a6000-7fc80aa47000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80aa47000-7fc80aa48000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80aa48000-7fc80aae9000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80aae9000-7fc80aaea000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80aaea000-7fc80ab8b000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ab8b000-7fc80ab8c000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ab8c000-7fc80ac2d000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ac2d000-7fc80ac2e000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ac2e000-7fc80accf000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80accf000-7fc80acd0000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80acd0000-7fc80ad71000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ad71000-7fc80ad72000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ad72000-7fc80ae13000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ae13000-7fc80ae14000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ae14000-7fc80aeb5000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80aeb5000-7fc80aeb6000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80aeb6000-7fc80af57000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80af57000-7fc80af58000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80af58000-7fc80aff9000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80aff9000-7fc80affa000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80affa000-7fc80b09b000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b09b000-7fc80b09c000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b09c000-7fc80b13d000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b13d000-7fc80b13e000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b13e000-7fc80b1df000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b1df000-7fc80b1e0000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b1e0000-7fc80b281000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b281000-7fc80b282000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b282000-7fc80b323000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b323000-7fc80b324000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b324000-7fc80b3c5000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b3c5000-7fc80b3c6000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b3c6000-7fc80b467000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b467000-7fc80b468000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b468000-7fc80b509000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b509000-7fc80b50a000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b50a000-7fc80b5ab000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b5ab000-7fc80b5ac000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b5ac000-7fc80b64d000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b64d000-7fc80b64e000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b64e000-7fc80b6ef000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b6ef000-7fc80b6f0000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b6f0000-7fc80b791000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b791000-7fc80b792000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b792000-7fc80b833000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b833000-7fc80b834000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b834000-7fc80b8d5000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b8d5000-7fc80b8d6000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b8d6000-7fc80b977000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b977000-7fc80b978000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b978000-7fc80ba19000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ba19000-7fc80ba1a000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ba1a000-7fc80babb000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80babb000-7fc80babc000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80babc000-7fc80bb5d000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80bb5d000-7fc80bb5e000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80bb5e000-7fc80bbff000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80bbff000-7fc80bc00000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80bc00000-7fc80e000000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e010000-7fc80e020000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e020000-7fc80e070000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e074000-7fc80e075000 r--p 00000000 fe:00 136223 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/trans/transdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e075000-7fc80e076000 r-xp 00001000 fe:00 136223 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/trans/transdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e076000-7fc80e077000 r--p 00002000 fe:00 136223 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/trans/transdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e077000-7fc80e078000 r--p 00002000 fe:00 136223 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/trans/transdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e078000-7fc80e079000 rw-p 00003000 fe:00 136223 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/trans/transdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e079000-7fc80e07a000 r--p 00000000 fe:00 136179 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/encdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e07a000-7fc80e07b000 r-xp 00001000 fe:00 136179 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/encdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e07b000-7fc80e07c000 r--p 00002000 fe:00 136179 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/encdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e07c000-7fc80e07d000 r--p 00002000 fe:00 136179 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/encdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e07d000-7fc80e07e000 rw-p 00003000 fe:00 136179 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/encdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e07e000-7fc80e085000 r--s 00000000 fe:00 131755 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e085000-7fc80e0dc000 r--p 00000000 fe:00 131399 /usr/lib/locale/C.utf8/LC_CTYPE
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e0dc000-7fc80e0de000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e0de000-7fc80e0e1000 r--p 00000000 fe:00 131804 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e0e1000-7fc80e0f8000 r-xp 00003000 fe:00 131804 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e0f8000-7fc80e0fc000 r--p 0001a000 fe:00 131804 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e0fc000-7fc80e0fd000 r--p 0001d000 fe:00 131804 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e0fd000-7fc80e0fe000 rw-p 0001e000 fe:00 131804 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e0fe000-7fc80e124000 r--p 00000000 fe:00 131782 /usr/lib/x86_64-linux-gnu/libc.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e124000-7fc80e279000 r-xp 00026000 fe:00 131782 /usr/lib/x86_64-linux-gnu/libc.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e279000-7fc80e2cc000 r--p 0017b000 fe:00 131782 /usr/lib/x86_64-linux-gnu/libc.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e2cc000-7fc80e2d0000 r--p 001ce000 fe:00 131782 /usr/lib/x86_64-linux-gnu/libc.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e2d0000-7fc80e2d2000 rw-p 001d2000 fe:00 131782 /usr/lib/x86_64-linux-gnu/libc.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e2d2000-7fc80e2e1000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e2e1000-7fc80e2f1000 r--p 00000000 fe:00 131821 /usr/lib/x86_64-linux-gnu/libm.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e2f1000-7fc80e364000 r-xp 00010000 fe:00 131821 /usr/lib/x86_64-linux-gnu/libm.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e364000-7fc80e3be000 r--p 00083000 fe:00 131821 /usr/lib/x86_64-linux-gnu/libm.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3be000-7fc80e3bf000 r--p 000dc000 fe:00 131821 /usr/lib/x86_64-linux-gnu/libm.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3bf000-7fc80e3c0000 rw-p 000dd000 fe:00 131821 /usr/lib/x86_64-linux-gnu/libm.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3c0000-7fc80e3c2000 r--p 00000000 fe:00 131791 /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3c2000-7fc80e3d8000 r-xp 00002000 fe:00 131791 /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3d8000-7fc80e3f2000 r--p 00018000 fe:00 131791 /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3f2000-7fc80e3f3000 r--p 00031000 fe:00 131791 /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3f3000-7fc80e3f4000 rw-p 00032000 fe:00 131791 /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3f4000-7fc80e3fc000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3fc000-7fc80e3ff000 r--p 00000000 fe:00 134861 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libjemalloc.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3ff000-7fc80e436000 r-xp 00003000 fe:00 134861 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libjemalloc.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e436000-7fc80e43e000 r--p 0003a000 fe:00 134861 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libjemalloc.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e43e000-7fc80e440000 r--p 00042000 fe:00 134861 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libjemalloc.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e440000-7fc80e441000 rw-p 00044000 fe:00 134861 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libjemalloc.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e441000-7fc80e442000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e442000-7fc80e445000 r--p 00000000 fe:00 131881 /usr/lib/x86_64-linux-gnu/libz.so.1.2.13
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e445000-7fc80e458000 r-xp 00003000 fe:00 131881 /usr/lib/x86_64-linux-gnu/libz.so.1.2.13
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e458000-7fc80e45f000 r--p 00016000 fe:00 131881 /usr/lib/x86_64-linux-gnu/libz.so.1.2.13
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e45f000-7fc80e460000 r--p 0001c000 fe:00 131881 /usr/lib/x86_64-linux-gnu/libz.so.1.2.13
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e460000-7fc80e461000 rw-p 0001d000 fe:00 131881 /usr/lib/x86_64-linux-gnu/libz.so.1.2.13
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e461000-7fc80e465000 r--s 00000000 fe:00 134645 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e465000-7fc80e4b0000 r--p 00000000 fe:00 134864 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e4b0000-7fc80e89a000 r-xp 0004b000 fe:00 134864 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e89a000-7fc80ea21000 r--p 00435000 fe:00 134864 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ea21000-7fc80ea38000 r--p 005bb000 fe:00 134864 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ea38000-7fc80ea3c000 rw-p 005d2000 fe:00 134864 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ea3c000-7fc80ea53000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ea53000-7fc80ea54000 r--p 00000000 fe:00 131764 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ea54000-7fc80ea79000 r-xp 00001000 fe:00 131764 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ea79000-7fc80ea83000 r--p 00026000 fe:00 131764 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ea83000-7fc80ea85000 r--p 00030000 fe:00 131764 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ea85000-7fc80ea87000 rw-p 00032000 fe:00 131764 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7ffee523b000-7ffee5a3a000 rw-p 00000000 00:00 0 [stack]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7ffee5ba8000-7ffee5bac000 r--p 00000000 00:00 0 [vvar]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7ffee5bac000-7ffee5bae000 r-xp 00000000 00:00 0 [vdso]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
</code></pre>
Ruby master - Bug #20328 (Open): optparse omits the option's description in the --help output if ...
https://redmine.ruby-lang.org/issues/20328
2024-03-07T22:03:25Z
postmodern (Hal Brodigan)
postmodern.mod3@gmail.com
<p>If you define an option using <code>OptionParser#on</code>, but give the option's description as a multi-line Array, then the option's description is omitted from the <code>--help</code> output.</p>
<a name="Steps-To-Reproduce"></a>
<h2 >Steps To Reproduce<a href="#Steps-To-Reproduce" class="wiki-anchor">¶</a></h2>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1">#!/usr/bin/env ruby</span>
<span class="nb">require</span> <span class="s1">'optparse'</span>
<span class="n">optparser</span> <span class="o">=</span> <span class="no">OptionParser</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span> <span class="o">|</span><span class="n">opts</span><span class="o">|</span>
<span class="n">opts</span><span class="p">.</span><span class="nf">banner</span> <span class="o">=</span> <span class="s1">'usage: test.rb [options]'</span>
<span class="n">opts</span><span class="p">.</span><span class="nf">on</span><span class="p">(</span><span class="s1">'-o'</span><span class="p">,</span> <span class="s1">'--opt [OPT]'</span><span class="p">,</span> <span class="s1">'Line one'</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">opt</span><span class="o">|</span>
<span class="k">end</span>
<span class="n">opts</span><span class="p">.</span><span class="nf">on</span><span class="p">(</span><span class="s1">'-m'</span><span class="p">,</span> <span class="s1">'--multiline-opt'</span><span class="p">,</span> <span class="p">[</span><span class="s1">'Line one'</span><span class="p">,</span> <span class="s1">'Line two'</span><span class="p">])</span> <span class="k">do</span> <span class="o">|</span><span class="nb">test</span><span class="o">|</span>
<span class="k">end</span>
<span class="n">opts</span><span class="p">.</span><span class="nf">on</span><span class="p">(</span><span class="s1">'-h'</span><span class="p">,</span> <span class="s1">'--help'</span><span class="p">,</span> <span class="s1">'Prints this help'</span><span class="p">)</span> <span class="k">do</span>
<span class="nb">puts</span> <span class="n">opts</span>
<span class="nb">exit</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">optparser</span><span class="p">.</span><span class="nf">parse</span><span class="p">([</span><span class="s1">'--help'</span><span class="p">])</span>
</code></pre>
<a name="Expected-result"></a>
<h3 >Expected result<a href="#Expected-result" class="wiki-anchor">¶</a></h3>
<pre><code>usage: test.rb [options]
-o, --opt [OPT] Line one
-m, --multiline-opt Line one
Line two
-h, --help Prints this help
</code></pre>
<a name="Actual-Result"></a>
<h3 >Actual Result<a href="#Actual-Result" class="wiki-anchor">¶</a></h3>
<pre><code>usage: test.rb [options]
-o, --opt [OPT] Line one
-m, --multiline-opt
-h, --help Prints this help
</code></pre>
<p>or an <code>ArgumentError</code> should be raised if Array descriptions are not allowed/supported.</p>
<a name="Version-Info"></a>
<h2 >Version Info<a href="#Version-Info" class="wiki-anchor">¶</a></h2>
<p>Tested against optparse 0.1.0, 0.2.0, 0.3.1, and the master branch.</p>
Ruby master - Bug #20325 (Open): Enumerator.product.size bug with zero * infinite enumerators
https://redmine.ruby-lang.org/issues/20325
2024-03-05T15:21:08Z
marcandre (Marc-Andre Lafortune)
marcandre-ruby-core@marc-andre.ca
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">Enumerator</span><span class="p">.</span><span class="nf">product</span><span class="p">([],</span> <span class="mi">1</span><span class="o">..</span><span class="p">).</span><span class="nf">to_a</span> <span class="c1"># => [] (OK)</span>
<span class="no">Enumerator</span><span class="p">.</span><span class="nf">product</span><span class="p">([],</span> <span class="mi">1</span><span class="o">..</span><span class="p">).</span><span class="nf">size</span> <span class="c1"># => Infinity (Should be 0)</span>
</code></pre>
Ruby master - Bug #20315 (Open): Quantifier expansion leads to different results in Regexp.
https://redmine.ruby-lang.org/issues/20315
2024-02-29T16:59:34Z
jirkamarsik (Jirka Marsik)
<p>Consider the following series of regular expression matches:</p>
<pre><code>irb(main):001:0> /(|a)(|a)(|a)(|a)(|a)b/.match("aaaab")
=> #<MatchData "aaaab" 1:"" 2:"a" 3:"a" 4:"a" 5:"a">
irb(main):002:0> /(|a)(|a)(|a)(|a)b/.match("aaab")
=> #<MatchData "aaab" 1:"" 2:"a" 3:"a" 4:"a">
irb(main):003:0> /(|a)(|a)(|a)b/.match("aab")
=> #<MatchData "aab" 1:"" 2:"a" 3:"a">
irb(main):004:0> /(|a)(|a)b/.match("ab")
=> #<MatchData "ab" 1:"" 2:"a">
</code></pre>
<p>Let <code>X^{N}</code> mean <code>N</code> concatenated repetitions of <code>X</code>. When matching the pattern <code>/(|a)^{N}b/</code> against <code>a^{N-1}b</code>, the first group will match the empty string and the last <code>N-1</code> groups will match <code>a</code>.</p>
<p>Now, let's look at this series of similar expressions, in which <code>(|a)^{N}</code> is replaced with <code>(|a){N}</code>, i.e. a counted quantifier.</p>
<pre><code>irb(main):001:0> /(|a){5}b/.match("aaaab")
=> #<MatchData "aaaab" 1:"">
irb(main):002:0> /(|a){4}b/.match("aaab")
=> #<MatchData "aaab" 1:"">
irb(main):003:0> /(|a){3}b/.match("aab")
=> #<MatchData "aab" 1:"">
irb(main):004:0> /(|a){2}b/.match("ab")
=> #<MatchData "ab" 1:"a">
</code></pre>
<p>When matching the pattern <code>/(|a){N}b/</code> against <code>a^{N-1}b</code>, the first <code>N-1</code> iterations will match <code>a</code> and the <code>N</code>-th iteration will match the empty string (compare this with the behavior of the first series of expressions). However, something strange happens when <code>N</code> is 2. We end up getting a result which is not consistent with this series, but looks like a result that belongs to the first series discussed above.</p>
<p>This is due to quantifier expansion done by the regexp compiler (see usages of <code>QUANTIFIER_EXPAND_LIMIT_SIZE</code> in <code>regcomp.c</code>). This is an optimization that tries to remove the overhead of managing a counted repetition during regex execution at the cost of increasing the size of the compiled regex bytecode. The source of the inconsistency is caused by the fact that this optimization can actually change the semantics of the regular expression, because as we have seen above, <code>X^{N}</code> (<code>X</code> repeated <code>N</code> times) can have different semantics from <code>X{N}</code> (a single <code>X</code> with an <code>{N}</code> quantifier).</p>
<p>Compilation and execution of <code>/(|a){3}b/.match("aab")</code> with <code>ONIG_DEBUG_PARSE_TREE</code>, <code>ONIG_DEBUG_COMPILE</code> and <code>ONIG_DEBUG_MATCH</code>:</p>
<pre><code>PATTERN: /(|a){3}b/ (US-ASCII)
<list:556161bb11f0>
<quantifier:556161bb1230>{3,3}
<enclose:556161bb1330> memory:1
<alt:556161bb11b0>
<string:556161bb12f0>
<string:556161bb12b0>a
<string:556161bb13b0>b
optimize: EXACT
anchor: []
sub anchor: []
exact: [b]: length: 1
code length: 37
0:[repeat:0:27] 7:[null-check-start:0] 10:[mem-start:1] 13:[push:(+5)] 18:[jump:(+2)]
23:[exact1:a] 25:[mem-end:1] 28:[null-check-end-memst:0] 31:[repeat-inc:0] 34:[exact1:b]
36:[end]
match_at: str: 140607416406704 (0x7fe1b71b92b0), end: 140607416406706 (0x7fe1b71b92b2), start: 140607416406704 (0x7fe1b71b92b0), sprev: 0 ((nil))
size: 2, start offset: 0
ofs> str stk:type addr:opcode
0> "ab" 0:Alt 0:[repeat:0:27]
0> "ab" 1:Rep 7:[null-check-start:0]
0> "ab" 2:NulChS 10:[mem-start:1]
0> "ab" 2:NulChS 13:[push:(+5)]
0> "ab" 3:Alt 18:[jump:(+2)]
0> "ab" 3:Alt 25:[mem-end:1]
0> "ab" 3:Alt 28:[null-check-end-memst:0]
NULL_CHECK_END_MEMST: skip id:0, s:140607416406704 (0x7fe1b71b92b0)
0> "ab" 3:Alt 34:[exact1:b]
0> "ab" 2:NulChS 23:[exact1:a]
1> "b" 2:NulChS 25:[mem-end:1]
1> "b" 2:NulChS 28:[null-check-end-memst:0]
1> "b" 2:NulChS 31:[repeat-inc:0]
1> "b" 3:RepInc 7:[null-check-start:0]
1> "b" 4:NulChS 10:[mem-start:1]
1> "b" 4:NulChS 13:[push:(+5)]
1> "b" 5:Alt 18:[jump:(+2)]
1> "b" 5:Alt 25:[mem-end:1]
1> "b" 5:Alt 28:[null-check-end-memst:0]
NULL_CHECK_END_MEMST: skip id:0, s:140607416406705 (0x7fe1b71b92b1)
1> "b" 5:Alt 34:[exact1:b]
2> "" 5:Alt 36:[end]
</code></pre>
<p>Compilation and execution of <code>/(|a){2}b/.match("ab")</code> with <code>ONIG_DEBUG_PARSE_TREE</code>, <code>ONIG_DEBUG_COMPILE</code> and <code>ONIG_DEBUG_MATCH</code>:</p>
<pre><code>PATTERN: /(|a){2}b/ (US-ASCII)
<list:55bbc826c1f0>
<quantifier:55bbc826c230>{2,2}
<enclose:55bbc826c330> memory:1
<alt:55bbc826c1b0>
<string:55bbc826c2f0>
<string:55bbc826c2b0>a
<string:55bbc826c3b0>b
optimize: EXACT
anchor: []
sub anchor: []
exact: [b]: length: 1
code length: 39
0:[mem-start:1] 3:[push:(+5)] 8:[jump:(+2)] 13:[exact1:a] 15:[mem-end:1]
18:[mem-start:1] 21:[push:(+5)] 26:[jump:(+2)] 31:[exact1:a] 33:[mem-end:1]
36:[exact1:b] 38:[end]
match_at: str: 140139875963504 (0x7f74db869270), end: 140139875963506 (0x7f74db869272), start: 140139875963504 (0x7f74db869270), sprev: 0 ((nil))
size: 2, start offset: 0
ofs> str stk:type addr:opcode
0> "ab" 0:Alt 0:[mem-start:1]
0> "ab" 0:Alt 3:[push:(+5)]
0> "ab" 1:Alt 8:[jump:(+2)]
0> "ab" 1:Alt 15:[mem-end:1]
0> "ab" 1:Alt 18:[mem-start:1]
0> "ab" 1:Alt 21:[push:(+5)]
0> "ab" 2:Alt 26:[jump:(+2)]
0> "ab" 2:Alt 33:[mem-end:1]
0> "ab" 2:Alt 36:[exact1:b]
0> "ab" 1:Alt 31:[exact1:a]
1> "b" 1:Alt 33:[mem-end:1]
1> "b" 1:Alt 36:[exact1:b]
2> "" 1:Alt 38:[end]
</code></pre>
Ruby master - Bug #20294 (Open): Parser no longer warns on some duplicated keys
https://redmine.ruby-lang.org/issues/20294
2024-02-22T14:09:39Z
kddnewton (Kevin Newton)
kddnewton@gmail.com
<p>Previously, the parser would warn on all duplicated keys. Now some cases are not handled:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="p">{</span> <span class="mf">100.0</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span> <span class="mf">1e2</span> <span class="o">=></span> <span class="mi">1</span> <span class="p">}</span>
<span class="p">{</span> <span class="mf">100.0</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span> <span class="mf">1E2</span> <span class="o">=></span> <span class="mi">1</span> <span class="p">}</span>
<span class="p">{</span> <span class="mf">100.0</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span> <span class="mf">100.00</span> <span class="o">=></span> <span class="mi">1</span> <span class="p">}</span>
<span class="p">{</span> <span class="mf">100.0</span><span class="n">r</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span> <span class="mf">100.00</span><span class="n">r</span> <span class="o">=></span> <span class="mi">1</span> <span class="p">}</span>
<span class="p">{</span> <span class="mf">100.0</span><span class="n">i</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span> <span class="mf">100.00</span><span class="n">i</span> <span class="o">=></span> <span class="mi">1</span> <span class="p">}</span>
</code></pre>
Ruby master - Bug #20283 (Open): Build failed since Ruby 3.2.3 if Xcode.app was renamed to space ...
https://redmine.ruby-lang.org/issues/20283
2024-02-20T06:41:28Z
watson1978 (Shizuo Fujita)
watson1978@gmail.com
<p>When I renamed Xcode.app to space contained name (like <code>Xcode 15.2.0.app</code>), then I met build error with Ruby 3.2.3 and Ruby 3.3.0.<br>
(Ruby 3.2.2 can be built with successfully.)</p>
<a name="How-to-reproduce"></a>
<h2 >How to reproduce<a href="#How-to-reproduce" class="wiki-anchor">¶</a></h2>
<pre><code>$ sudo mv /Applications/Xcode.app '/Applications/Xcode 15.2.app'
$ sudo xcode-select --switch '/Applications/Xcode 15.2.app'
$ tar xzf ruby-3.2.3.tar.xz
$ cd ruby-3.2.3
$ ./configure
$ make V=1
:
clang -fdeclspec -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wextra-tokens -Wdeprecated-declarations -Wdivision-by-zero -Wdiv-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wold-style-definition -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wundef -pipe -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-overflow -fvisibility=hidden -DRUBY_EXPORT -fPIE -I. -I.ext/include/arm64-darwin23 -I./include -I. -I./enc/unicode/15.0.0 -I/opt/homebrew/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -o dmyenc.o -c dmyenc.c
rustc --crate-name=yjit --crate-type=staticlib --edition=2021 -g -C opt-level=3 -C overflow-checks=on '--out-dir=/Users/watson/prj/ruby-3.2.3/yjit/target/release/' ./yjit/src/lib.rs
touch yjit/target/release/libyjit.a
clang -fdeclspec -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wextra-tokens -Wdeprecated-declarations -Wdivision-by-zero -Wdiv-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wold-style-definition -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wundef -pipe -L. -L/opt/homebrew/lib -fstack-protector-strong -fstack-protector-strong -Wl,-pie -framework CoreFoundation main.o dmydln.o miniinit.o dmyext.o array.o ast.o bignum.o class.o compar.o compile.o complex.o cont.o debug.o debug_counter.o dir.o dln_find.o encoding.o enum.o enumerator.o error.o eval.o file.o gc.o hash.o inits.o io.o io_buffer.o iseq.o load.o marshal.o math.o memory_view.o mjit.o mjit_c.o node.o numeric.o object.o pack.o parse.o proc.o process.o ractor.o random.o range.o rational.o re.o regcomp.o regenc.o regerror.o regexec.o regparse.o regsyntax.o ruby.o scheduler.o shape.o signal.o sprintf.o st.o strftime.o string.o struct.o symbol.o thread.o time.o transcode.o transient_heap.o util.o variable.o version.o vm.o vm_backtrace.o vm_dump.o vm_sync.o vm_trace.o yjit.o coroutine/arm64/Context.o enc/ascii.o enc/us_ascii.o enc/unicode.o enc/utf_8.o enc/trans/newline.o explicit_bzero.o setproctitle.o addr2line.o yjit/target/release/libyjit.a -lgmp -ldl -lobjc -lpthread -lpthread -o miniruby
ld: warning: ignoring duplicate libraries: '-lpthread'
ld: Undefined symbols:
_coroutine_transfer, referenced from:
_fiber_setcontext in cont.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)
</code></pre>
<a name="Environment"></a>
<h2 >Environment<a href="#Environment" class="wiki-anchor">¶</a></h2>
<ul>
<li>Apple M1 Max</li>
<li>macOS 14.3.1</li>
<li>clang 15.0.0 (clang-1500.1.0.2.5)</li>
<li>rustc 1.75.0</li>
</ul>
<a name="Note"></a>
<h2 >Note<a href="#Note" class="wiki-anchor">¶</a></h2>
<p>This problem occurs on Intel Mac and Apple M1 Mac both.</p>
Ruby master - Bug #20271 (Open): Issue with moving embedded string across ractors
https://redmine.ruby-lang.org/issues/20271
2024-02-16T16:29:35Z
luke-gru (Luke Gruber)
luke.gru@gmail.com
<p>When embedded strings are moved, not all the embedded bytes are copied over to the new embedded string. This shows itself when<br>
an embedded string has more than 16 characters.</p>
<p>For example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">r</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span>
<span class="n">foo</span> <span class="o">=</span> <span class="n">receive</span>
<span class="nb">puts</span> <span class="n">foo</span>
<span class="n">foo</span>
<span class="p">}</span>
<span class="n">obj</span> <span class="o">=</span> <span class="s2">"12345678"</span> <span class="o">*</span> <span class="mi">3</span>
<span class="nb">puts</span> <span class="n">obj</span>
<span class="n">r</span><span class="p">.</span><span class="nf">send</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="ss">move: </span><span class="kp">true</span><span class="p">)</span>
<span class="n">r</span><span class="p">.</span><span class="nf">take</span>
</code></pre>
<pre><code>123456781234567812345678
1234567812345678
</code></pre>
Ruby master - Bug #20269 (Open): bignum too big to convert into `long' when running String#bytesl...
https://redmine.ruby-lang.org/issues/20269
2024-02-15T16:22:39Z
simpliandy (Andy Pfister)
andy.pfister@simplificator.com
<p>Running <code>String#byteslice</code> on Ruby 3.3 on Windows results in an error when using any number bigger than 32 bits:</p>
<pre><code>"".byteslice(0, 2547483647)
(irb):1:in `byteslice': bignum too big to convert into `long' (RangeError)
from (irb):1:in `<main>'
from <internal:kernel>:187:in `loop'
from C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/irb-1.11.0/exe/irb:9:in `<top (required)>'
from C:/Ruby33-x64/bin/irb:33:in `load'
from C:/Ruby33-x64/bin/irb:33:in `<main>'
</code></pre>
<p>It works fine on MacOS:</p>
<pre><code>irb(main):001> "".byteslice(0, 2547483647)
=> ""
irb(main):002> exit
Andys-MBP:project apf$ ruby -v
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-darwin23]
</code></pre>
Ruby master - Bug #20267 (Open): Hashes that use ar_table aren't moved properly across ractors
https://redmine.ruby-lang.org/issues/20267
2024-02-15T15:56:49Z
luke-gru (Luke Gruber)
luke.gru@gmail.com
<p>This crashes in debug build and gives weird results in non debug build, because the ar_table values aren't copied over to the new "embedded" hash during a move across ractors.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">r</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span>
<span class="nb">hash</span> <span class="o">=</span> <span class="n">receive</span>
<span class="nb">puts</span> <span class="nb">hash</span>
<span class="p">}</span>
<span class="n">obj</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">"1"</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span>
<span class="s2">"2"</span> <span class="o">=></span> <span class="mi">2</span><span class="p">,</span>
<span class="s2">"3"</span> <span class="o">=></span> <span class="mi">3</span><span class="p">,</span>
<span class="p">}</span>
<span class="nb">puts</span> <span class="n">obj</span>
<span class="n">r</span><span class="p">.</span><span class="nf">send</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="ss">move: </span><span class="kp">true</span><span class="p">)</span>
<span class="n">r</span><span class="p">.</span><span class="nf">take</span>
</code></pre>
<p>Crash log:</p>
<pre><code>/home/lukeg/workspace/ruby-build/miniruby(sigsegv+0x4d) [0x5641e67d105d] ../ruby/signal.c:926
/lib/x86_64-linux-gnu/libc.so.6(0x7fb4baa42520) [0x7fb4baa42520]
/home/lukeg/workspace/ruby-build/miniruby(RB_BUILTIN_TYPE+0x0) [0x5641e6778db0] ../ruby/ractor.c:3128
/home/lukeg/workspace/ruby-build/miniruby(rbimpl_RB_TYPE_P_fastpath) ../ruby/include/ruby/internal/value_type.h:351
/home/lukeg/workspace/ruby-build/miniruby(RB_TYPE_P) ../ruby/include/ruby/internal/value_type.h:378
/home/lukeg/workspace/ruby-build/miniruby(RB_FL_ABLE) ../ruby/include/ruby/internal/fl_type.h:449
/home/lukeg/workspace/ruby-build/miniruby(RB_FL_TEST_RAW) ../ruby/include/ruby/internal/fl_type.h:471
/home/lukeg/workspace/ruby-build/miniruby(rb_ractor_shareable_p) ../ruby/include/ruby/ractor.h:256
/home/lukeg/workspace/ruby-build/miniruby(reset_belonging_enter) ../ruby/ractor.c:3121
</code></pre>
Ruby master - Bug #20243 (Open): M:N threading VM_ASSERT failure in rb_current_execution_context ...
https://redmine.ruby-lang.org/issues/20243
2024-02-07T09:18:09Z
kjtsanaktsidis (KJ Tsanaktsidis)
kjtsanaktsidis@gmail.com
<p>When building with Clang 17 and <code>-DVM_CHECK_MODE=1</code> (with the following configure)</p>
<pre><code>optflags="-ggdb3 -fno-omit-frame-pointer -fno-optimize-sibling-calls -O3" cflags="-DVM_CHECK_MODE=1" CC=clang ../configure --prefix=/home/kj/ruby/installed --enable-yjit=dev --disable-install-doc
</code></pre>
<p>And then running the following script with the built <code>./miniruby</code> (which is actually from <code>bootstraptest/test_ractor.rb</code>):</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">counts</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">counts</span> <span class="o"><<</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">count</span>
<span class="n">ractors</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="o">..</span><span class="mi">3</span><span class="p">).</span><span class="nf">map</span> <span class="p">{</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">receive</span> <span class="p">}</span> <span class="p">}</span>
<span class="n">counts</span> <span class="o"><<</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">count</span>
<span class="n">ractors</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nf">send</span><span class="p">(</span><span class="s1">'End 0'</span><span class="p">).</span><span class="nf">take</span>
<span class="nb">sleep</span> <span class="mf">0.1</span> <span class="k">until</span> <span class="n">ractors</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nf">inspect</span> <span class="o">=~</span> <span class="sr">/terminated/</span>
<span class="n">counts</span> <span class="o"><<</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">count</span>
<span class="n">ractors</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="nf">send</span><span class="p">(</span><span class="s1">'End 1'</span><span class="p">).</span><span class="nf">take</span>
<span class="nb">sleep</span> <span class="mf">0.1</span> <span class="k">until</span> <span class="n">ractors</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="nf">inspect</span> <span class="o">=~</span> <span class="sr">/terminated/</span>
<span class="n">counts</span> <span class="o"><<</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">count</span>
<span class="n">ractors</span><span class="p">[</span><span class="mi">2</span><span class="p">].</span><span class="nf">send</span><span class="p">(</span><span class="s1">'End 2'</span><span class="p">).</span><span class="nf">take</span>
<span class="nb">sleep</span> <span class="mf">0.1</span> <span class="k">until</span> <span class="n">ractors</span><span class="p">[</span><span class="mi">2</span><span class="p">].</span><span class="nf">inspect</span> <span class="o">=~</span> <span class="sr">/terminated/</span>
<span class="n">counts</span> <span class="o"><<</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">count</span>
<span class="n">counts</span><span class="p">.</span><span class="nf">inspect</span>
</code></pre>
<p>I get the following crash:</p>
<pre><code>Assertion Failed: ../vm_core.h:1957:rb_current_execution_context:ec == rb_current_ec_noinline()
ruby 3.4.0dev (2024-02-07T07:52:06Z ktsanaktsidis/igno.. 5cc6d944c2) [x86_64-linux]
-- Control frame information -----------------------------------------------
c:0003 p:0003 s:0010 e:000009 METHOD <internal:ractor>:431
c:0002 p:0004 s:0006 e:000005 BLOCK ractor_crash.rb:3 [FINISH]
c:0001 p:---- s:0003 e:000002 DUMMY [FINISH]
-- Ruby level backtrace information ----------------------------------------
ractor_crash.rb:3:in `block (2 levels) in <main>'
<internal:ractor>:431:in `receive'
-- Threading information ---------------------------------------------------
Total ractor count: 2
Ruby thread count for this ractor: 1
-- C level backtrace information -------------------------------------------
/home/kj/ruby/build/miniruby(rb_print_backtrace+0x14) [0x55faa97a4ebd] ../vm_dump.c:820
/home/kj/ruby/build/miniruby(rb_vm_bugreport) ../vm_dump.c:1151
/home/kj/ruby/build/miniruby(rb_assert_failure+0x81) [0x55faa94d2719] ../error.c:1131
./miniruby(thread_sched_wait_running_turn+0x2e9) [0x55faa9726f59]
/home/kj/ruby/build/miniruby(rb_ractor_sched_sleep+0x10b) [0x55faa972687b] ../thread_pthread.c:1348
/home/kj/ruby/build/miniruby(ractor_check_ints+0x0) [0x55faa968b328] ../ractor.c:683
/home/kj/ruby/build/miniruby(ractor_sleep_with_cleanup) ../ractor.c:684
/home/kj/ruby/build/miniruby(ractor_sleep+0x15) [0x55faa968adf4] ../ractor.c:701
/home/kj/ruby/build/miniruby(ractor_wait_receive) ../ractor.c:748
/home/kj/ruby/build/miniruby(ractor_receive+0x1f) [0x55faa968768e] ../ractor.c:762
/home/kj/ruby/build/miniruby(builtin_inline_class_431) ../ractor.rb:432
/home/kj/ruby/build/miniruby(builtin_invoker0+0x6) [0x55faa978fc66] ../vm_insnhelper.c:6746
/home/kj/ruby/build/miniruby(invoke_bf+0x39) [0x55faa979816e] ../vm_insnhelper.c:6886
/home/kj/ruby/build/miniruby(vm_invoke_builtin_delegate) ../vm_insnhelper.c:6909
/home/kj/ruby/build/miniruby(rb_vm_check_ints+0x0) [0x55faa9771fac] ../insns.def:1533
/home/kj/ruby/build/miniruby(vm_pop_frame) ../vm_insnhelper.c:419
/home/kj/ruby/build/miniruby(vm_exec_core) ../insns.def:1537
/home/kj/ruby/build/miniruby(vm_exec_loop+0x0) [0x55faa9767f02] ../vm.c:2489
/home/kj/ruby/build/miniruby(rb_vm_exec) ../vm.c:2492
/home/kj/ruby/build/miniruby(invoke_block+0x6f) [0x55faa9781a58] ../vm.c:1512
/home/kj/ruby/build/miniruby(invoke_iseq_block_from_c) ../vm.c:1582
/home/kj/ruby/build/miniruby(invoke_block_from_c_proc) ../vm.c:1680
/home/kj/ruby/build/miniruby(vm_invoke_proc) ../vm.c:1710
/home/kj/ruby/build/miniruby(rb_vm_invoke_proc_with_self+0x5a) [0x55faa9781eaa] ../vm.c:1745
/home/kj/ruby/build/miniruby(thread_do_start_proc+0x199) [0x55faa9739e19] ../thread.c:574
/home/kj/ruby/build/miniruby(thread_do_start+0x6c) [0x55faa973933f] ../thread.c:618
/home/kj/ruby/build/miniruby(thread_start_func_2) ../thread.c:668
/home/kj/ruby/build/miniruby(rb_native_mutex_lock+0x0) [0x55faa973a141] ../thread_pthread.c:2234
/home/kj/ruby/build/miniruby(thread_sched_lock_) ../thread_pthread.c:387
/home/kj/ruby/build/miniruby(call_thread_start_func_2) ../thread_pthread_mn.c:436
/home/kj/ruby/build/miniruby(co_start) ../thread_pthread_mn.c:434
</code></pre>
<p>The failing assertion is this one in vm_core.h: <a href="https://github.com/ruby/ruby/blob/42c36269403baac67b0d5dc1d6d6e31168cf6a1f/vm_core.h#L1957" class="external">https://github.com/ruby/ruby/blob/42c36269403baac67b0d5dc1d6d6e31168cf6a1f/vm_core.h#L1957</a>. It actually has a very helpful comment.</p>
<pre><code> /* On the shared objects, `__tls_get_addr()` is used to access the TLS
* and the address of the `ruby_current_ec` can be stored on a function
* frame. However, this address can be mis-used after native thread
* migration of a coroutine.
* 1) Get `ptr =&ruby_current_ec` op NT1 and store it on the frame.
* 2) Context switch and resume it on the NT2.
* 3) `ptr` is used on NT2 but it accesses to the TLS on NT1.
* This assertion checks such misusage.
*
* To avoid accidents, `GET_EC()` should be called once on the frame.
* Note that inlining can produce the problem.
*/
VM_ASSERT(ec == rb_current_ec_noinline());
</code></pre>
<p>What seems to be happening is exactly that. This is a disassembly of the relevant bits of <code>thread_sched_wait_running_turn</code>:</p>
<pre><code>........
# This is the only bits of the entire function which access the TLS base register %fs.
# It seems to have spilled the value of ruby_current_ec into %r13.
0x000055603d2e1cf8 <+136>: mov $0xffffffffffffff90,%rax
0x000055603d2e1cff <+143>: mov %fs:0x0,%r12
0x000055603d2e1d08 <+152>: add %rax,%r12
0x000055603d2e1d0b <+155>: mov %fs:(%rax),%r13
........
# There's a call to coroutine_transfer, so after this point we're returned to on a
# different thread
0x000055603d2e1e90 <+544>: call 0x55603d7fce84 <coroutine_transfer>
# But nothing ever loads the address of ruby_current_ec from %fs again (i didn't trace
# exactly the data flow from %r13 at 0x000055603d2e1d0b to here, but i assume it spilled
# somewhere and now got loaded back into %r15 here). In any case, that means %r15 here
# contains the value of ruby_current_ec from the _old_ thread, not the current one.
0x000055603d2e1e95 <+549>: mov %rbx,0x28(%r14)
0x000055603d2e1e99 <+553>: mov (%r12),%r15
0x000055603d2e1e9d <+557>: call 0x55603d33a010 <rb_current_ec_noinline>
0x000055603d2e1ea2 <+562>: cmp %rax,%r15
=> 0x000055603d2e1ea5 <+565>: jne 0x55603d2e1f3a <thread_sched_wait_running_turn+714>
........
# assertion failure code path.
0x000055603d2e1f3a <+714>: lea 0x542c0c(%rip),%rdi # 0x55603d824b4d
0x000055603d2e1f41 <+721>: lea 0x542c12(%rip),%rdx # 0x55603d824b5a
0x000055603d2e1f48 <+728>: lea 0x542c28(%rip),%rcx # 0x55603d824b77
0x000055603d2e1f4f <+735>: mov $0x7a5,%esi
0x000055603d2e1f54 <+740>: call 0x55603d08d698 <rb_assert_failure>
</code></pre>
<p>if we look at the register values from <code>0x000055603d2e1ea2</code>:</p>
<pre><code>(rr) print/x $rax
$2 = 0x55603e159ad0
(rr) print/x $r15
$3 = 0x0
</code></pre>
<p>So the value from <code>%rax</code> which came from <code>ruby_current_ec_noinline</code> is correctly the value of <code>ruby_current_ec</code> for this thread, and <code>%r15</code> contains a stale value from a previous thread.</p>
<ul>
<li>
</ul>
<p>Now, what can we <em>do</em> about this, is a different question :/ There's a really good stackoverflow answer about it here: <a href="https://stackoverflow.com/questions/75592038/how-to-disable-clang-expression-elimination-for-thread-local-variable" class="external">https://stackoverflow.com/questions/75592038/how-to-disable-clang-expression-elimination-for-thread-local-variable</a>, but to summarise</p>
<ul>
<li>longstanding GCC and Clang bugs for this exist and have been marked as WONTFIX (<a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=26461" class="external">https://gcc.gnu.org/bugzilla/show_bug.cgi?id=26461</a>, <a href="https://github.com/llvm/llvm-project/issues/19551" class="external">https://github.com/llvm/llvm-project/issues/19551</a>)</li>
<li>It's even worse than this EC problem - things like <code>errno</code> also might be incorrectly persisted across coroutine switches (so e.g. an inlined C library function could in theory set <code>errno</code> in another thread, for example)</li>
<li>C++ actually has coroutines now, so this <em>must</em> work for those. Clang at least has fixed some TLS problems in their C++ coroutine implementation (<a href="https://github.com/llvm/llvm-project/issues/47179" class="external">https://github.com/llvm/llvm-project/issues/47179</a>)</li>
</ul>
<p>Other than reimplementing all of our coroutine stuff on top of C++ coroutines, I'm not sure what else we can do. AFAICT there's no way to tell the compiler that we clobbered the <code>%fs</code> register because that's just not a thing in its model (<a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66631" class="external">https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66631</a>, but i assume clang is similar).</p>
<p>Thoughts? For now I think my workaround is to disable M:N at build time when building with ASAN (or turn optimizations down). At least this isn't a problem with <code>Fiber</code> because we never move them across threads (probably for this reason in part).</p>
Ruby master - Bug #20216 (Open): Circular parameter reference not checked for assignment
https://redmine.ruby-lang.org/issues/20216
2024-01-26T18:25:53Z
kddnewton (Kevin Newton)
kddnewton@gmail.com
<p>I wanted to check if this was a bug or desired.</p>
<p>Usually when you reference a parameter within its own default value (optional positional or optional keyword) it raises a syntax error. This is unless you use it in an assignment, in which case it is not checked. Is this desired? Here's an example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">foo</span><span class="p">(</span><span class="n">bar</span> <span class="o">=</span> <span class="n">bar</span> <span class="o">=</span> <span class="mi">1</span><span class="p">);</span> <span class="k">end</span>
<span class="k">def</span> <span class="nf">foo</span><span class="p">(</span><span class="ss">bar: </span><span class="n">bar</span> <span class="o">=</span> <span class="mi">1</span><span class="p">);</span> <span class="k">end</span>
</code></pre>
<p>I'm not sure what this code is supposed to be doing. I expected it to raise a syntax error.</p>
Ruby master - Bug #20168 (Open): Process won't exit when Ractor.select waiting a Ractor
https://redmine.ruby-lang.org/issues/20168
2024-01-09T09:29:43Z
shia (Sangyong Sim)
<a name="Reproduction-code"></a>
<h2 >Reproduction code<a href="#Reproduction-code" class="wiki-anchor">¶</a></h2>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">trap</span><span class="p">(</span><span class="ss">:INT</span><span class="p">)</span> <span class="k">do</span>
<span class="nb">puts</span> <span class="s2">"SIGINT"</span>
<span class="nb">exit</span>
<span class="k">end</span>
<span class="nb">trap</span><span class="p">(</span><span class="ss">:TERM</span><span class="p">)</span> <span class="k">do</span>
<span class="nb">puts</span> <span class="s2">"SIGTERM"</span>
<span class="nb">exit</span>
<span class="k">end</span>
<span class="n">r</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="kp">loop</span> <span class="k">do</span>
<span class="nb">sleep</span> <span class="mi">1</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="no">Ractor</span><span class="p">.</span><span class="nf">select</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="c1"># stucked.</span>
<span class="c1"># SIGINT/SIGTERM sent to Ruby process(confirmed by trap),</span>
<span class="c1"># but process won't exit.</span>
</code></pre>
<a name="Expected-behavior"></a>
<h2 >Expected behavior<a href="#Expected-behavior" class="wiki-anchor">¶</a></h2>
<p>Process killed successfully with exit code 0.</p>
<a name="Affected-Ruby-version"></a>
<h2 >Affected Ruby version<a href="#Affected-Ruby-version" class="wiki-anchor">¶</a></h2>
<p>3.3.0<br>
3.2.x works as expected.</p>
Ruby master - Bug #20167 (Open): Code execution isn't recorded in Ractor
https://redmine.ruby-lang.org/issues/20167
2024-01-09T09:08:58Z
shia (Sangyong Sim)
<a name="reproduction-code"></a>
<h2 >reproduction code<a href="#reproduction-code" class="wiki-anchor">¶</a></h2>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># frozen-string-literal: true</span>
<span class="nb">require</span> <span class="s2">"coverage"</span>
<span class="no">Coverage</span><span class="p">.</span><span class="nf">start</span>
<span class="nb">require_relative</span> <span class="s2">"./some_lib"</span>
<span class="c1"># # some_lib.rb</span>
<span class="c1"># class C</span>
<span class="c1"># def hoge(i)</span>
<span class="c1"># i</span>
<span class="c1"># end</span>
<span class="c1"># end</span>
<span class="n">r</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="kp">loop</span> <span class="k">do</span>
<span class="n">v</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">receive</span>
<span class="n">ret_v</span> <span class="o">=</span> <span class="no">C</span><span class="p">.</span><span class="nf">new</span><span class="p">.</span><span class="nf">hoge</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="no">Ractor</span><span class="p">.</span><span class="nf">yield</span> <span class="n">ret_v</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="mi">2</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span> <span class="o">|</span><span class="n">i</span><span class="o">|</span>
<span class="n">r</span> <span class="o"><<</span> <span class="n">i</span>
<span class="n">r</span><span class="p">.</span><span class="nf">take</span>
<span class="k">end</span>
<span class="no">Coverage</span><span class="p">.</span><span class="nf">result</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">file</span><span class="p">,</span> <span class="n">lines</span><span class="o">|</span>
<span class="k">if</span> <span class="n">file</span><span class="p">.</span><span class="nf">include?</span><span class="p">(</span><span class="s2">"some_ractor_lib"</span><span class="p">)</span>
<span class="k">if</span> <span class="n">lines</span> <span class="o">==</span> <span class="p">[</span><span class="mi">1</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="kp">nil</span><span class="p">,</span> <span class="kp">nil</span><span class="p">]</span>
<span class="nb">puts</span> <span class="s2">"OK"</span>
<span class="k">else</span>
<span class="nb">puts</span> <span class="s2">"expected: [1, 1, 2, nil, nil]"</span>
<span class="nb">puts</span> <span class="s2">"actual: </span><span class="si">#{</span><span class="n">lines</span><span class="p">.</span><span class="nf">inspect</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<a name="Target-ruby-version"></a>
<h2 >Target ruby version<a href="#Target-ruby-version" class="wiki-anchor">¶</a></h2>
<p>3.2.0+ affected</p>
Ruby master - Bug #20154 (Open): aarch64: configure overrides `-mbranch-protection` if it was set...
https://redmine.ruby-lang.org/issues/20154
2024-01-05T21:25:03Z
jprokop (Jarek Prokop)
<p>Recently a GH PR was merged <a href="https://github.com/ruby/ruby/pull/9306" class="external">https://github.com/ruby/ruby/pull/9306</a> For PAC/BTI support on ARM CPUs for Coroutine.S.</p>
<p>Without proper compilation support in configure.ac it segfaults Ruby with fibers on CPUs where PAC is supported: <a href="https://bugs.ruby-lang.org/issues/20085" class="external">https://bugs.ruby-lang.org/issues/20085</a></p>
<p>At the time of writing, configure.ac appends the first option from a list for flag <code>-mbranch-protection</code> that successfully compiles a program <a href="https://github.com/ruby/ruby/blob/master/configure.ac#L829" class="external">https://github.com/ruby/ruby/blob/master/configure.ac#L829</a>,<br>
to XCFLAGS and now also ASFLAGS to fix issue 20085 for Ruby master.</p>
<p>This is suboptimal for Fedora as we set -mbranch-protection=standard by default in C{,XX}FLAGS:</p>
<pre><code>CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer '
export CFLAGS
CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer'
export CXXFLAGS
</code></pre>
<p>And the appended flag overrides distribution's compilation configuration, which in this case ends up omitting BTI instructions and only using PAC.</p>
<p>Would it make sense to check if such flags exist and not overwrite them if they do?</p>
<p>Serious proposals:</p>
<ol>
<li>Simplest fix that does not overwrite what is set in the distribution and results in higher security is simply prepending the list of options with <code>-mbranch-protection=standard</code>, it should cause no problems on ARMv8 CPUs and forward, BTI similarly to PAC instructions result into NOP, it is only extending the capability.</li>
</ol>
<p>See attached 0001-aarch64-Check-mbranch-protection-standard-first-to-u.patch</p>
<ol start="2">
<li>Other fix that sounds more sane IMO and dodges this kind of guessing where are all the correct places for the flag is what another Fedora contributor Florian Weimer suggested: <a href="https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/CVTNF2OQCL3XZHUUFNYMDK6ZEF2SWUEN/" class="external">https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/CVTNF2OQCL3XZHUUFNYMDK6ZEF2SWUEN/</a>
</li>
</ol>
<p>"The reliable way to do this would be to compile a C file and check<br>
whether that enables __ARM_FEATURE_PAC_DEFAULT, and if that's the case,<br>
define a <em>different</em> macro for use in the assembler implementation.<br>
This way, you don't need to care about the exact name of the option."</p>
<p>IOW instead of using _<em>ARM_FEATURE</em>* directly in that code, define a macro in the style of "USE_PAC" with value of the feature if it is defined, I think that way we shouldn't need to append ASFLAGS anymore.</p>
<p>However it's also important to catch the value of those macros as their values have meaning, I have an idea how to do that but I'd get on that monday earliest.</p>
Ruby master - Bug #20151 (Open): Can't build Ruby 3.1 on FreeBSD 14.0
https://redmine.ruby-lang.org/issues/20151
2024-01-05T03:14:58Z
hsbt (Hiroshi SHIBATA)
hsbt@ruby-lang.org
<p>I couldn't install Ruby 3.1.3 on FreeBSD 14.0.</p>
<pre><code>compiling util.c
util.c:255:1: error: expected identifier or '('
ruby_qsort(void* base, const size_t nel, const size_t size, cmpfunc_t *cmp, void *d)
^
./include/ruby/util.h:124:21: note: expanded from macro 'ruby_qsort'
# define ruby_qsort qsort_r
^
/usr/include/stdlib.h:356:5: note: expanded from macro 'qsort_r'
__generic(arg5, int (*)(void *, const void *, const void *), \
^
/usr/include/sys/cdefs.h:322:2: note: expanded from macro '__generic'
_Generic(expr, t: yes, default: no)
^
1 error generated.
*** Error code 1
Stop.
</code></pre>
<p>Compiler version is here:</p>
<pre><code>FreeBSD clang version 16.0.6 (https://github.com/llvm/llvm-project.git llvmorg-16.0.6-0-g7cbf1a259152)
</code></pre>
<p>I could install Ruby 3.2.2.</p>
Ruby master - Bug #20147 (Open): FreeBSD libyaml
https://redmine.ruby-lang.org/issues/20147
2024-01-04T13:09:45Z
kaiquekandykoga (Kaíque Koga)
<p>I use ruby-install to manage multiple Ruby versions. Some time ago I had issues installing Ruby 3.2.2 <a href="https://github.com/postmodern/ruby-install/issues/463" class="external">https://github.com/postmodern/ruby-install/issues/463</a>, and the same issue was open for ruby-build in <a href="https://github.com/rbenv/ruby-build/issues/2184" class="external">https://github.com/rbenv/ruby-build/issues/2184</a>. I am trying to install Ruby 3.3.0 using ruby-install, and the same behaviour is occurring. Please, take a look in the links I have provided for detailed information.</p>
<pre><code class="shell syntaxhl" data-language="shell">/usr/home/kandy/src/ruby-3.3.0/lib/yaml.rb:3: warning: It seems your ruby installation is missing psych <span class="o">(</span><span class="k">for </span>YAML output<span class="o">)</span><span class="nb">.</span>
To eliminate this warning, please <span class="nb">install </span>libyaml and reinstall your ruby.
uh-oh! RDoc had a problem:
cannot load such file <span class="nt">--</span> psych
run with <span class="nt">--debug</span> <span class="k">for </span>full backtrace
<span class="k">***</span> Error code 1
Stop.
make: stopped <span class="k">in</span> /usr/home/kandy/src/ruby-3.3.0
<span class="o">!!!</span> Compiling ruby 3.3.0 failed!
</code></pre>
<p>Thank you.</p>
Ruby master - Bug #20089 (Open): Fiber#kill transfers to root fiber
https://redmine.ruby-lang.org/issues/20089
2023-12-26T16:46:04Z
rmosolgo (Robert Mosolgo)
rdmosolgo@gmail.com
<p>I was hoping to use <code>Fiber#kill</code> to clean up formerly <code>.transfer</code>-d Fibers and work around <a href="https://bugs.ruby-lang.org/issues/20081" class="external">https://bugs.ruby-lang.org/issues/20081</a>, but I found that <code>Fiber#kill</code> has a similar control flow jump behavior. Is this on purpose, or a bug?</p>
<p>Here's a script to test the behavior:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">manager</span> <span class="o">=</span> <span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="n">worker</span> <span class="o">=</span> <span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="nb">puts</span> <span class="s2">"2. Begin Worker"</span>
<span class="n">manager</span><span class="p">.</span><span class="nf">transfer</span>
<span class="nb">puts</span> <span class="s2">"This should never print -- killed"</span>
<span class="k">end</span>
<span class="nb">puts</span> <span class="s2">"1. Transfer to Worker"</span>
<span class="n">worker</span><span class="p">.</span><span class="nf">transfer</span>
<span class="nb">puts</span> <span class="s2">"3. Killing Worker"</span>
<span class="n">worker</span><span class="p">.</span><span class="nf">kill</span>
<span class="nb">puts</span> <span class="s2">"4. Finished manager"</span>
<span class="k">end</span>
<span class="n">manager</span><span class="p">.</span><span class="nf">transfer</span>
<span class="nb">puts</span> <span class="s2">"5. Finished script"</span>
</code></pre>
<p>I expected items <code>1</code> through <code>5</code> to be printed in order, but in fact, <code>4</code> is never printed:</p>
<pre><code>$ ruby fiber_transfer_test.rb
1. Transfer to Worker
2. Begin Worker
3. Killing Worker
5. Finished script
</code></pre>
<p>It seems like <code>worker.kill</code> is transferring control to the top-level fiber instead of giving it back to <code>manager</code>.</p>
<p>I also tried having the thread kill <em>itself</em>, hoping it would return to the fiber that originally <code>.transfer</code>ed to it, but it also seems to jump out:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">manager</span> <span class="o">=</span> <span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="n">worker</span> <span class="o">=</span> <span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="nb">puts</span> <span class="s2">"2. Begin Worker"</span>
<span class="n">manager</span><span class="p">.</span><span class="nf">transfer</span>
<span class="no">Fiber</span><span class="p">.</span><span class="nf">current</span><span class="p">.</span><span class="nf">kill</span>
<span class="nb">puts</span> <span class="s2">"This should never print -- killed"</span>
<span class="k">end</span>
<span class="nb">puts</span> <span class="s2">"1. Transfer to Worker"</span>
<span class="n">worker</span><span class="p">.</span><span class="nf">transfer</span>
<span class="nb">puts</span> <span class="s2">"3. Killing Worker"</span>
<span class="n">worker</span><span class="p">.</span><span class="nf">transfer</span>
<span class="nb">puts</span> <span class="s2">"4. Finished manager"</span>
<span class="k">end</span>
<span class="n">manager</span><span class="p">.</span><span class="nf">transfer</span>
<span class="nb">puts</span> <span class="s2">"5. Finished script"</span>
</code></pre>
<p>Prints:</p>
<pre><code>1. Transfer to Worker
2. Begin Worker
3. Killing Worker
5. Finished script
</code></pre>
Ruby master - Bug #20079 (Open): alexandria testsuite began to segfault recently
https://redmine.ruby-lang.org/issues/20079
2023-12-22T03:59:59Z
mtasaka (Mamoru TASAKA)
mtasaka@fedoraproject.org
<p>Looks like Fedora alexandria-0.7.9-4 testsuite began to segfault with recent ruby3.3.0dev.<br>
It does not always segfault, but with about 20-30%? probability the testsuite segfaults, so it may be GC related?</p>
<p>And looks like:<br>
OKAY: <a class="changeset" title="Make the SHAPE_TOO_COMPLEX performance warning more actionable As suggested by Mame, we should t..." href="https://redmine.ruby-lang.org/projects/ruby-master/repository/git/revisions/ba1d1522d35a7dd2595603ead57cd0fa8b21ba8b">ba1d1522d3</a><br>
BAD: <a class="changeset" title="Fix flaky test test_stat_heap The test sometimes fails with: 1) Failure: TestGc#test_st..." href="https://redmine.ruby-lang.org/projects/ruby-master/repository/git/revisions/ce436ff3e3cbd6810d7cf83fedbd2b55995ca0b1">ce436ff3e3</a></p>
<p>Comparison: <a href="https://github.com/ruby/ruby/compare/ba1d1522d3...ce436ff3e3" class="external">https://github.com/ruby/ruby/compare/ba1d1522d3...ce436ff3e3</a></p>
<p>alexandria means <a href="https://github.com/mvz/alexandria-book-collection-manager" class="external">https://github.com/mvz/alexandria-book-collection-manager</a></p>
<p>Backtrace is:</p>
<pre><code>+ xvfb-run -s '-screen 0 640x480x24' rake spec:unit
/usr/bin/ruby -rbundler/setup -rsimplecov -Ilib -w -I/usr/share/gems/gems/rspec-support-3.12.1/lib:/usr/share/gems/gems/rspec-core-3.12.2/lib /usr/share/gems/gems/rspec-core-3.12.2/exe/rspec --pattern spec/alexandria/\*\*/\*_spec.rb
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:61: warning: assigned but unused variable - e
/usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/version/info.rb:76: warning: statement not reached
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/ui_manager.rb:728: warning: assigned but unused variable - book
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/ui_manager.rb:728: warning: assigned but unused variable - isbn
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/ui_manager.rb:728: warning: assigned but unused variable - library
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/ui_manager.rb:714: warning: assigned but unused variable - books_to_add
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/ui_manager.rb:701: warning: assigned but unused variable - title
*****...*....../builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
.........../builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
................**....../usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-model.rb:105: [BUG] Segmentation fault at 0x0000000000000000
ruby 3.3.0dev (2023-12-22 master 68bcca4c2b) [x86_64-linux]
-- Control frame information -----------------------------------------------
c:0041 p:0020 s:0220 e:000214 METHOD /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-model.rb:105
c:0040 p:0007 s:0210 e:000209 METHOD /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-iter.rb:33
c:0039 p:0014 s:0202 e:000201 METHOD /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/libraries_combo.rb:79
c:0038 p:0075 s:0194 e:000193 METHOD /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/libraries_combo.rb:41
c:0037 p:0062 s:0186 e:000185 METHOD /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/acquire_dialog.rb:58 [FINISH]
c:0036 p:---- s:0178 e:000177 CFUNC :new
c:0035 p:0015 s:0173 e:000172 BLOCK /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/spec/alexandria/ui/acquire_dialog_spec.rb:12 [FINISH]
c:0034 p:---- s:0169 e:000168 CFUNC :instance_exec
c:0033 p:0022 s:0164 e:000163 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:263
c:0032 p:0002 s:0159 e:000158 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:511
c:0031 p:0002 s:0156 e:000155 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:468
c:0030 p:0002 s:0153 e:000152 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:486
c:0029 p:0002 s:0150 e:000149 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:626
c:0028 p:0018 s:0147 e:000146 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:352
c:0027 p:0004 s:0141 e:000140 BLOCK /usr/share/gems/gems/webmock-3.18.1/lib/webmock/rspec.rb:37 [FINISH]
c:0026 p:---- s:0137 e:000136 CFUNC :instance_exec
c:0025 p:0013 s:0132 e:000131 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:457
c:0024 p:0010 s:0126 e:000125 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:390
c:0023 p:0009 s:0120 e:000119 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:628
c:0022 p:0018 s:0117 e:000116 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:352
c:0021 p:0037 s:0111 E:0026b8 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:629
c:0020 p:0104 s:0104 E:002648 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:486
c:0019 p:0018 s:0097 E:0025c8 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:468
c:0018 p:0019 s:0092 E:000bb8 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:511
c:0017 p:0076 s:0087 E:002578 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:259
c:0016 p:0037 s:0080 e:000079 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:646 [FINISH]
c:0015 p:---- s:0074 e:000073 CFUNC :map
c:0014 p:0011 s:0070 e:000069 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:642
c:0013 p:0052 s:0065 e:000064 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:607
c:0012 p:0007 s:0056 e:000055 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121 [FINISH]
c:0011 p:---- s:0052 e:000051 CFUNC :map
c:0010 p:0030 s:0048 e:000047 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121
c:0009 p:0026 s:0045 e:000044 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/configuration.rb:2070
c:0008 p:0007 s:0041 e:000040 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:116
c:0007 p:0009 s:0037 e:000036 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/reporter.rb:74
c:0006 p:0019 s:0032 e:000031 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:115
c:0005 p:0035 s:0025 e:000024 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:89
c:0004 p:0058 s:0019 e:000018 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:71
c:0003 p:0013 s:0011 e:000010 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:45
c:0002 p:0010 s:0006 e:000005 EVAL /usr/share/gems/gems/rspec-core-3.12.2/exe/rspec:4 [FINISH]
c:0001 p:0000 s:0003 E:000030 DUMMY [FINISH]
-- Ruby level backtrace information ----------------------------------------
/usr/share/gems/gems/rspec-core-3.12.2/exe/rspec:4:in `<main>'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:45:in `invoke'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:71:in `run'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:89:in `run'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:115:in `run_specs'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/reporter.rb:74:in `report'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:116:in `block in run_specs'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/configuration.rb:2070:in `with_suite_hooks'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121:in `block (2 levels) in run_specs'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121:in `map'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121:in `block (3 levels) in run_specs'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:607:in `run'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:642:in `run_examples'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:642:in `map'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:646:in `block in run_examples'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:259:in `run'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:468:in `with_around_example_hooks'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:486:in `run'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:629:in `run_around_example_hooks_for'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:352:in `call'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:628:in `block (2 levels) in run_around_example_hooks_for'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:390:in `execute_with'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:457:in `instance_exec'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:457:in `instance_exec'
/usr/share/gems/gems/webmock-3.18.1/lib/webmock/rspec.rb:37:in `block (2 levels) in <top (required)>'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:352:in `call'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:626:in `block in run_around_example_hooks_for'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:486:in `block in run'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:263:in `block in run'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:263:in `instance_exec'
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/spec/alexandria/ui/acquire_dialog_spec.rb:12:in `block (2 levels) in <top (required)>'
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/spec/alexandria/ui/acquire_dialog_spec.rb:12:in `new'
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/acquire_dialog.rb:58:in `initialize'
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/libraries_combo.rb:41:in `populate_with_libraries'
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/libraries_combo.rb:79:in `append_entry'
/usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-iter.rb:33:in `set_value'
/usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-model.rb:105:in `get_column_type'
-- Threading information ---------------------------------------------------
Total ractor count: 1
Ruby thread count for this ractor: 1
-- Machine register context ------------------------------------------------
RIP: 0x00007f6a3121a817 RBP: 0x00007ffdbecf5770 RSP: 0x00007ffdbecf5708
RAX: 0x0000000000000091 RBX: 0x0000009100100003 RCX: 0x00007f6a30b356f0
RDX: 0x00007ffdbecf5728 RDI: 0x6c2f322e32312e33 RSI: 0x0000000000000091
R8: 0x000055e2d391aae8 R9: 0x00000000000006e8 R10: 0x000000000000000c
R11: 0x0000000000077813 R12: 0x00007f6a13a63040 R13: 0x6c2f322e32312e33
R14: 0x000055e2d264ea80 R15: 0x0000000000000091 EFL: 0x0000000000010206
-- C level backtrace information -------------------------------------------
/lib64/libruby.so.3.3(rb_print_backtrace+0x21) [0x7f6a3127ea21] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_dump.c:820
/lib64/libruby.so.3.3(rb_vm_bugreport+0x9aa) [0x7f6a3128132a] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_dump.c:1151
/lib64/libruby.so.3.3(rb_bug_for_fatal_signal+0x110) [0x7f6a310d81c0] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/error.c:1065
/lib64/libruby.so.3.3(sigsegv+0x56) [0x7f6a311f4966] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/signal.c:926
/lib64/libc.so.6(__restore_rt+0x0) [0x7f6a30cd49a0]
/lib64/libruby.so.3.3(rb_id_table_lookup+0x7) [0x7f6a3121a817] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/symbol.h:72
/lib64/libruby.so.3.3(vm_search_cc.lto_priv.0+0x58) [0x7f6a31255318] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:2046
/lib64/libruby.so.3.3(vm_search_method_slowpath0.lto_priv.0+0x39) [0x7f6a31255799] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:2142
/lib64/libruby.so.3.3(vm_exec_core.lto_priv.0+0x129) [0x7f6a31264499] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:2224
/lib64/libruby.so.3.3(rb_vm_exec+0x17d) [0x7f6a3127cfdd] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:2486
/lib64/libruby.so.3.3(rb_call0+0x378) [0x7f6a31270868] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_eval.c:110
/lib64/libruby.so.3.3(rb_funcallv_kw+0x5f) [0x7f6a31270daf] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_eval.c:899
/lib64/libruby.so.3.3(rb_class_new_instance_pass_kw+0x45) [0x7f6a31163235] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/object.c:2130
/lib64/libruby.so.3.3(vm_call_cfunc_with_frame_+0x117) [0x7f6a3125c417] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:3490
/lib64/libruby.so.3.3(vm_exec_core.lto_priv.0+0x16c) [0x7f6a312644dc] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:5581
/lib64/libruby.so.3.3(rb_vm_exec+0x17d) [0x7f6a3127cfdd] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:2486
/lib64/libruby.so.3.3(yield_under+0x19a) [0x7f6a312710fa] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:1634
/lib64/libruby.so.3.3(vm_call_cfunc_with_frame_+0x117) [0x7f6a3125c417] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:3490
/lib64/libruby.so.3.3(vm_sendish.lto_priv.0+0xb9) [0x7f6a3125d909] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:5585
/lib64/libruby.so.3.3(vm_exec_core.lto_priv.0+0x1daf) [0x7f6a3126611f] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/redhat-linux-build/insns.def:814
/lib64/libruby.so.3.3(rb_vm_exec+0x17d) [0x7f6a3127cfdd] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:2486
/lib64/libruby.so.3.3(yield_under+0x19a) [0x7f6a312710fa] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:1634
/lib64/libruby.so.3.3(vm_call_cfunc_with_frame_+0x117) [0x7f6a3125c417] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:3490
/lib64/libruby.so.3.3(vm_sendish.lto_priv.0+0xb9) [0x7f6a3125d909] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:5585
/lib64/libruby.so.3.3(vm_exec_core.lto_priv.0+0x1daf) [0x7f6a3126611f] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/redhat-linux-build/insns.def:814
/lib64/libruby.so.3.3(rb_vm_exec+0x17d) [0x7f6a3127cfdd] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:2486
/lib64/libruby.so.3.3(rb_yield+0x77) [0x7f6a3126a787] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:1634
/lib64/libruby.so.3.3(rb_ary_collect.lto_priv.0+0x5c) [0x7f6a31065f6c] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/array.c:3632
/lib64/libruby.so.3.3(vm_call_cfunc_with_frame_+0x117) [0x7f6a3125c417] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:3490
/lib64/libruby.so.3.3(vm_sendish.lto_priv.0+0xb9) [0x7f6a3125d909] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:5585
/lib64/libruby.so.3.3(vm_exec_core.lto_priv.0+0x1daf) [0x7f6a3126611f] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/redhat-linux-build/insns.def:814
/lib64/libruby.so.3.3(rb_vm_exec+0x17d) [0x7f6a3127cfdd] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:2486
/lib64/libruby.so.3.3(rb_yield+0x77) [0x7f6a3126a787] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:1634
/lib64/libruby.so.3.3(rb_ary_collect.lto_priv.0+0x5c) [0x7f6a31065f6c] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/array.c:3632
/lib64/libruby.so.3.3(vm_call_cfunc_with_frame_+0x117) [0x7f6a3125c417] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:3490
/lib64/libruby.so.3.3(vm_sendish.lto_priv.0+0xb9) [0x7f6a3125d909] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:5585
/lib64/libruby.so.3.3(vm_exec_core.lto_priv.0+0x1daf) [0x7f6a3126611f] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/redhat-linux-build/insns.def:814
/lib64/libruby.so.3.3(rb_vm_exec+0x17d) [0x7f6a3127cfdd] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:2486
/lib64/libruby.so.3.3(rb_ec_exec_node+0xaa) [0x7f6a310e124a] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/eval.c:287
/lib64/libruby.so.3.3(ruby_run_node+0x93) [0x7f6a310e8cd3] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/eval.c:328
/usr/bin/ruby-mri(0x55e2cf058197) [0x55e2cf058197]
/lib64/libc.so.6(__libc_start_call_main+0x7a) [0x7f6a30cbe14a]
/lib64/libc.so.6(__libc_start_main+0x8b) [0x7f6a30cbe20b]
/usr/bin/ruby-mri(_start+0x25) [0x55e2cf0581e5] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/main.c:59
-- Other runtime information -----------------------------------------------
* Loaded script: /usr/share/gems/gems/rspec-core-3.12.2/exe/rspec
* Loaded features:
0 enumerator.so
1 thread.rb
2 fiber.so
3 rational.so
4 complex.so
5 ruby2_keywords.rb
6 /usr/lib64/ruby/enc/encdb.so
7 /usr/lib64/ruby/enc/trans/transdb.so
8 /usr/lib64/ruby/rbconfig.rb
9 /usr/share/rubygems/rubygems/compatibility.rb
10 /usr/share/rubygems/rubygems/defaults.rb
11 /usr/share/rubygems/rubygems/deprecate.rb
12 /usr/share/rubygems/rubygems/errors.rb
13 /usr/share/rubygems/rubygems/unknown_command_spell_checker.rb
14 /usr/share/rubygems/rubygems/exceptions.rb
15 /usr/share/rubygems/rubygems/basic_specification.rb
16 /usr/share/rubygems/rubygems/stub_specification.rb
17 /usr/share/rubygems/rubygems/platform.rb
18 /usr/share/rubygems/rubygems/util/list.rb
19 /usr/share/rubygems/rubygems/version.rb
20 /usr/share/rubygems/rubygems/requirement.rb
21 /usr/share/rubygems/rubygems/specification.rb
22 /usr/share/rubygems/rubygems/defaults/operating_system.rb
23 /usr/share/rubygems/rubygems/util.rb
24 /usr/share/rubygems/rubygems/dependency.rb
25 /usr/share/rubygems/rubygems/core_ext/kernel_gem.rb
26 /usr/lib64/ruby/monitor.so
27 /usr/share/ruby/monitor.rb
28 /usr/share/rubygems/rubygems.rb
29 /usr/share/ruby/bundled_gems.rb
30 /usr/share/rubygems/rubygems/path_support.rb
31 /usr/share/ruby/error_highlight/version.rb
32 /usr/share/ruby/error_highlight/base.rb
33 /usr/share/ruby/error_highlight/formatter.rb
34 /usr/share/ruby/error_highlight/core_ext.rb
35 /usr/share/ruby/error_highlight.rb
36 /usr/share/ruby/did_you_mean/version.rb
37 /usr/share/ruby/did_you_mean/core_ext/name_error.rb
38 /usr/share/ruby/did_you_mean/levenshtein.rb
39 /usr/share/ruby/did_you_mean/jaro_winkler.rb
40 /usr/share/ruby/did_you_mean/spell_checker.rb
41 /usr/share/ruby/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
42 /usr/share/ruby/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
43 /usr/share/ruby/did_you_mean/spell_checkers/name_error_checkers.rb
44 /usr/share/ruby/did_you_mean/spell_checkers/method_name_checker.rb
45 /usr/share/ruby/did_you_mean/spell_checkers/key_error_checker.rb
46 /usr/share/ruby/did_you_mean/spell_checkers/null_checker.rb
47 /usr/share/ruby/did_you_mean/tree_spell_checker.rb
48 /usr/share/ruby/did_you_mean/spell_checkers/require_path_checker.rb
49 /usr/share/ruby/did_you_mean/spell_checkers/pattern_key_name_checker.rb
50 /usr/share/ruby/did_you_mean/formatter.rb
51 /usr/share/ruby/did_you_mean.rb
52 /usr/share/ruby/syntax_suggest/core_ext.rb
53 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/FAKE/bundler/setup.rb
54 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/FAKE/simplecov.rb
55 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/version.rb
56 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/comparable_version.rb
57 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/ruby_features.rb
58 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support.rb
59 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/caller_filter.rb
60 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/version.rb
61 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/warnings.rb
62 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/warnings.rb
63 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/set.rb
64 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/flat_map.rb
65 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/filter_manager.rb
66 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/dsl.rb
67 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/console_codes.rb
68 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/snippet_extractor.rb
69 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/syntax_highlighter.rb
70 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/encoded_string.rb
71 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/exception_presenter.rb
72 /usr/share/ruby/shellwords.rb
73 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/shell_escape.rb
74 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/helpers.rb
75 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/notifications.rb
76 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/reporter.rb
77 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb
78 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/reentrant_mutex.rb
79 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/memoized_helpers.rb
80 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/metadata.rb
81 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/metadata_filter.rb
82 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/pending.rb
83 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/directory_maker.rb
84 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters.rb
85 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/ordering.rb
86 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/world.rb
87 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/backtrace_formatter.rb
88 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/ruby_project.rb
89 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/deprecation_formatter.rb
90 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/output_wrapper.rb
91 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/configuration.rb
92 /usr/share/ruby/optparse.rb
93 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/option_parser.rb
94 /usr/lib64/ruby/cgi/escape.so
95 /usr/share/ruby/cgi/util.rb
96 /usr/share/ruby/erb/version.rb
97 /usr/lib64/ruby/strscan.so
98 /usr/share/ruby/erb/compiler.rb
99 /usr/share/ruby/erb/def_method.rb
100 /usr/lib64/ruby/erb/escape.so
101 /usr/share/ruby/erb/util.rb
102 /usr/share/ruby/erb.rb
103 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/configuration_options.rb
104 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb
105 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/invocations.rb
106 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb
107 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/matcher_definition.rb
108 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/method_signature_verifier.rb
109 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/with_keywords_when_needed.rb
110 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/shared_example_group.rb
111 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/recursive_const_methods.rb
112 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb
113 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core.rb
114 /usr/share/gems/gems/rspec-3.12.0/lib/rspec/version.rb
115 /usr/share/gems/gems/rspec-3.12.0/lib/rspec.rb
116 /usr/share/gems/gems/locale-2.1.3/lib/locale/tag/simple.rb
117 /usr/share/gems/gems/locale-2.1.3/lib/locale/tag/irregular.rb
118 /usr/share/gems/gems/locale-2.1.3/lib/locale/tag/common.rb
119 /usr/share/gems/gems/locale-2.1.3/lib/locale/tag/rfc.rb
120 /usr/share/gems/gems/locale-2.1.3/lib/locale/tag/cldr.rb
121 /usr/share/gems/gems/locale-2.1.3/lib/locale/tag/posix.rb
122 /usr/share/gems/gems/locale-2.1.3/lib/locale/tag.rb
123 /usr/share/gems/gems/locale-2.1.3/lib/locale/taglist.rb
124 /usr/share/gems/gems/locale-2.1.3/lib/locale/driver.rb
125 /usr/share/gems/gems/locale-2.1.3/lib/locale/version.rb
126 /usr/share/gems/gems/locale-2.1.3/lib/locale.rb
127 /usr/share/gems/gems/gettext-3.4.9/lib/gettext/version.rb
128 /usr/share/gems/gems/gettext-3.4.9/lib/gettext/class_info.rb
129 /usr/lib64/ruby/stringio.so
130 /usr/share/ruby/singleton.rb
131 /usr/share/ruby/forwardable/impl.rb
132 /usr/share/ruby/forwardable.rb
133 /usr/share/gems/gems/prime-0.1.2/lib/prime.rb
134 /usr/share/gems/gems/gettext-3.4.9/lib/gettext/mo.rb
135 /usr/share/gems/gems/gettext-3.4.9/lib/gettext/locale_path.rb
136 /usr/share/gems/gems/gettext-3.4.9/lib/gettext/text_domain.rb
137 /usr/share/gems/gems/gettext-3.4.9/lib/gettext/text_domain_group.rb
138 /usr/share/gems/gems/gettext-3.4.9/lib/gettext/text_domain_manager.rb
139 /usr/share/gems/gems/gettext-3.4.9/lib/gettext.rb
140 /usr/share/ruby/logger/version.rb
141 /usr/share/ruby/logger/formatter.rb
142 /usr/share/ruby/logger/period.rb
143 /usr/share/ruby/logger/log_device.rb
144 /usr/share/ruby/logger/severity.rb
145 /usr/share/ruby/logger/errors.rb
146 /usr/share/ruby/logger.rb
147 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/logging.rb
148 /usr/share/gems/gems/locale-2.1.3/lib/locale/driver/env.rb
149 /usr/share/gems/gems/locale-2.1.3/lib/locale/driver/posix.rb
150 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/about.rb
151 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/config.rb
152 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/version.rb
153 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/models/book.rb
154 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb
155 /usr/share/ruby/observer.rb
156 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_collection.rb
157 /usr/share/gems/gems/psych-5.1.2/lib/psych/versions.rb
158 /usr/share/gems/gems/psych-5.1.2/lib/psych/exception.rb
159 /usr/share/ruby/psych/syntax_error.rb
160 /usr/lib64/ruby/psych.so
161 /usr/share/gems/gems/psych-5.1.2/lib/psych/omap.rb
162 /usr/share/gems/gems/psych-5.1.2/lib/psych/set.rb
163 /usr/share/gems/gems/psych-5.1.2/lib/psych/class_loader.rb
164 /usr/share/gems/gems/psych-5.1.2/lib/psych/scalar_scanner.rb
165 /usr/share/gems/gems/psych-5.1.2/lib/psych/nodes/node.rb
166 /usr/share/gems/gems/psych-5.1.2/lib/psych/nodes/stream.rb
167 /usr/share/gems/gems/psych-5.1.2/lib/psych/nodes/document.rb
168 /usr/share/gems/gems/psych-5.1.2/lib/psych/nodes/sequence.rb
169 /usr/share/gems/gems/psych-5.1.2/lib/psych/nodes/scalar.rb
170 /usr/share/gems/gems/psych-5.1.2/lib/psych/nodes/mapping.rb
171 /usr/share/gems/gems/psych-5.1.2/lib/psych/nodes/alias.rb
172 /usr/share/gems/gems/psych-5.1.2/lib/psych/nodes.rb
173 /usr/share/gems/gems/psych-5.1.2/lib/psych/streaming.rb
174 /usr/share/gems/gems/psych-5.1.2/lib/psych/visitors/visitor.rb
175 /usr/share/gems/gems/psych-5.1.2/lib/psych/visitors/to_ruby.rb
176 /usr/share/gems/gems/psych-5.1.2/lib/psych/visitors/emitter.rb
177 /usr/share/gems/gems/psych-5.1.2/lib/psych/handler.rb
178 /usr/share/gems/gems/psych-5.1.2/lib/psych/tree_builder.rb
179 /usr/share/gems/gems/psych-5.1.2/lib/psych/visitors/yaml_tree.rb
180 /usr/share/gems/gems/psych-5.1.2/lib/psych/json/ruby_events.rb
181 /usr/share/gems/gems/psych-5.1.2/lib/psych/visitors/json_tree.rb
182 /usr/share/gems/gems/psych-5.1.2/lib/psych/visitors/depth_first.rb
183 /usr/share/gems/gems/psych-5.1.2/lib/psych/visitors.rb
184 /usr/share/gems/gems/psych-5.1.2/lib/psych/parser.rb
185 /usr/share/gems/gems/psych-5.1.2/lib/psych/coder.rb
186 /usr/share/gems/gems/psych-5.1.2/lib/psych/core_ext.rb
187 /usr/share/gems/gems/psych-5.1.2/lib/psych/stream.rb
188 /usr/share/gems/gems/psych-5.1.2/lib/psych/json/yaml_events.rb
189 /usr/share/gems/gems/psych-5.1.2/lib/psych/json/tree_builder.rb
190 /usr/share/gems/gems/psych-5.1.2/lib/psych/json/stream.rb
191 /usr/share/gems/gems/psych-5.1.2/lib/psych/handlers/document_stream.rb
192 /usr/share/ruby/psych.rb
193 /usr/share/ruby/yaml.rb
194 /usr/share/ruby/fileutils.rb
195 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/security.rb
196 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/parseexception.rb
197 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/formatters/default.rb
198 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/formatters/pretty.rb
199 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/node.rb
200 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/child.rb
201 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/parent.rb
202 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/xmltokens.rb
203 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/namespace.rb
204 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/encoding.rb
205 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/source.rb
206 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/entity.rb
207 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/attlistdecl.rb
208 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/doctype.rb
209 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/text.rb
210 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/attribute.rb
211 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/cdata.rb
212 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/functions.rb
213 /usr/share/ruby/prettyprint.rb
214 /usr/share/ruby/pp.rb
215 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/parsers/xpathparser.rb
216 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/xpath_parser.rb
217 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/xpath.rb
218 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/element.rb
219 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/xmldecl.rb
220 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/comment.rb
221 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/instruction.rb
222 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/rexml.rb
223 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/output.rb
224 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/undefinednamespaceexception.rb
225 /usr/share/ruby/set.rb
226 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/parsers/baseparser.rb
227 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/parsers/streamparser.rb
228 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/validation/validationexception.rb
229 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/parsers/treeparser.rb
230 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/document.rb
231 /usr/share/ruby/delegate.rb
232 /usr/lib64/ruby/etc.so
233 /usr/share/ruby/tmpdir.rb
234 /usr/share/ruby/tempfile.rb
235 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/net.rb
236 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/image_fetcher.rb
237 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/models/library.rb
238 /usr/lib64/ruby/date_core.so
239 /usr/share/ruby/date.rb
240 /usr/share/ruby/time.rb
241 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/smart_library.rb
242 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/execution_queue.rb
243 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/import_library.rb
244 /usr/share/ruby/csv/fields_converter.rb
245 /usr/share/ruby/English.rb
246 /usr/share/ruby/csv/input_record_separator.rb
247 /usr/share/ruby/csv/row.rb
248 /usr/share/ruby/csv/table.rb
249 /usr/share/ruby/csv/parser.rb
250 /usr/share/ruby/csv/writer.rb
251 /usr/share/ruby/csv/version.rb
252 /usr/share/ruby/csv/core_ext/array.rb
253 /usr/share/ruby/csv/core_ext/string.rb
254 /usr/share/ruby/csv.rb
255 /usr/share/gems/gems/image_size-3.3.0/lib/image_size/format_error.rb
256 /usr/share/gems/gems/image_size-3.3.0/lib/image_size/isobmff.rb
257 /usr/lib64/ruby/pathname.so
258 /usr/share/ruby/pathname.rb
259 /usr/share/gems/gems/image_size-3.3.0/lib/image_size/reader.rb
260 /usr/share/gems/gems/image_size-3.3.0/lib/image_size/chunky_reader.rb
261 /usr/share/gems/gems/image_size-3.3.0/lib/image_size/seekable_io_reader.rb
262 /usr/share/gems/gems/image_size-3.3.0/lib/image_size/stream_io_reader.rb
263 /usr/share/gems/gems/image_size-3.3.0/lib/image_size/string_reader.rb
264 /usr/share/gems/gems/image_size-3.3.0/lib/image_size.rb
265 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/export_library.rb
266 /usr/share/ruby/cgi/core.rb
267 /usr/share/ruby/cgi/cookie.rb
268 /usr/share/ruby/cgi.rb
269 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/douban.rb
270 /usr/lib64/ruby/socket.so
271 /usr/share/ruby/socket.rb
272 /usr/share/ruby/timeout.rb
273 /usr/lib64/ruby/io/wait.so
274 /usr/share/ruby/net/protocol.rb
275 /usr/share/ruby/uri/version.rb
276 /usr/share/ruby/uri/rfc2396_parser.rb
277 /usr/share/ruby/uri/rfc3986_parser.rb
278 /usr/share/ruby/uri/common.rb
279 /usr/share/ruby/uri/generic.rb
280 /usr/share/ruby/uri/file.rb
281 /usr/share/ruby/uri/ftp.rb
282 /usr/share/ruby/uri/http.rb
283 /usr/share/ruby/uri/https.rb
284 /usr/share/ruby/uri/ldap.rb
285 /usr/share/ruby/uri/ldaps.rb
286 /usr/share/ruby/uri/mailto.rb
287 /usr/share/ruby/uri/ws.rb
288 /usr/share/ruby/uri/wss.rb
289 /usr/share/ruby/uri.rb
290 /usr/share/ruby/random/formatter.rb
291 /usr/share/ruby/securerandom.rb
292 /usr/share/ruby/resolv.rb
293 /usr/lib64/ruby/zlib.so
294 /usr/share/ruby/net/http/exceptions.rb
295 /usr/share/ruby/net/http/header.rb
296 /usr/share/ruby/net/http/generic_request.rb
297 /usr/share/ruby/net/http/request.rb
298 /usr/share/ruby/net/http/requests.rb
299 /usr/share/ruby/net/http/response.rb
300 /usr/share/ruby/net/http/responses.rb
301 /usr/share/ruby/net/http/proxy_delta.rb
302 /usr/share/ruby/net/http/backward.rb
303 /usr/share/ruby/net/http.rb
304 /usr/lib64/gems/ruby/nokogiri-1.15.5/nokogiri/nokogiri.so
305 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/extension.rb
306 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/version/constant.rb
307 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/version/info.rb
308 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/version.rb
309 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/class_resolver.rb
310 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/syntax_error.rb
311 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/pp/node.rb
312 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/pp/character_data.rb
313 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/pp.rb
314 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/parse_options.rb
315 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/sax/document.rb
316 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/sax/parser_context.rb
317 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/sax/parser.rb
318 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/sax/push_parser.rb
319 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/sax.rb
320 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/searchable.rb
321 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/node/save_options.rb
322 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/node.rb
323 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/attribute_decl.rb
324 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/element_decl.rb
325 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/element_content.rb
326 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/character_data.rb
327 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/namespace.rb
328 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/attr.rb
329 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/dtd.rb
330 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/cdata.rb
331 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/text.rb
332 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/document.rb
333 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/document_fragment.rb
334 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/processing_instruction.rb
335 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/node_set.rb
336 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/syntax_error.rb
337 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/xpath/syntax_error.rb
338 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/xpath.rb
339 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/xpath_context.rb
340 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/builder.rb
341 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/reader.rb
342 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/notation.rb
343 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/entity_decl.rb
344 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/entity_reference.rb
345 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/schema.rb
346 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/relax_ng.rb
347 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml.rb
348 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xslt/stylesheet.rb
349 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xslt.rb
350 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/entity_lookup.rb
351 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/document.rb
352 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/document_fragment.rb
353 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/encoding_reader.rb
354 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/sax/parser_context.rb
355 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/sax/parser.rb
356 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/sax/push_parser.rb
357 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/element_description.rb
358 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/element_description_defaults.rb
359 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4.rb
360 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html.rb
361 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/decorators/slop.rb
362 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/css/node.rb
363 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/css/xpath_visitor.rb
364 /usr/share/gems/gems/racc-1.7.3/lib/racc/info.rb
365 /usr/lib64/gems/ruby/racc-1.7.3/racc/cparse.so
366 /usr/share/gems/gems/racc-1.7.3/lib/racc/parser.rb
367 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/css/parser_extras.rb
368 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/css/parser.rb
369 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/css/tokenizer.rb
370 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/css/syntax_error.rb
371 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/css.rb
372 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/builder.rb
373 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/encoding_handler.rb
374 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html5/document.rb
375 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html5/document_fragment.rb
376 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html5/node.rb
377 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/gumbo.rb
378 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html5.rb
379 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri.rb
380 /usr/share/gems/gems/htmlentities-4.3.4/lib/htmlentities/mappings/html4.rb
381 /usr/share/gems/gems/htmlentities-4.3.4/lib/htmlentities/mappings/xhtml1.rb
382 /usr/share/gems/gems/htmlentities-4.3.4/lib/htmlentities/mappings/expanded.rb
383 /usr/share/gems/gems/htmlentities-4.3.4/lib/htmlentities/flavors.rb
384 /usr/share/gems/gems/htmlentities-4.3.4/lib/htmlentities/encoder.rb
385 /usr/share/gems/gems/htmlentities-4.3.4/lib/htmlentities/decoder.rb
386 /usr/share/gems/gems/htmlentities-4.3.4/lib/htmlentities/version.rb
387 /usr/share/gems/gems/htmlentities-4.3.4/lib/htmlentities.rb
388 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/web.rb
389 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/thalia_provider.rb
390 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/worldcat.rb
391 /usr/lib64/gems/ruby/zoom-0.5.0/zoom.so
392 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/pseudomarc.rb
393 /usr/share/gems/gems/marc-1.2.0/lib/marc/version.rb
394 /usr/share/gems/gems/marc-1.2.0/lib/marc/constants.rb
395 /usr/share/gems/gems/marc-1.2.0/lib/marc/record.rb
396 /usr/share/gems/gems/marc-1.2.0/lib/marc/datafield.rb
397 /usr/share/gems/gems/marc-1.2.0/lib/marc/controlfield.rb
398 /usr/share/gems/gems/marc-1.2.0/lib/marc/subfield.rb
399 /usr/share/gems/gems/scrub_rb-1.0.1/lib/scrub_rb/version.rb
400 /usr/share/gems/gems/scrub_rb-1.0.1/lib/scrub_rb/monkey_patch.rb
401 /usr/share/gems/gems/scrub_rb-1.0.1/lib/scrub_rb.rb
402 /usr/share/gems/gems/marc-1.2.0/lib/marc/reader.rb
403 /usr/share/gems/gems/marc-1.2.0/lib/marc/writer.rb
404 /usr/share/gems/gems/marc-1.2.0/lib/marc/exception.rb
405 /usr/share/gems/gems/marc-1.2.0/lib/marc/xmlwriter.rb
406 /usr/share/gems/gems/marc-1.2.0/lib/marc/unsafe_xmlwriter.rb
407 /usr/share/gems/gems/marc-1.2.0/lib/marc/xml_parsers.rb
408 /usr/share/gems/gems/marc-1.2.0/lib/marc/xmlreader.rb
409 /usr/share/gems/gems/marc-1.2.0/lib/marc/dublincore.rb
410 /usr/share/ruby/json/version.rb
411 /usr/share/ruby/ostruct.rb
412 /usr/share/ruby/json/generic_object.rb
413 /usr/share/ruby/json/common.rb
414 /usr/lib64/ruby/json/ext/parser.so
415 /usr/lib64/ruby/json/ext/generator.so
416 /usr/share/ruby/json/ext.rb
417 /usr/share/ruby/json.rb
418 /usr/share/gems/gems/marc-1.2.0/lib/marc/jsonl_reader.rb
419 /usr/share/gems/gems/marc-1.2.0/lib/marc/jsonl_writer.rb
420 /usr/share/gems/gems/marc-1.2.0/lib/marc.rb
421 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/z3950_provider.rb
422 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/loc_provider.rb
423 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/bl_provider.rb
424 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/sbn_provider.rb
425 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers.rb
426 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/default_preferences.rb
427 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/preferences.rb
428 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/undo_manager.rb
429 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/web_themes.rb
430 /usr/share/gems/gems/glib2-4.2.0/lib/glib2/deprecatable.rb
431 /usr/lib64/gems/ruby/glib2-4.2.0/glib2.so
432 /usr/share/gems/gems/glib2-4.2.0/lib/glib2/version.rb
433 /usr/share/gems/gems/glib2-4.2.0/lib/glib2/deprecated.rb
434 /usr/share/gems/gems/glib2-4.2.0/lib/glib2/date-time.rb
435 /usr/share/gems/gems/glib2-4.2.0/lib/glib2/regex.rb
436 /usr/share/gems/gems/glib2-4.2.0/lib/glib2/variant.rb
437 /usr/share/gems/gems/glib2-4.2.0/lib/glib2.rb
438 /usr/lib64/gems/ruby/gobject-introspection-4.2.0/gobject_introspection.so
439 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/arg-info.rb
440 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/collection-reader.rb
441 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/boxed-info.rb
442 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/callable-info.rb
443 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/function-info.rb
444 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/interface-info.rb
445 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/object-info.rb
446 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/registered-type-info.rb
447 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/repository.rb
448 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/struct-info.rb
449 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/type-info.rb
450 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/type-tag.rb
451 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/union-info.rb
452 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/version.rb
453 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/loader.rb
454 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection.rb
455 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/loader.rb
456 /usr/lib64/gems/ruby/gio2-4.2.0/gio2.so
457 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/action.rb
458 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/action-map.rb
459 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/application-command-line.rb
460 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/content-type.rb
461 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/file.rb
462 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/icon.rb
463 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/inet-address.rb
464 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/input-stream.rb
465 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/menu-item.rb
466 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/output-stream.rb
467 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/pollable-input-stream.rb
468 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/pollable-output-stream.rb
469 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/resources.rb
470 /usr/lib64/ruby/fiddle.so
471 /usr/share/ruby/fiddle/closure.rb
472 /usr/share/ruby/fiddle/function.rb
473 /usr/share/ruby/fiddle/version.rb
474 /usr/share/ruby/fiddle.rb
475 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/ruby-seekable.rb
476 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/ruby-input-stream.rb
477 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/ruby-output-stream.rb
478 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/settings.rb
479 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/settings-schema-source.rb
480 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/simple-action.rb
481 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/volume.rb
482 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/deprecated.rb
483 /usr/share/gems/gems/gio2-4.2.0/lib/gio2.rb
484 /usr/share/gems/gems/gdk_pixbuf2-4.2.0/lib/gdk_pixbuf2/loader.rb
485 /usr/share/gems/gems/gdk_pixbuf2-4.2.0/lib/gdk_pixbuf2/pixbuf.rb
486 /usr/share/gems/gems/gdk_pixbuf2-4.2.0/lib/gdk_pixbuf2/pixbuf-loader.rb
487 /usr/share/gems/gems/gdk_pixbuf2-4.2.0/lib/gdk_pixbuf2/deprecated.rb
488 /usr/share/gems/gems/gdk_pixbuf2-4.2.0/lib/gdk_pixbuf2/version.rb
489 /usr/share/gems/gems/gdk_pixbuf2-4.2.0/lib/gdk_pixbuf2.rb
490 /usr/share/gems/gems/atk-4.2.0/lib/atk.rb
491 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/utils.rb
492 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/alpha_component.rb
493 /usr/share/gems/gems/matrix-0.4.2/lib/matrix/version.rb
494 /usr/share/gems/gems/matrix-0.4.2/lib/matrix.rb
495 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/convert.rb
496 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/helper.rb
497 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/abstract_color.rb
498 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/hsl.rb
499 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/hsla.rb
500 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/husl.rb
501 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/rgb.rb
502 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/rgba.rb
503 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/xterm256.rb
504 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/xyy.rb
505 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/xyz.rb
506 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/color_data.rb
507 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/named_colors.rb
508 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/colormap.rb
509 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/listed_colormap.rb
510 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/linear_segmented_colormap.rb
511 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/colormap_registry.rb
512 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/colormap_data/matplotlib_builtin.rb
513 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/colormap_data/seaborn_builtin.rb
514 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/colormap_data.rb
515 /usr/share/gems/gems/red-colors-0.3.0/lib/colors.rb
516 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/color.rb
517 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/paper.rb
518 /usr/lib64/gems/ruby/cairo-1.17.13/cairo.so
519 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/constants.rb
520 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/point.rb
521 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/colors.rb
522 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/papers.rb
523 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/context/rectangle.rb
524 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/context/triangle.rb
525 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/context/circle.rb
526 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/context/path.rb
527 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/context/blur.rb
528 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/context/color.rb
529 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/context.rb
530 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/device.rb
531 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/surface.rb
532 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/pattern.rb
533 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/path.rb
534 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/region.rb
535 /usr/share/gems/gems/cairo-1.17.13/lib/cairo.rb
536 /usr/lib64/gems/ruby/cairo-gobject-4.2.0/cairo_gobject.so
537 /usr/share/gems/gems/cairo-gobject-4.2.0/lib/cairo-gobject.rb
538 /usr/share/gems/gems/pango-4.2.0/lib/pango/loader.rb
539 /usr/share/gems/gems/pango-4.2.0/lib/pango/cairo-loader.rb
540 /usr/share/gems/gems/pango-4.2.0/lib/pango/fc-loader.rb
541 /usr/share/gems/gems/pango-4.2.0/lib/pango/ft2-loader.rb
542 /usr/share/gems/gems/pango-4.2.0/lib/pango/ot-loader.rb
543 /usr/lib64/gems/ruby/pango-4.2.0/pango.so
544 /usr/share/gems/gems/pango-4.2.0/lib/pango/attr-list.rb
545 /usr/share/gems/gems/pango-4.2.0/lib/pango/attr-type.rb
546 /usr/share/gems/gems/pango-4.2.0/lib/pango/color.rb
547 /usr/share/gems/gems/pango-4.2.0/lib/pango/font-description.rb
548 /usr/share/gems/gems/pango-4.2.0/lib/pango/language.rb
549 /usr/share/gems/gems/pango-4.2.0/lib/pango/layout.rb
550 /usr/share/gems/gems/pango-4.2.0/lib/pango/rectangle.rb
551 /usr/share/gems/gems/pango-4.2.0/lib/pango/markup.rb
552 /usr/share/gems/gems/pango-4.2.0/lib/pango/matrix.rb
553 /usr/share/gems/gems/pango-4.2.0/lib/pango/version.rb
554 /usr/share/gems/gems/pango-4.2.0/lib/pango/deprecated.rb
555 /usr/share/gems/gems/pango-4.2.0/lib/pango.rb
556 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/loader.rb
557 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/x11-loader.rb
558 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3.rb
559 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/loader.rb
560 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3.rb
561 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/icons.rb
562 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/builder_base.rb
563 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/event-readers.rb
564 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/atom.rb
565 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/color.rb
566 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/cursor.rb
567 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/event.rb
568 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/rectangle.rb
569 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/rgba.rb
570 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/screen.rb
571 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/window.rb
572 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/window-attr.rb
573 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/cairo.rb
574 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/deprecated.rb
575 /usr/lib64/gems/ruby/gtk3-4.2.0/gtk3.so
576 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/gdk-drag-context.rb
577 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/gdk-screen.rb
578 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/about-dialog.rb
579 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/action.rb
580 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/action-group.rb
581 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/application.rb
582 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/binding-set.rb
583 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/border.rb
584 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/box.rb
585 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/button.rb
586 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/builder.rb
587 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/calendar.rb
588 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/cell-layout.rb
589 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/check-menu-item.rb
590 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/clipboard.rb
591 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/color-chooser-dialog.rb
592 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/combo-box.rb
593 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/combo-box-text.rb
594 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/container.rb
595 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/css-provider.rb
596 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/dialog.rb
597 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/entry.rb
598 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/entry-buffer.rb
599 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/file-chooser-dialog.rb
600 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/font-chooser-dialog.rb
601 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/gesture-multi-press.rb
602 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/icon-size.rb
603 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/icon-theme.rb
604 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/icon-view.rb
605 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/image.rb
606 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/image-menu-item.rb
607 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/label.rb
608 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/level-bar.rb
609 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/list-store.rb
610 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/menu-item.rb
611 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/message-dialog.rb
612 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/paned.rb
613 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/radio-action.rb
614 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/radio-button.rb
615 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/recent-chooser-dialog.rb
616 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/response-type.rb
617 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/scale-button.rb
618 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/scrolled-window.rb
619 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/search-bar.rb
620 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/selection-data.rb
621 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/spin-button.rb
622 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/show-uri.rb
623 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/stack.rb
624 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/stock.rb
625 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/stock-item.rb
626 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/style-context.rb
627 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/style-properties.rb
628 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/table.rb
629 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/target-list.rb
630 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/target-entry.rb
631 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/text-buffer.rb
632 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/text-iter.rb
633 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/text-tag.rb
634 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/text-tag-table.rb
635 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/text-view.rb
636 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/toggle-action.rb
637 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/toggle-button.rb
638 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tool-button.rb
639 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-iter.rb
640 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-model.rb
641 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-model-filter.rb
642 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-model-sort.rb
643 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-path.rb
644 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-selection.rb
645 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-store.rb
646 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-view.rb
647 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-view-column.rb
648 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/ui-manager.rb
649 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/version.rb
650 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/widget.rb
651 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/window.rb
652 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/deprecated.rb
653 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/completion_models.rb
654 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/libraries_combo.rb
655 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/multi_drag_treeview.rb
656 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/alert_dialog.rb
657 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/about_dialog.rb
658 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/calendar_popup.rb
659 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/error_dialog.rb
660 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/book_properties_dialog_base.rb
661 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/book_properties_dialog.rb
662 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/new_book_dialog_manual.rb
663 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/keep_bad_isbn_dialog.rb
664 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/new_book_dialog.rb
665 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/scanners.rb
666 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/scanners/cue_cat.rb
667 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/scanners/keyboard.rb
668 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/provider_preferences_base_dialog.rb
669 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/provider_preferences_dialog.rb
670 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/new_provider_dialog.rb
671 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/preferences_dialog.rb
672 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/export_format.rb
673 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/confirm_erase_dialog.rb
674 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/export_dialog.rb
675 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/skip_entry_dialog.rb
676 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/import_dialog.rb
677 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/barcode_animation.rb
678 /usr/share/gems/gems/gstreamer-4.2.0/lib/gst/loader.rb
679 /usr/share/gems/gems/gstreamer-4.2.0/lib/gst/base-loader.rb
680 /usr/share/gems/gems/gstreamer-4.2.0/lib/gst/controller-loader.rb
681 /usr/share/gems/gems/gstreamer-4.2.0/lib/gst.rb
682 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/sound.rb
683 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/acquire_dialog.rb
684 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/smart_library_rule_box.rb
685 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/smart_library_properties_dialog_base.rb
686 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/smart_library_properties_dialog.rb
687 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/new_smart_library_dialog.rb
688 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/bad_isbns_dialog.rb
689 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/dndable.rb
690 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/init.rb
691 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/really_delete_dialog.rb
692 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/callbacks.rb
693 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/columns.rb
694 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/conflict_while_copying_dialog.rb
695 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_sort_order.rb
696 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/ui_manager.rb
697 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/listview.rb
698 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/iconview_tooltips.rb
699 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/iconview.rb
700 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/sidepane_manager.rb
701 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/main_app.rb
702 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui.rb
703 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/console.rb
704 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria.rb
705 /usr/share/gems/gems/addressable-2.8.1/lib/addressable/version.rb
706 /usr/share/gems/gems/addressable-2.8.1/lib/addressable/idna/pure.rb
707 /usr/share/gems/gems/addressable-2.8.1/lib/addressable/idna.rb
708 /usr/share/gems/gems/public_suffix-5.0.0/lib/public_suffix/domain.rb
709 /usr/share/gems/gems/public_suffix-5.0.0/lib/public_suffix/version.rb
710 /usr/share/gems/gems/public_suffix-5.0.0/lib/public_suffix/errors.rb
711 /usr/share/gems/gems/public_suffix-5.0.0/lib/public_suffix/rule.rb
712 /usr/share/gems/gems/public_suffix-5.0.0/lib/public_suffix/list.rb
713 /usr/share/gems/gems/public_suffix-5.0.0/lib/public_suffix.rb
714 /usr/share/gems/gems/addressable-2.8.1/lib/addressable/uri.rb
715 /usr/share/gems/gems/addressable-2.8.1/lib/addressable/template.rb
716 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/light/node.rb
717 /usr/lib64/ruby/bigdecimal.so
718 /usr/share/ruby/bigdecimal.rb
719 /usr/share/gems/gems/crack-0.4.5/lib/crack/xml.rb
720 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/deprecation.rb
721 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/version.rb
722 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/errors.rb
723 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/query_mapper.rb
724 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/uri.rb
725 /usr/share/ruby/base64.rb
726 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/headers.rb
727 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/hash_counter.rb
728 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/hash_keys_stringifier.rb
729 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/values_stringifier.rb
730 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/json.rb
731 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/version_checker.rb
732 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/hash_validator.rb
733 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/matchers/hash_argument_matcher.rb
734 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/matchers/hash_excluding_matcher.rb
735 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/matchers/hash_including_matcher.rb
736 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/matchers/any_arg_matcher.rb
737 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/request_pattern.rb
738 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/request_signature.rb
739 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/responses_sequence.rb
740 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/request_stub.rb
741 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/response.rb
742 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/rack_response.rb
743 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/stub_request_snippet.rb
744 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/request_signature_snippet.rb
745 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff/util.rb
746 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff/compare_hashes.rb
747 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff/lcs.rb
748 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff/lcs_compare_arrays.rb
749 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff/linear_compare_array.rb
750 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff/diff.rb
751 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff/patch.rb
752 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff/version.rb
753 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff.rb
754 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/request_body_diff.rb
755 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/assertion_failure.rb
756 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/request_execution_verifier.rb
757 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/config.rb
758 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/callback_registry.rb
759 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/request_registry.rb
760 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/stub_registry.rb
761 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/api.rb
762 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb
763 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/http_lib_adapter.rb
764 /usr/share/ruby/digest/version.rb
765 /usr/lib64/ruby/digest.so
766 /usr/share/ruby/digest/loader.rb
767 /usr/share/ruby/digest.rb
768 /usr/lib64/ruby/openssl.so
769 /usr/share/ruby/openssl/bn.rb
770 /usr/share/ruby/openssl/marshal.rb
771 /usr/share/ruby/openssl/pkey.rb
772 /usr/share/ruby/openssl/cipher.rb
773 /usr/share/ruby/openssl/digest.rb
774 /usr/share/ruby/openssl/hmac.rb
775 /usr/share/ruby/openssl/x509.rb
776 /usr/share/ruby/openssl/buffering.rb
777 /usr/lib64/ruby/io/nonblock.so
778 /usr/share/ruby/ipaddr.rb
779 /usr/share/ruby/openssl/ssl.rb
780 /usr/share/ruby/openssl/pkcs5.rb
781 /usr/share/ruby/openssl/version.rb
782 /usr/share/ruby/openssl.rb
783 /usr/share/ruby/net/https.rb
784 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/net_http_response.rb
785 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/net_http.rb
786 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/http_rb_adapter.rb
787 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/httpclient_adapter.rb
788 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/patron_adapter.rb
789 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/curb_adapter.rb
790 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/em_http_request_adapter.rb
791 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb
792 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/excon_adapter.rb
793 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/manticore_adapter.rb
794 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/async_http_client_adapter.rb
795 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/webmock.rb
796 /usr/share/gems/gems/webmock-3.18.1/lib/webmock.rb
797 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/object_formatter.rb
798 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/english_phrasing.rb
799 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/fuzzy_matcher.rb
800 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/composable.rb
801 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/built_in/base_matcher.rb
802 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/built_in.rb
803 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/generated_descriptions.rb
804 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/dsl.rb
805 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/matcher_delegator.rb
806 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/aliased_matcher.rb
807 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/expecteds_for_multiple_diffs.rb
808 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers.rb
809 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/expectations/expectation_target.rb
810 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/expectations/syntax.rb
811 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/expectations/configuration.rb
812 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/expectations/fail_with.rb
813 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/expectations/handler.rb
814 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/expectations/version.rb
815 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/expectations.rb
816 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/rspec/matchers/request_pattern_matcher.rb
817 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/rspec/matchers/webmock_matcher.rb
818 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/rspec/matchers.rb
819 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/rspec.rb
820 /usr/share/gems/gems/pry-0.14.1/lib/pry/version.rb
821 /usr/share/gems/gems/pry-0.14.1/lib/pry/last_exception.rb
822 /usr/share/gems/gems/pry-0.14.1/lib/pry/forwardable.rb
823 /usr/share/gems/gems/pry-0.14.1/lib/pry/helpers/base_helpers.rb
824 /usr/share/gems/gems/pry-0.14.1/lib/pry/helpers/documentation_helpers.rb
825 /usr/share/gems/gems/pry-0.14.1/lib/pry/helpers/options_helpers.rb
826 /usr/share/gems/gems/pry-0.14.1/lib/pry/helpers/command_helpers.rb
827 /usr/share/gems/gems/pry-0.14.1/lib/pry/helpers/text.rb
828 /usr/share/gems/gems/pry-0.14.1/lib/pry/helpers/table.rb
829 /usr/share/gems/gems/pry-0.14.1/lib/pry/helpers/platform.rb
830 /usr/share/gems/gems/pry-0.14.1/lib/pry/helpers.rb
831 /usr/share/gems/gems/pry-0.14.1/lib/pry/basic_object.rb
832 /usr/share/gems/gems/pry-0.14.1/lib/pry/prompt.rb
833 /usr/share/gems/gems/pry-0.14.1/lib/pry/code_object.rb
834 /usr/share/gems/gems/pry-0.14.1/lib/pry/exceptions.rb
835 /usr/share/gems/gems/pry-0.14.1/lib/pry/hooks.rb
836 /usr/share/gems/gems/pry-0.14.1/lib/pry/input_completer.rb
837 /usr/share/gems/gems/pry-0.14.1/lib/pry/command.rb
838 /usr/share/gems/gems/pry-0.14.1/lib/pry/class_command.rb
839 /usr/share/gems/gems/pry-0.14.1/lib/pry/block_command.rb
840 /usr/share/gems/gems/pry-0.14.1/lib/pry/command_set.rb
841 /usr/share/gems/gems/coderay-1.1.3/lib/coderay.rb
842 /usr/share/gems/gems/pry-0.14.1/lib/pry/syntax_highlighter.rb
843 /usr/share/gems/gems/pry-0.14.1/lib/pry/editor.rb
844 /usr/share/gems/gems/pry-0.14.1/lib/pry/history.rb
845 /usr/share/gems/gems/coderay-1.1.3/lib/coderay/helpers/plugin_host.rb
846 /usr/share/gems/gems/coderay-1.1.3/lib/coderay/encoders.rb
847 /usr/share/gems/gems/coderay-1.1.3/lib/coderay/encoders/_map.rb
848 /usr/share/gems/gems/coderay-1.1.3/lib/coderay/helpers/plugin.rb
849 /usr/share/gems/gems/coderay-1.1.3/lib/coderay/encoders/encoder.rb
850 /usr/share/gems/gems/coderay-1.1.3/lib/coderay/encoders/terminal.rb
851 /usr/share/gems/gems/pry-0.14.1/lib/pry/color_printer.rb
852 /usr/share/gems/gems/pry-0.14.1/lib/pry/exception_handler.rb
853 /usr/share/gems/gems/pry-0.14.1/lib/pry/system_command_handler.rb
854 /usr/share/gems/gems/pry-0.14.1/lib/pry/control_d_handler.rb
855 /usr/share/gems/gems/pry-0.14.1/lib/pry/command_state.rb
856 /usr/share/gems/gems/pry-0.14.1/lib/pry/warning.rb
857 /usr/share/gems/gems/pry-0.14.1/lib/pry/env.rb
858 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/jruby_hacks.rb
859 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/methods_helper.rb
860 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/interrogatable.rb
861 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/grep.rb
862 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/formatter.rb
863 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/globals.rb
864 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/constants.rb
865 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/methods.rb
866 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/self_methods.rb
867 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/instance_vars.rb
868 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/local_names.rb
869 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/local_vars.rb
870 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/ls_entity.rb
871 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls.rb
872 /usr/share/gems/gems/pry-0.14.1/lib/pry/config/attributable.rb
873 /usr/share/gems/gems/pry-0.14.1/lib/pry/config/value.rb
874 /usr/share/gems/gems/pry-0.14.1/lib/pry/config/memoized_value.rb
875 /usr/share/gems/gems/pry-0.14.1/lib/pry/config/lazy_value.rb
876 /usr/share/gems/gems/pry-0.14.1/lib/pry/config.rb
877 /usr/share/gems/gems/pry-0.14.1/lib/pry/pry_class.rb
878 /usr/share/gems/gems/method_source-1.0.0/lib/method_source/version.rb
879 /usr/share/gems/gems/method_source-1.0.0/lib/method_source/source_location.rb
880 /usr/share/gems/gems/method_source-1.0.0/lib/method_source/code_helpers.rb
881 /usr/share/gems/gems/method_source-1.0.0/lib/method_source.rb
882 /usr/share/gems/gems/pry-0.14.1/lib/pry/pry_instance.rb
883 /usr/share/gems/gems/pry-0.14.1/lib/pry/inspector.rb
884 /usr/share/gems/gems/pry-0.14.1/lib/pry/pager.rb
885 /usr/share/gems/gems/pry-0.14.1/lib/pry/indent.rb
886 /usr/share/gems/gems/pry-0.14.1/lib/pry/object_path.rb
887 /usr/share/gems/gems/pry-0.14.1/lib/pry/output.rb
888 /usr/share/gems/gems/pry-0.14.1/lib/pry/input_lock.rb
889 /usr/share/gems/gems/pry-0.14.1/lib/pry/repl.rb
890 /usr/share/gems/gems/pry-0.14.1/lib/pry/code.rb
891 /usr/share/gems/gems/pry-0.14.1/lib/pry/ring.rb
892 /usr/share/gems/gems/pry-0.14.1/lib/pry/method.rb
893 /usr/share/gems/gems/pry-0.14.1/lib/pry/wrapped_module.rb
894 /usr/share/gems/gems/pry-0.14.1/lib/pry/wrapped_module/candidate.rb
895 /usr/share/gems/gems/pry-0.14.1/lib/pry/slop/option.rb
896 /usr/share/gems/gems/pry-0.14.1/lib/pry/slop/commands.rb
897 /usr/share/gems/gems/pry-0.14.1/lib/pry/slop.rb
898 /usr/share/gems/gems/pry-0.14.1/lib/pry/cli.rb
899 /usr/share/gems/gems/pry-0.14.1/lib/pry/core_extensions.rb
900 /usr/share/gems/gems/pry-0.14.1/lib/pry/repl_file_loader.rb
901 /usr/share/gems/gems/pry-0.14.1/lib/pry/code/loc.rb
902 /usr/share/gems/gems/pry-0.14.1/lib/pry/code/code_range.rb
903 /usr/share/gems/gems/pry-0.14.1/lib/pry/code/code_file.rb
904 /usr/share/gems/gems/pry-0.14.1/lib/pry/method/weird_method_locator.rb
905 /usr/share/gems/gems/pry-0.14.1/lib/pry/method/disowned.rb
906 /usr/share/gems/gems/pry-0.14.1/lib/pry/method/patcher.rb
907 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/amend_line.rb
908 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/bang.rb
909 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/bang_pry.rb
910 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/cat.rb
911 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/cat/abstract_formatter.rb
912 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/cat/input_expression_formatter.rb
913 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/cat/exception_formatter.rb
914 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/cat/file_formatter.rb
915 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/cd.rb
916 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/change_inspector.rb
917 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/change_prompt.rb
918 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/clear_screen.rb
919 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/code_collector.rb
920 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/disable_pry.rb
921 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/easter_eggs.rb
922 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/edit.rb
923 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/edit/exception_patcher.rb
924 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/edit/file_and_line_locator.rb
925 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/exit.rb
926 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/exit_all.rb
927 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/exit_program.rb
928 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/find_method.rb
929 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/fix_indent.rb
930 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/help.rb
931 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/hist.rb
932 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/import_set.rb
933 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/jump_to.rb
934 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/list_inspectors.rb
935 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/nesting.rb
936 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/play.rb
937 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/pry_backtrace.rb
938 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/pry_version.rb
939 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/raise_up.rb
940 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/reload_code.rb
941 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/reset.rb
942 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ri.rb
943 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/save_file.rb
944 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/shell_command.rb
945 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/shell_mode.rb
946 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/show_info.rb
947 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/show_doc.rb
948 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/show_input.rb
949 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/show_source.rb
950 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/stat.rb
951 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/switch_to.rb
952 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/toggle_color.rb
953 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/watch_expression.rb
954 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/watch_expression/expression.rb
955 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/whereami.rb
956 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/wtf.rb
957 /usr/share/gems/gems/pry-0.14.1/lib/pry.rb
958 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/spec/spec_helper.rb
959 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/instance_method_stasher.rb
960 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/method_double.rb
961 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/argument_matchers.rb
962 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/object_reference.rb
963 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/example_methods.rb
964 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/proxy.rb
965 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/test_double.rb
966 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/argument_list_matcher.rb
967 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/mutex.rb
968 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/message_expectation.rb
969 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/order_group.rb
970 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/error_generator.rb
971 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/space.rb
972 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/mutate_const.rb
973 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/targets.rb
974 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/syntax.rb
975 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/configuration.rb
976 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/verifying_message_expectation.rb
977 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/method_reference.rb
978 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/verifying_proxy.rb
979 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/verifying_double.rb
980 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/version.rb
981 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks.rb
982 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/mocking_adapters/rspec.rb
983 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_status_persister.rb
984 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/base_formatter.rb
985 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/base_text_formatter.rb
986 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/progress_formatter.rb
987 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/profiler.rb
988 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/built_in/be_instance_of.rb
989 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/built_in/be.rb
990 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/built_in/has.rb
991 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/built_in/eq.rb
992 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/built_in/raise_error.rb
993 /usr/share/gems/gems/syck-1.4.1/lib/syck/encoding.rb
994 /usr/lib64/ruby/enc/utf_16le.so
995 /usr/lib64/ruby/enc/utf_16be.so
996 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/expectations/failure_aggregator.rb
997 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/matchers/expectation_customization.rb
998 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/matchers/receive.rb
999 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/chain.rb
1000 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/error_generator.rb
1001 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/stub_chain.rb
1002 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/stub_chain_chain.rb
1003 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/expect_chain_chain.rb
1004 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/expectation_chain.rb
1005 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/message_chains.rb
1006 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/recorder.rb
1007 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/proxy.rb
1008 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance.rb
1009 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/built_in/match.rb
* Process memory map:
55e2cf057000-55e2cf058000 r--p 00000000 08:08 7003309 /usr/bin/ruby-mri
55e2cf058000-55e2cf059000 r-xp 00001000 08:08 7003309 /usr/bin/ruby-mri
55e2cf059000-55e2cf05a000 r--p 00002000 08:08 7003309 /usr/bin/ruby-mri
55e2cf05a000-55e2cf05b000 r--p 00002000 08:08 7003309 /usr/bin/ruby-mri
55e2cf05b000-55e2cf05c000 rw-p 00003000 08:08 7003309 /usr/bin/ruby-mri
55e2cfbcf000-55e2d4095000 rw-p 00000000 00:00 0 [heap]
7f69fe200000-7f69fe451000 r--s 00000000 08:08 6979654 /usr/lib64/libc.so.6
7f69fe600000-7f6a00531000 r--s 00000000 08:08 7003543 /usr/lib/debug/usr/lib64/libruby.so.3.3.0-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64.debug
7f6a00600000-7f6a02531000 r--s 00000000 08:08 7003543 /usr/lib/debug/usr/lib64/libruby.so.3.3.0-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64.debug
7f6a02600000-7f6a02b8a000 r--s 00000000 08:08 6984462 /usr/lib64/libruby.so.3.3.0
7f6a02bf0000-7f6a02c80000 rw-p 00000000 00:00 0
7f6a02c8a000-7f6a02cb0000 r--s 00000000 08:08 7001502 /usr/share/mime/mime.cache
7f6a02cb0000-7f6a02dd0000 rw-p 00000000 00:00 0
7f6a02dd3000-7f6a02dd8000 r--s 00000000 08:08 7003308 /usr/lib/debug/usr/bin/ruby-mri-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64.debug
7f6a02dd8000-7f6a02df6000 r--p 00000000 08:08 6982263 /usr/lib64/libssl.so.3.1.4
7f6a02df6000-7f6a02e53000 r-xp 0001e000 08:08 6982263 /usr/lib64/libssl.so.3.1.4
7f6a02e53000-7f6a02e6d000 r--p 0007b000 08:08 6982263 /usr/lib64/libssl.so.3.1.4
7f6a02e6d000-7f6a02e77000 r--p 00094000 08:08 6982263 /usr/lib64/libssl.so.3.1.4
7f6a02e77000-7f6a02e7b000 rw-p 0009e000 08:08 6982263 /usr/lib64/libssl.so.3.1.4
7f6a02e7b000-7f6a02e90000 r--p 00000000 08:08 6984544 /usr/lib64/ruby/openssl.so
7f6a02e90000-7f6a02eca000 r-xp 00015000 08:08 6984544 /usr/lib64/ruby/openssl.so
7f6a02eca000-7f6a02edb000 r--p 0004f000 08:08 6984544 /usr/lib64/ruby/openssl.so
7f6a02edb000-7f6a02edf000 r--p 0005f000 08:08 6984544 /usr/lib64/ruby/openssl.so
7f6a02edf000-7f6a02ee0000 rw-p 00063000 08:08 6984544 /usr/lib64/ruby/openssl.so
7f6a02ee0000-7f6a02fb0000 rw-p 00000000 00:00 0
7f6a02fb4000-7f6a02fb7000 r--p 00000000 08:08 6989071 /usr/lib64/gems/ruby/bigdecimal-3.1.5/bigdecimal.so
7f6a02fb7000-7f6a02fcb000 r-xp 00003000 08:08 6989071 /usr/lib64/gems/ruby/bigdecimal-3.1.5/bigdecimal.so
7f6a02fcb000-7f6a02fce000 r--p 00017000 08:08 6989071 /usr/lib64/gems/ruby/bigdecimal-3.1.5/bigdecimal.so
7f6a02fce000-7f6a02fcf000 r--p 0001a000 08:08 6989071 /usr/lib64/gems/ruby/bigdecimal-3.1.5/bigdecimal.so
7f6a02fcf000-7f6a02fd0000 rw-p 0001b000 08:08 6989071 /usr/lib64/gems/ruby/bigdecimal-3.1.5/bigdecimal.so
7f6a02fd0000-7f6a036c0000 rw-p 00000000 00:00 0
7f6a036c1000-7f6a03702000 r--p 00000000 08:08 6986229 /usr/lib64/libGLdispatch.so.0.0.0
7f6a03702000-7f6a03741000 r-xp 00041000 08:08 6986229 /usr/lib64/libGLdispatch.so.0.0.0
7f6a03741000-7f6a03754000 r--p 00080000 08:08 6986229 /usr/lib64/libGLdispatch.so.0.0.0
7f6a03754000-7f6a03770000 r--p 00093000 08:08 6986229 /usr/lib64/libGLdispatch.so.0.0.0
7f6a03770000-7f6a03771000 rw-p 000af000 08:08 6986229 /usr/lib64/libGLdispatch.so.0.0.0
7f6a03771000-7f6a03779000 rw-p 00000000 00:00 0
7f6a03779000-7f6a037bc000 r--p 00000000 08:08 6993695 /usr/lib64/libGL.so.1.7.0
7f6a037bc000-7f6a037dc000 r-xp 00043000 08:08 6993695 /usr/lib64/libGL.so.1.7.0
7f6a037dc000-7f6a037f0000 r--p 00063000 08:08 6993695 /usr/lib64/libGL.so.1.7.0
7f6a037f0000-7f6a037fe000 r--p 00077000 08:08 6993695 /usr/lib64/libGL.so.1.7.0
7f6a037fe000-7f6a037ff000 rw-p 00085000 08:08 6993695 /usr/lib64/libGL.so.1.7.0
7f6a037ff000-7f6a03800000 rw-p 00000000 00:00 0
7f6a03800000-7f6a03887000 r--p 00000000 08:08 6999115 /usr/lib64/libgtk-3.so.0.2407.32
7f6a03887000-7f6a03c39000 r-xp 00087000 08:08 6999115 /usr/lib64/libgtk-3.so.0.2407.32
7f6a03c39000-7f6a03fb3000 r--p 00439000 08:08 6999115 /usr/lib64/libgtk-3.so.0.2407.32
7f6a03fb3000-7f6a03fc3000 r--p 007b3000 08:08 6999115 /usr/lib64/libgtk-3.so.0.2407.32
7f6a03fc3000-7f6a03fc5000 rw-p 007c3000 08:08 6999115 /usr/lib64/libgtk-3.so.0.2407.32
7f6a03fc5000-7f6a03fca000 rw-p 00000000 00:00 0
7f6a03fcd000-7f6a03fd0000 r--p 00000000 08:08 6993697 /usr/lib64/libGLX.so.0.0.0
7f6a03fd0000-7f6a03feb000 r-xp 00003000 08:08 6993697 /usr/lib64/libGLX.so.0.0.0
7f6a03feb000-7f6a03fee000 r--p 0001e000 08:08 6993697 /usr/lib64/libGLX.so.0.0.0
7f6a03fee000-7f6a03fef000 r--p 00020000 08:08 6993697 /usr/lib64/libGLX.so.0.0.0
7f6a03fef000-7f6a03ff0000 rw-p 00021000 08:08 6993697 /usr/lib64/libGLX.so.0.0.0
7f6a03ff0000-7f6a04021000 rw-p 00000000 00:00 0
7f6a04021000-7f6a08000000 ---p 00000000 00:00 0
7f6a08000000-7f6a08062000 rw-p 00000000 00:00 0
7f6a08062000-7f6a0c000000 ---p 00000000 00:00 0
7f6a0c000000-7f6a0c021000 rw-p 00000000 00:00 0
7f6a0c021000-7f6a10000000 ---p 00000000 00:00 0
7f6a10001000-7f6a10006000 r--s 00000000 08:08 7003308 /usr/lib/debug/usr/bin/ruby-mri-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64.debug
7f6a10006000-7f6a10007000 r--p 00000000 08:08 6984524 /usr/lib64/ruby/enc/utf_16be.so
7f6a10007000-7f6a10008000 r-xp 00001000 08:08 6984524 /usr/lib64/ruby/enc/utf_16be.so
7f6a10008000-7f6a10009000 r--p 00002000 08:08 6984524 /usr/lib64/ruby/enc/utf_16be.so
7f6a10009000-7f6a1000a000 r--p 00002000 08:08 6984524 /usr/lib64/ruby/enc/utf_16be.so
7f6a1000a000-7f6a1000b000 rw-p 00000000 00:00 0
7f6a1000b000-7f6a1000c000 r--p 00000000 08:08 6984525 /usr/lib64/ruby/enc/utf_16le.so
7f6a1000c000-7f6a1000d000 r-xp 00001000 08:08 6984525 /usr/lib64/ruby/enc/utf_16le.so
7f6a1000d000-7f6a1000e000 r--p 00002000 08:08 6984525 /usr/lib64/ruby/enc/utf_16le.so
7f6a1000e000-7f6a1000f000 r--p 00002000 08:08 6984525 /usr/lib64/ruby/enc/utf_16le.so
7f6a1000f000-7f6a10020000 rw-p 00000000 00:00 0
7f6a10020000-7f6a10024000 r--s 00000000 08:08 7003309 /usr/bin/ruby-mri
7f6a10024000-7f6a10026000 r--p 00000000 08:08 6984467 /usr/lib64/ruby/digest.so
7f6a10026000-7f6a10028000 r-xp 00002000 08:08 6984467 /usr/lib64/ruby/digest.so
7f6a10028000-7f6a10029000 r--p 00004000 08:08 6984467 /usr/lib64/ruby/digest.so
7f6a10029000-7f6a1002a000 r--p 00004000 08:08 6984467 /usr/lib64/ruby/digest.so
7f6a1002a000-7f6a1002b000 rw-p 00000000 00:00 0
7f6a1002b000-7f6a10030000 r--p 00000000 08:08 6979963 /usr/lib64/libzstd.so.1.5.5
7f6a10030000-7f6a100d8000 r-xp 00005000 08:08 6979963 /usr/lib64/libzstd.so.1.5.5
7f6a100d8000-7f6a100e5000 r--p 000ad000 08:08 6979963 /usr/lib64/libzstd.so.1.5.5
7f6a100e5000-7f6a100e6000 r--p 000b9000 08:08 6979963 /usr/lib64/libzstd.so.1.5.5
7f6a100e6000-7f6a100e7000 rw-p 00000000 00:00 0
7f6a100e7000-7f6a100ea000 r--p 00000000 08:08 6980086 /usr/lib64/liblz4.so.1.9.4
7f6a100ea000-7f6a10105000 r-xp 00003000 08:08 6980086 /usr/lib64/liblz4.so.1.9.4
7f6a10105000-7f6a10107000 r--p 0001e000 08:08 6980086 /usr/lib64/liblz4.so.1.9.4
7f6a10107000-7f6a10108000 r--p 0001f000 08:08 6980086 /usr/lib64/liblz4.so.1.9.4
7f6a10108000-7f6a10109000 rw-p 00000000 00:00 0
7f6a10109000-7f6a10120000 r--p 00000000 08:08 6980237 /usr/lib64/libsystemd.so.0.38.0
7f6a10120000-7f6a101ba000 r-xp 00017000 08:08 6980237 /usr/lib64/libsystemd.so.0.38.0
7f6a101ba000-7f6a101ee000 r--p 000b1000 08:08 6980237 /usr/lib64/libsystemd.so.0.38.0
7f6a101ee000-7f6a101fa000 r--p 000e4000 08:08 6980237 /usr/lib64/libsystemd.so.0.38.0
7f6a101fa000-7f6a101fb000 rw-p 000f0000 08:08 6980237 /usr/lib64/libsystemd.so.0.38.0
7f6a101fb000-7f6a101fc000 rw-p 00000000 00:00 0
7f6a101fc000-7f6a1020d000 r--p 00000000 08:08 6981561 /usr/lib64/libsqlite3.so.0.8.6
7f6a1020d000-7f6a10323000 r-xp 00011000 08:08 6981561 /usr/lib64/libsqlite3.so.0.8.6
7f6a10323000-7f6a10350000 r--p 00127000 08:08 6981561 /usr/lib64/libsqlite3.so.0.8.6
7f6a10350000-7f6a10354000 r--p 00154000 08:08 6981561 /usr/lib64/libsqlite3.so.0.8.6
7f6a10354000-7f6a10358000 rw-p 00158000 08:08 6981561 /usr/lib64/libsqlite3.so.0.8.6
7f6a10358000-7f6a10359000 rw-p 00000000 00:00 0
7f6a10359000-7f6a10362000 r--p 00000000 08:08 6985992 /usr/lib64/libjson-glib-1.0.so.0.800.0
7f6a10362000-7f6a1037a000 r-xp 00009000 08:08 6985992 /usr/lib64/libjson-glib-1.0.so.0.800.0
7f6a1037a000-7f6a10383000 r--p 00021000 08:08 6985992 /usr/lib64/libjson-glib-1.0.so.0.800.0
7f6a10383000-7f6a10384000 r--p 0002a000 08:08 6985992 /usr/lib64/libjson-glib-1.0.so.0.800.0
7f6a10384000-7f6a10385000 rw-p 00000000 00:00 0
7f6a10385000-7f6a10393000 r--p 00000000 08:08 6985167 /usr/lib64/libdbus-1.so.3.32.4
7f6a10393000-7f6a103c6000 r-xp 0000e000 08:08 6985167 /usr/lib64/libdbus-1.so.3.32.4
7f6a103c6000-7f6a103d7000 r--p 00041000 08:08 6985167 /usr/lib64/libdbus-1.so.3.32.4
7f6a103d7000-7f6a103d9000 r--p 00051000 08:08 6985167 /usr/lib64/libdbus-1.so.3.32.4
7f6a103d9000-7f6a103da000 rw-p 00053000 08:08 6985167 /usr/lib64/libdbus-1.so.3.32.4
7f6a103da000-7f6a103ea000 r--p 00000000 08:08 6997756 /usr/lib64/libatspi.so.0.0.1
7f6a103ea000-7f6a10403000 r-xp 00010000 08:08 6997756 /usr/lib64/libatspi.so.0.0.1
7f6a10403000-7f6a10410000 r--p 00029000 08:08 6997756 /usr/lib64/libatspi.so.0.0.1
7f6a10410000-7f6a10414000 r--p 00035000 08:08 6997756 /usr/lib64/libatspi.so.0.0.1
7f6a10414000-7f6a10415000 rw-p 00039000 08:08 6997756 /usr/lib64/libatspi.so.0.0.1
7f6a10415000-7f6a1042e000 r--p 00000000 08:08 6990988 /usr/lib64/libtracker-sparql-3.0.so.0.600.0
7f6a1042e000-7f6a104b2000 r-xp 00019000 08:08 6990988 /usr/lib64/libtracker-sparql-3.0.so.0.600.0
7f6a104b2000-7f6a104e4000 r--p 0009d000 08:08 6990988 /usr/lib64/libtracker-sparql-3.0.so.0.600.0
7f6a104e4000-7f6a104f2000 r--p 000ce000 08:08 6990988 /usr/lib64/libtracker-sparql-3.0.so.0.600.0
7f6a104f2000-7f6a104f3000 rw-p 000dc000 08:08 6990988 /usr/lib64/libtracker-sparql-3.0.so.0.600.0
7f6a104f3000-7f6a104fa000 r--p 00000000 08:08 6986293 /usr/lib64/libcloudproviders.so.0.3.5
7f6a104fa000-7f6a10506000 r-xp 00007000 08:08 6986293 /usr/lib64/libcloudproviders.so.0.3.5
7f6a10506000-7f6a1050b000 r--p 00013000 08:08 6986293 /usr/lib64/libcloudproviders.so.0.3.5
7f6a1050b000-7f6a1050c000 r--p 00018000 08:08 6986293 /usr/lib64/libcloudproviders.so.0.3.5
7f6a1050c000-7f6a1050d000 rw-p 00019000 08:08 6986293 /usr/lib64/libcloudproviders.so.0.3.5
7f6a1050d000-7f6a10519000 r--p 00000000 08:08 6997887 /usr/lib64/libatk-bridge-2.0.so.0.0.0
7f6a10519000-7f6a10533000 r-xp 0000c000 08:08 6997887 /usr/lib64/libatk-bridge-2.0.so.0.0.0
7f6a10533000-7f6a10546000 r--p 00026000 08:08 6997887 /usr/lib64/libatk-bridge-2.0.so.0.0.0
7f6a10546000-7f6a10548000 r--p 00038000 08:08 6997887 /usr/lib64/libatk-bridge-2.0.so.0.0.0
7f6a10548000-7f6a1054a000 rw-p 0003a000 08:08 6997887 /usr/lib64/libatk-bridge-2.0.so.0.0.0
7f6a1054a000-7f6a105f0000 r--p 00000000 08:08 6999100 /usr/lib64/girepository-1.0/Gtk-3.0.typelib
7f6a105f0000-7f6a10690000 rw-p 00000000 00:00 0
7f6a10691000-7f6a106f1000 r--p 00000000 08:08 6991062 /usr/lib64/libepoxy.so.0.0.0
7f6a106f1000-7f6a10757000 r-xp 00060000 08:08 6991062 /usr/lib64/libepoxy.so.0.0.0
7f6a10757000-7f6a107a5000 r--p 000c6000 08:08 6991062 /usr/lib64/libepoxy.so.0.0.0
7f6a107a5000-7f6a107ad000 r--p 00113000 08:08 6991062 /usr/lib64/libepoxy.so.0.0.0
7f6a107ad000-7f6a107b4000 rw-p 0011b000 08:08 6991062 /usr/lib64/libepoxy.so.0.0.0
7f6a107b4000-7f6a107de000 r--p 00000000 08:08 6999113 /usr/lib64/libgdk-3.so.0.2407.32
7f6a107de000-7f6a10862000 r-xp 0002a000 08:08 6999113 /usr/lib64/libgdk-3.so.0.2407.32
7f6a10862000-7f6a108a4000 r--p 000ae000 08:08 6999113 /usr/lib64/libgdk-3.so.0.2407.32
7f6a108a4000-7f6a108ad000 r--p 000ef000 08:08 6999113 /usr/lib64/libgdk-3.so.0.2407.32
7f6a108ad000-7f6a108af000 rw-p 000f8000 08:08 6999113 /usr/lib64/libgdk-3.so.0.2407.32
7f6a108af000-7f6a108b0000 ---p 00000000 00:00 0
7f6a108b0000-7f6a110d0000 rw-p 00000000 00:00 0
7f6a110d1000-7f6a110d2000 r--p 00000000 08:08 6984539 /usr/lib64/ruby/io/nonblock.so
7f6a110d2000-7f6a110d3000 r-xp 00001000 08:08 6984539 /usr/lib64/ruby/io/nonblock.so
7f6a110d3000-7f6a110d4000 r--p 00002000 08:08 6984539 /usr/lib64/ruby/io/nonblock.so
7f6a110d4000-7f6a110d5000 r--p 00002000 08:08 6984539 /usr/lib64/ruby/io/nonblock.so
7f6a110d5000-7f6a110d6000 rw-p 00000000 00:00 0
7f6a110d6000-7f6a110d9000 r--p 00000000 08:08 6999285 /usr/lib64/gems/ruby/gtk3-4.2.0/gtk3.so
7f6a110d9000-7f6a110dd000 r-xp 00003000 08:08 6999285 /usr/lib64/gems/ruby/gtk3-4.2.0/gtk3.so
7f6a110dd000-7f6a110de000 r--p 00007000 08:08 6999285 /usr/lib64/gems/ruby/gtk3-4.2.0/gtk3.so
7f6a110de000-7f6a110df000 r--p 00008000 08:08 6999285 /usr/lib64/gems/ruby/gtk3-4.2.0/gtk3.so
7f6a110df000-7f6a11100000 rw-p 00000000 00:00 0
7f6a11100000-7f6a11103000 r--p 00000000 08:08 6980210 /usr/lib64/libcap.so.2.69
7f6a11103000-7f6a11109000 r-xp 00003000 08:08 6980210 /usr/lib64/libcap.so.2.69
7f6a11109000-7f6a1110b000 r--p 00009000 08:08 6980210 /usr/lib64/libcap.so.2.69
7f6a1110b000-7f6a1110c000 r--p 0000a000 08:08 6980210 /usr/lib64/libcap.so.2.69
7f6a1110c000-7f6a1110d000 rw-p 0000b000 08:08 6980210 /usr/lib64/libcap.so.2.69
7f6a1110d000-7f6a1110e000 r--p 00000000 08:08 6993491 /usr/lib64/libXinerama.so.1.0.0
7f6a1110e000-7f6a1110f000 r-xp 00001000 08:08 6993491 /usr/lib64/libXinerama.so.1.0.0
7f6a1110f000-7f6a11110000 r--p 00002000 08:08 6993491 /usr/lib64/libXinerama.so.1.0.0
7f6a11110000-7f6a11111000 r--p 00002000 08:08 6993491 /usr/lib64/libXinerama.so.1.0.0
7f6a11111000-7f6a11112000 rw-p 00003000 08:08 6993491 /usr/lib64/libXinerama.so.1.0.0
7f6a11112000-7f6a11114000 r--p 00000000 08:08 6993485 /usr/lib64/libXrandr.so.2.2.0
7f6a11114000-7f6a1111b000 r-xp 00002000 08:08 6993485 /usr/lib64/libXrandr.so.2.2.0
7f6a1111b000-7f6a1111d000 r--p 00009000 08:08 6993485 /usr/lib64/libXrandr.so.2.2.0
7f6a1111d000-7f6a1111e000 r--p 0000a000 08:08 6993485 /usr/lib64/libXrandr.so.2.2.0
7f6a1111e000-7f6a1111f000 rw-p 0000b000 08:08 6993485 /usr/lib64/libXrandr.so.2.2.0
7f6a1111f000-7f6a11120000 r--p 00000000 08:08 6993508 /usr/lib64/libXcomposite.so.1.0.0
7f6a11120000-7f6a11121000 r-xp 00001000 08:08 6993508 /usr/lib64/libXcomposite.so.1.0.0
7f6a11121000-7f6a11122000 r--p 00002000 08:08 6993508 /usr/lib64/libXcomposite.so.1.0.0
7f6a11122000-7f6a11123000 r--p 00002000 08:08 6993508 /usr/lib64/libXcomposite.so.1.0.0
7f6a11123000-7f6a11124000 rw-p 00000000 00:00 0
7f6a11124000-7f6a11126000 r--p 00000000 08:08 6993445 /usr/lib64/libXfixes.so.3.1.0
7f6a11126000-7f6a11129000 r-xp 00002000 08:08 6993445 /usr/lib64/libXfixes.so.3.1.0
7f6a11129000-7f6a1112a000 r--p 00005000 08:08 6993445 /usr/lib64/libXfixes.so.3.1.0
7f6a1112a000-7f6a1112b000 r--p 00005000 08:08 6993445 /usr/lib64/libXfixes.so.3.1.0
7f6a1112b000-7f6a1112c000 rw-p 00006000 08:08 6993445 /usr/lib64/libXfixes.so.3.1.0
7f6a1112c000-7f6a1112d000 r--p 00000000 08:08 6993463 /usr/lib64/libXdamage.so.1.1.0
7f6a1112d000-7f6a1112e000 r-xp 00001000 08:08 6993463 /usr/lib64/libXdamage.so.1.1.0
7f6a1112e000-7f6a1112f000 r--p 00002000 08:08 6993463 /usr/lib64/libXdamage.so.1.1.0
7f6a1112f000-7f6a11130000 r--p 00002000 08:08 6993463 /usr/lib64/libXdamage.so.1.1.0
7f6a11130000-7f6a11131000 rw-p 00000000 00:00 0
7f6a11131000-7f6a11134000 r--p 00000000 08:08 6993476 /usr/lib64/libXcursor.so.1.0.2
7f6a11134000-7f6a1113a000 r-xp 00003000 08:08 6993476 /usr/lib64/libXcursor.so.1.0.2
7f6a1113a000-7f6a1113c000 r--p 00009000 08:08 6993476 /usr/lib64/libXcursor.so.1.0.2
7f6a1113c000-7f6a1113d000 r--p 0000a000 08:08 6993476 /usr/lib64/libXcursor.so.1.0.2
7f6a1113d000-7f6a1113e000 rw-p 00000000 00:00 0
7f6a1113e000-7f6a11141000 r--p 00000000 08:08 6993458 /usr/lib64/libXi.so.6.1.0
7f6a11141000-7f6a1114d000 r-xp 00003000 08:08 6993458 /usr/lib64/libXi.so.6.1.0
7f6a1114d000-7f6a1114f000 r--p 0000f000 08:08 6993458 /usr/lib64/libXi.so.6.1.0
7f6a1114f000-7f6a11150000 r--p 00011000 08:08 6993458 /usr/lib64/libXi.so.6.1.0
7f6a11150000-7f6a11151000 rw-p 00012000 08:08 6993458 /usr/lib64/libXi.so.6.1.0
7f6a11151000-7f6a11157000 r--p 00000000 08:08 6985187 /usr/lib64/libwayland-client.so.0.22.0
7f6a11157000-7f6a1115d000 r-xp 00006000 08:08 6985187 /usr/lib64/libwayland-client.so.0.22.0
7f6a1115d000-7f6a1115f000 r--p 0000c000 08:08 6985187 /usr/lib64/libwayland-client.so.0.22.0
7f6a1115f000-7f6a11161000 r--p 0000e000 08:08 6985187 /usr/lib64/libwayland-client.so.0.22.0
7f6a11161000-7f6a11162000 rw-p 00010000 08:08 6985187 /usr/lib64/libwayland-client.so.0.22.0
7f6a11162000-7f6a11167000 r--p 00000000 08:08 6986483 /usr/lib64/libxkbcommon.so.0.0.0
7f6a11167000-7f6a11187000 r-xp 00005000 08:08 6986483 /usr/lib64/libxkbcommon.so.0.0.0
7f6a11187000-7f6a111a8000 r--p 00025000 08:08 6986483 /usr/lib64/libxkbcommon.so.0.0.0
7f6a111a8000-7f6a111aa000 r--p 00045000 08:08 6986483 /usr/lib64/libxkbcommon.so.0.0.0
7f6a111aa000-7f6a111ab000 rw-p 00000000 00:00 0
7f6a111ab000-7f6a111e5000 r--p 00000000 08:08 6999098 /usr/lib64/girepository-1.0/Gdk-3.0.typelib
7f6a111e5000-7f6a111ec000 r--p 00000000 08:08 6997316 /usr/lib64/libpangoft2-1.0.so.0.5100.0
7f6a111ec000-7f6a111f9000 r-xp 00007000 08:08 6997316 /usr/lib64/libpangoft2-1.0.so.0.5100.0
7f6a111f9000-7f6a111fd000 r--p 00014000 08:08 6997316 /usr/lib64/libpangoft2-1.0.so.0.5100.0
7f6a111fd000-7f6a111fe000 r--p 00018000 08:08 6997316 /usr/lib64/libpangoft2-1.0.so.0.5100.0
7f6a111fe000-7f6a111ff000 rw-p 00000000 00:00 0
7f6a111ff000-7f6a11204000 r--p 00000000 08:08 6997314 /usr/lib64/libpangocairo-1.0.so.0.5100.0
7f6a11204000-7f6a1120c000 r-xp 00005000 08:08 6997314 /usr/lib64/libpangocairo-1.0.so.0.5100.0
7f6a1120c000-7f6a1120e000 r--p 0000d000 08:08 6997314 /usr/lib64/libpangocairo-1.0.so.0.5100.0
7f6a1120e000-7f6a1120f000 r--p 0000f000 08:08 6997314 /usr/lib64/libpangocairo-1.0.so.0.5100.0
7f6a1120f000-7f6a11210000 rw-p 00010000 08:08 6997314 /usr/lib64/libpangocairo-1.0.so.0.5100.0
7f6a11210000-7f6a11310000 rw-p 00000000 00:00 0
7f6a11311000-7f6a11313000 r--p 00000000 08:08 6985315 /usr/lib64/libwayland-cursor.so.0.22.0
7f6a11313000-7f6a11315000 r-xp 00002000 08:08 6985315 /usr/lib64/libwayland-cursor.so.0.22.0
7f6a11315000-7f6a11316000 r--p 00004000 08:08 6985315 /usr/lib64/libwayland-cursor.so.0.22.0
7f6a11316000-7f6a11317000 r--p 00004000 08:08 6985315 /usr/lib64/libwayland-cursor.so.0.22.0
7f6a11317000-7f6a1131b000 rw-p 00005000 08:08 6985315 /usr/lib64/libwayland-cursor.so.0.22.0
7f6a1131b000-7f6a1131d000 r--p 00000000 08:08 6991069 /usr/lib64/libdatrie.so.1.4.0
7f6a1131d000-7f6a11321000 r-xp 00002000 08:08 6991069 /usr/lib64/libdatrie.so.1.4.0
7f6a11321000-7f6a11322000 r--p 00006000 08:08 6991069 /usr/lib64/libdatrie.so.1.4.0
7f6a11322000-7f6a11323000 r--p 00006000 08:08 6991069 /usr/lib64/libdatrie.so.1.4.0
7f6a11323000-7f6a11324000 rw-p 00000000 00:00 0
7f6a11324000-7f6a11326000 r--p 00000000 08:08 6991074 /usr/lib64/libthai.so.0.3.1
7f6a11326000-7f6a1132a000 r-xp 00002000 08:08 6991074 /usr/lib64/libthai.so.0.3.1
7f6a1132a000-7f6a1132d000 r--p 00006000 08:08 6991074 /usr/lib64/libthai.so.0.3.1
7f6a1132d000-7f6a1132e000 r--p 00008000 08:08 6991074 /usr/lib64/libthai.so.0.3.1
7f6a1132e000-7f6a1132f000 rw-p 00009000 08:08 6991074 /usr/lib64/libthai.so.0.3.1
7f6a1132f000-7f6a11331000 r--p 00000000 08:08 6986252 /usr/lib64/libfribidi.so.0.4.0
7f6a11331000-7f6a11336000 r-xp 00002000 08:08 6986252 /usr/lib64/libfribidi.so.0.4.0
7f6a11336000-7f6a1134c000 r--p 00007000 08:08 6986252 /usr/lib64/libfribidi.so.0.4.0
7f6a1134c000-7f6a1134d000 r--p 0001d000 08:08 6986252 /usr/lib64/libfribidi.so.0.4.0
7f6a1134d000-7f6a1134e000 rw-p 0001e000 08:08 6986252 /usr/lib64/libfribidi.so.0.4.0
7f6a1134e000-7f6a11360000 r--p 00000000 08:08 6997312 /usr/lib64/libpango-1.0.so.0.5100.0
7f6a11360000-7f6a11399000 r-xp 00012000 08:08 6997312 /usr/lib64/libpango-1.0.so.0.5100.0
7f6a11399000-7f6a113b3000 r--p 0004b000 08:08 6997312 /usr/lib64/libpango-1.0.so.0.5100.0
7f6a113b3000-7f6a113b7000 r--p 00064000 08:08 6997312 /usr/lib64/libpango-1.0.so.0.5100.0
7f6a113b7000-7f6a113b8000 rw-p 00068000 08:08 6997312 /usr/lib64/libpango-1.0.so.0.5100.0
7f6a113b8000-7f6a113dd000 r--p 00000000 08:08 6997144 /usr/lib64/girepository-1.0/HarfBuzz-0.0.typelib
7f6a113dd000-7f6a113f0000 r--p 00000000 08:08 6997305 /usr/lib64/girepository-1.0/Pango-1.0.typelib
7f6a113f0000-7f6a11400000 rw-p 00000000 00:00 0
7f6a11400000-7f6a11401000 r--p 00000000 08:08 6986187 /usr/lib64/libwayland-egl.so.1.22.0
7f6a11401000-7f6a11402000 r-xp 00001000 08:08 6986187 /usr/lib64/libwayland-egl.so.1.22.0
7f6a11402000-7f6a11403000 r--p 00002000 08:08 6986187 /usr/lib64/libwayland-egl.so.1.22.0
7f6a11403000-7f6a11404000 r--p 00002000 08:08 6986187 /usr/lib64/libwayland-egl.so.1.22.0
7f6a11404000-7f6a11405000 rw-p 00000000 00:00 0
7f6a11405000-7f6a11409000 r--p 00000000 08:08 6997286 /usr/lib64/libcairo-gobject.so.2.11800.0
7f6a11409000-7f6a1140b000 r-xp 00004000 08:08 6997286 /usr/lib64/libcairo-gobject.so.2.11800.0
7f6a1140b000-7f6a1140d000 r--p 00006000 08:08 6997286 /usr/lib64/libcairo-gobject.so.2.11800.0
7f6a1140d000-7f6a1140f000 r--p 00008000 08:08 6997286 /usr/lib64/libcairo-gobject.so.2.11800.0
7f6a1140f000-7f6a11550000 rw-p 00000000 00:00 0
7f6a11552000-7f6a11553000 r--p 00000000 08:08 6981694 /usr/lib64/libbrotlicommon.so.1.1.0
7f6a11553000-7f6a11554000 r-xp 00001000 08:08 6981694 /usr/lib64/libbrotlicommon.so.1.1.0
7f6a11554000-7f6a11573000 r--p 00002000 08:08 6981694 /usr/lib64/libbrotlicommon.so.1.1.0
7f6a11573000-7f6a11574000 r--p 00021000 08:08 6981694 /usr/lib64/libbrotlicommon.so.1.1.0
7f6a11574000-7f6a11575000 rw-p 00000000 00:00 0
7f6a11575000-7f6a11578000 r--p 00000000 08:08 6997073 /usr/lib64/libgraphite2.so.3.2.1
7f6a11578000-7f6a11590000 r-xp 00003000 08:08 6997073 /usr/lib64/libgraphite2.so.3.2.1
7f6a11590000-7f6a11593000 r--p 0001b000 08:08 6997073 /usr/lib64/libgraphite2.so.3.2.1
7f6a11593000-7f6a11595000 r--p 0001d000 08:08 6997073 /usr/lib64/libgraphite2.so.3.2.1
7f6a11595000-7f6a11596000 rw-p 00000000 00:00 0
7f6a11596000-7f6a115a2000 r--p 00000000 08:08 6997152 /usr/lib64/libharfbuzz.so.0.60830.0
7f6a115a2000-7f6a11671000 r-xp 0000c000 08:08 6997152 /usr/lib64/libharfbuzz.so.0.60830.0
7f6a11671000-7f6a116a3000 r--p 000db000 08:08 6997152 /usr/lib64/libharfbuzz.so.0.60830.0
7f6a116a3000-7f6a116a4000 r--p 0010d000 08:08 6997152 /usr/lib64/libharfbuzz.so.0.60830.0
7f6a116a4000-7f6a116a5000 rw-p 0010e000 08:08 6997152 /usr/lib64/libharfbuzz.so.0.60830.0
7f6a116a5000-7f6a116a7000 r--p 00000000 08:08 6979917 /usr/lib64/libbz2.so.1.0.8
7f6a116a7000-7f6a116b5000 r-xp 00002000 08:08 6979917 /usr/lib64/libbz2.so.1.0.8
7f6a116b5000-7f6a116b7000 r--p 00010000 08:08 6979917 /usr/lib64/libbz2.so.1.0.8
7f6a116b7000-7f6a116b8000 r--p 00011000 08:08 6979917 /usr/lib64/libbz2.so.1.0.8
7f6a116b8000-7f6a116b9000 rw-p 00012000 08:08 6979917 /usr/lib64/libbz2.so.1.0.8
7f6a116b9000-7f6a116c4000 r--p 00000000 08:08 6985205 /usr/lib64/libpixman-1.so.0.42.2
7f6a116c4000-7f6a11751000 r-xp 0000b000 08:08 6985205 /usr/lib64/libpixman-1.so.0.42.2
7f6a11751000-7f6a11760000 r--p 00098000 08:08 6985205 /usr/lib64/libpixman-1.so.0.42.2
7f6a11760000-7f6a11768000 r--p 000a6000 08:08 6985205 /usr/lib64/libpixman-1.so.0.42.2
7f6a11768000-7f6a11769000 rw-p 000ae000 08:08 6985205 /usr/lib64/libpixman-1.so.0.42.2
7f6a11769000-7f6a1176e000 r--p 00000000 08:08 6985264 /usr/lib64/libxcb-render.so.0.0.0
7f6a1176e000-7f6a11773000 r-xp 00005000 08:08 6985264 /usr/lib64/libxcb-render.so.0.0.0
7f6a11773000-7f6a11776000 r--p 0000a000 08:08 6985264 /usr/lib64/libxcb-render.so.0.0.0
7f6a11776000-7f6a11777000 r--p 0000c000 08:08 6985264 /usr/lib64/libxcb-render.so.0.0.0
7f6a11777000-7f6a11778000 rw-p 0000d000 08:08 6985264 /usr/lib64/libxcb-render.so.0.0.0
7f6a11778000-7f6a11784000 r--p 00000000 08:08 6985294 /usr/lib64/libxcb.so.1.1.0
7f6a11784000-7f6a11798000 r-xp 0000c000 08:08 6985294 /usr/lib64/libxcb.so.1.1.0
7f6a11798000-7f6a117a1000 r--p 00020000 08:08 6985294 /usr/lib64/libxcb.so.1.1.0
7f6a117a1000-7f6a117a2000 r--p 00028000 08:08 6985294 /usr/lib64/libxcb.so.1.1.0
7f6a117a2000-7f6a117a3000 rw-p 00029000 08:08 6985294 /usr/lib64/libxcb.so.1.1.0
7f6a117a3000-7f6a117a7000 r--p 00000000 08:08 6993439 /usr/lib64/libXext.so.6.4.0
7f6a117a7000-7f6a117b2000 r-xp 00004000 08:08 6993439 /usr/lib64/libXext.so.6.4.0
7f6a117b2000-7f6a117b5000 r--p 0000f000 08:08 6993439 /usr/lib64/libXext.so.6.4.0
7f6a117b5000-7f6a117b6000 r--p 00011000 08:08 6993439 /usr/lib64/libXext.so.6.4.0
7f6a117b6000-7f6a117b7000 rw-p 00012000 08:08 6993439 /usr/lib64/libXext.so.6.4.0
7f6a117b7000-7f6a117d3000 r--p 00000000 08:08 6993436 /usr/lib64/libX11.so.6.4.0
7f6a117d3000-7f6a11868000 r-xp 0001c000 08:08 6993436 /usr/lib64/libX11.so.6.4.0
7f6a11868000-7f6a118f7000 r--p 000b1000 08:08 6993436 /usr/lib64/libX11.so.6.4.0
7f6a118f7000-7f6a118fa000 r--p 0013f000 08:08 6993436 /usr/lib64/libX11.so.6.4.0
7f6a118fa000-7f6a118fe000 rw-p 00142000 08:08 6993436 /usr/lib64/libX11.so.6.4.0
7f6a118fe000-7f6a11905000 r--p 00000000 08:08 6997215 /usr/lib64/libfontconfig.so.1.12.0
7f6a11905000-7f6a11934000 r-xp 00007000 08:08 6997215 /usr/lib64/libfontconfig.so.1.12.0
7f6a11934000-7f6a1194a000 r--p 00036000 08:08 6997215 /usr/lib64/libfontconfig.so.1.12.0
7f6a1194a000-7f6a1194c000 r--p 0004b000 08:08 6997215 /usr/lib64/libfontconfig.so.1.12.0
7f6a1194c000-7f6a1194d000 rw-p 0004d000 08:08 6997215 /usr/lib64/libfontconfig.so.1.12.0
7f6a1194d000-7f6a1195b000 r--p 00000000 08:08 6997161 /usr/lib64/libfreetype.so.6.20.0
7f6a1195b000-7f6a119ed000 r-xp 0000e000 08:08 6997161 /usr/lib64/libfreetype.so.6.20.0
7f6a119ed000-7f6a11a14000 r--p 000a0000 08:08 6997161 /usr/lib64/libfreetype.so.6.20.0
7f6a11a14000-7f6a11a1c000 r--p 000c6000 08:08 6997161 /usr/lib64/libfreetype.so.6.20.0
7f6a11a1c000-7f6a11a1d000 rw-p 00000000 00:00 0
7f6a11a1d000-7f6a11a30000 r--p 00000000 08:08 6997130 /usr/lib64/libcairo.so.2.11800.0
7f6a11a30000-7f6a11b1d000 r-xp 00013000 08:08 6997130 /usr/lib64/libcairo.so.2.11800.0
7f6a11b1d000-7f6a11b4d000 r--p 00100000 08:08 6997130 /usr/lib64/libcairo.so.2.11800.0
7f6a11b4d000-7f6a11b51000 r--p 00130000 08:08 6997130 /usr/lib64/libcairo.so.2.11800.0
7f6a11b51000-7f6a11b53000 rw-p 00134000 08:08 6997130 /usr/lib64/libcairo.so.2.11800.0
7f6a11b53000-7f6a11b54000 rw-p 00000000 00:00 0
7f6a11b54000-7f6a11b63000 r--p 00000000 08:08 6997336 /usr/lib64/gems/ruby/cairo-1.17.13/cairo.so
7f6a11b63000-7f6a11b81000 r-xp 0000f000 08:08 6997336 /usr/lib64/gems/ruby/cairo-1.17.13/cairo.so
7f6a11b81000-7f6a11b8c000 r--p 0002d000 08:08 6997336 /usr/lib64/gems/ruby/cairo-1.17.13/cairo.so
7f6a11b8c000-7f6a11b8f000 r--p 00037000 08:08 6997336 /usr/lib64/gems/ruby/cairo-1.17.13/cairo.so
7f6a11b8f000-7f6a11b90000 rw-p 0003a000 08:08 6997336 /usr/lib64/gems/ruby/cairo-1.17.13/cairo.so
7f6a11b90000-7f6a12650000 rw-p 00000000 00:00 0
7f6a12653000-7f6a1265e000 r--p 00000000 08:08 6997875 /usr/lib64/libatk-1.0.so.0.25009.1
7f6a1265e000-7f6a1266e000 r-xp 0000b000 08:08 6997875 /usr/lib64/libatk-1.0.so.0.25009.1
7f6a1266e000-7f6a12679000 r--p 0001b000 08:08 6997875 /usr/lib64/libatk-1.0.so.0.25009.1
7f6a12679000-7f6a1267c000 r--p 00025000 08:08 6997875 /usr/lib64/libatk-1.0.so.0.25009.1
7f6a1267c000-7f6a1267d000 rw-p 00028000 08:08 6997875 /usr/lib64/libatk-1.0.so.0.25009.1
7f6a1267d000-7f6a12690000 r--p 00000000 08:08 6997873 /usr/lib64/girepository-1.0/Atk-1.0.typelib
7f6a12690000-7f6a126b0000 rw-p 00000000 00:00 0
7f6a126b0000-7f6a126b1000 r--p 00000000 08:08 6979639 /usr/lib/locale/C.utf8/LC_NUMERIC
7f6a126b1000-7f6a126b2000 r--p 00000000 08:08 6979642 /usr/lib/locale/C.utf8/LC_TIME
7f6a126b2000-7f6a126b3000 r--p 00000000 08:08 6979631 /usr/lib/locale/C.utf8/LC_COLLATE
7f6a126b3000-7f6a126b4000 r--p 00000000 08:08 6979637 /usr/lib/locale/C.utf8/LC_MONETARY
7f6a126b4000-7f6a126b5000 r--p 00000000 08:08 6979640 /usr/lib/locale/C.utf8/LC_PAPER
7f6a126b5000-7f6a126b6000 r--p 00000000 08:08 6979638 /usr/lib/locale/C.utf8/LC_NAME
7f6a126b6000-7f6a126ba000 r--p 00000000 08:08 6985178 /usr/lib64/libjpeg.so.62.3.0
7f6a126ba000-7f6a12707000 r-xp 00004000 08:08 6985178 /usr/lib64/libjpeg.so.62.3.0
7f6a12707000-7f6a12737000 r--p 00051000 08:08 6985178 /usr/lib64/libjpeg.so.62.3.0
7f6a12737000-7f6a12738000 r--p 00081000 08:08 6985178 /usr/lib64/libjpeg.so.62.3.0
7f6a12738000-7f6a12739000 rw-p 00082000 08:08 6985178 /usr/lib64/libjpeg.so.62.3.0
7f6a12739000-7f6a1273e000 r--p 00000000 08:08 6985172 /usr/lib64/libpng16.so.16.40.0
7f6a1273e000-7f6a12767000 r-xp 00005000 08:08 6985172 /usr/lib64/libpng16.so.16.40.0
7f6a12767000-7f6a12770000 r--p 0002e000 08:08 6985172 /usr/lib64/libpng16.so.16.40.0
7f6a12770000-7f6a12771000 r--p 00037000 08:08 6985172 /usr/lib64/libpng16.so.16.40.0
7f6a12771000-7f6a12772000 rw-p 00000000 00:00 0
7f6a12772000-7f6a1277a000 r--p 00000000 08:08 6986349 /usr/lib64/libgdk_pixbuf-2.0.so.0.4200.10
7f6a1277a000-7f6a12795000 r-xp 00008000 08:08 6986349 /usr/lib64/libgdk_pixbuf-2.0.so.0.4200.10
7f6a12795000-7f6a1279e000 r--p 00023000 08:08 6986349 /usr/lib64/libgdk_pixbuf-2.0.so.0.4200.10
7f6a1279e000-7f6a1279f000 r--p 0002c000 08:08 6986349 /usr/lib64/libgdk_pixbuf-2.0.so.0.4200.10
7f6a1279f000-7f6a127a0000 rw-p 0002d000 08:08 6986349 /usr/lib64/libgdk_pixbuf-2.0.so.0.4200.10
7f6a127a0000-7f6a12930000 rw-p 00000000 00:00 0
7f6a12930000-7f6a12931000 r--p 00000000 08:08 6981696 /usr/lib64/libbrotlidec.so.1.1.0
7f6a12931000-7f6a12939000 r-xp 00001000 08:08 6981696 /usr/lib64/libbrotlidec.so.1.1.0
7f6a12939000-7f6a1293c000 r--p 00009000 08:08 6981696 /usr/lib64/libbrotlidec.so.1.1.0
7f6a1293c000-7f6a1293d000 r--p 0000b000 08:08 6981696 /usr/lib64/libbrotlidec.so.1.1.0
7f6a1293d000-7f6a1293e000 rw-p 00000000 00:00 0
7f6a1293e000-7f6a1293f000 ---p 00000000 00:00 0
7f6a1293f000-7f6a1313f000 rw-p 00000000 00:00 0
7f6a1313f000-7f6a13140000 ---p 00000000 00:00 0
7f6a13140000-7f6a13b90000 rw-p 00000000 00:00 0
7f6a13b90000-7f6a13b91000 r--p 00000000 08:08 6979630 /usr/lib/locale/C.utf8/LC_ADDRESS
7f6a13b91000-7f6a13b92000 r--p 00000000 08:08 6979641 /usr/lib/locale/C.utf8/LC_TELEPHONE
7f6a13b92000-7f6a13bc6000 r--p 00000000 08:08 6985966 /usr/lib64/girepository-1.0/GLib-2.0.typelib
7f6a13bc6000-7f6a13c20000 r--p 00000000 08:08 6985969 /usr/lib64/girepository-1.0/Gio-2.0.typelib
7f6a13c20000-7f6a13c70000 rw-p 00000000 00:00 0
7f6a13c70000-7f6a13c71000 r--p 00000000 08:08 6979634 /usr/lib/locale/C.utf8/LC_MEASUREMENT
7f6a13c71000-7f6a13c76000 r--s 00000000 08:08 6997283 /usr/lib/fontconfig/cache/d63f98f14a274bd69a5425fc33aaac6b-le64.cache-8
7f6a13c76000-7f6a13c7e000 r--p 00000000 08:08 6980026 /usr/lib64/libblkid.so.1.1.0
7f6a13c7e000-7f6a13ca2000 r-xp 00008000 08:08 6980026 /usr/lib64/libblkid.so.1.1.0
7f6a13ca2000-7f6a13cab000 r--p 0002c000 08:08 6980026 /usr/lib64/libblkid.so.1.1.0
7f6a13cab000-7f6a13cb1000 r--p 00034000 08:08 6980026 /usr/lib64/libblkid.so.1.1.0
7f6a13cb1000-7f6a13cb2000 rw-p 0003a000 08:08 6980026 /usr/lib64/libblkid.so.1.1.0
7f6a13cb2000-7f6a13cb9000 r--p 00000000 08:08 6980334 /usr/lib64/libselinux.so.1
7f6a13cb9000-7f6a13cd5000 r-xp 00007000 08:08 6980334 /usr/lib64/libselinux.so.1
7f6a13cd5000-7f6a13cdc000 r--p 00023000 08:08 6980334 /usr/lib64/libselinux.so.1
7f6a13cdc000-7f6a13cdd000 r--p 00029000 08:08 6980334 /usr/lib64/libselinux.so.1
7f6a13cdd000-7f6a13cde000 rw-p 0002a000 08:08 6980334 /usr/lib64/libselinux.so.1
7f6a13cde000-7f6a13ce0000 rw-p 00000000 00:00 0
7f6a13ce0000-7f6a13d1a000 r--p 00000000 08:08 6985833 /usr/lib64/libgio-2.0.so.0.7800.3
7f6a13d1a000-7f6a13e34000 r-xp 0003a000 08:08 6985833 /usr/lib64/libgio-2.0.so.0.7800.3
7f6a13e34000-7f6a13eab000 r--p 00154000 08:08 6985833 /usr/lib64/libgio-2.0.so.0.7800.3
7f6a13eab000-7f6a13eb3000 r--p 001ca000 08:08 6985833 /usr/lib64/libgio-2.0.so.0.7800.3
7f6a13eb3000-7f6a13eb4000 rw-p 001d2000 08:08 6985833 /usr/lib64/libgio-2.0.so.0.7800.3
7f6a13eb4000-7f6a13eb6000 rw-p 00000000 00:00 0
7f6a13eb6000-7f6a13ed4000 r--p 00000000 08:08 6985835 /usr/lib64/libglib-2.0.so.0.7800.3
7f6a13ed4000-7f6a13f75000 r-xp 0001e000 08:08 6985835 /usr/lib64/libglib-2.0.so.0.7800.3
7f6a13f75000-7f6a13ffd000 r--p 000bf000 08:08 6985835 /usr/lib64/libglib-2.0.so.0.7800.3
7f6a13ffd000-7f6a13ffe000 r--p 00147000 08:08 6985835 /usr/lib64/libglib-2.0.so.0.7800.3
7f6a13ffe000-7f6a13fff000 rw-p 00148000 08:08 6985835 /usr/lib64/libglib-2.0.so.0.7800.3
7f6a13fff000-7f6a14000000 rw-p 00000000 00:00 0
7f6a14000000-7f6a140ad000 r--p 00000000 08:08 6982261 /usr/lib64/libcrypto.so.3.1.4
7f6a140ad000-7f6a143c4000 r-xp 000ad000 08:08 6982261 /usr/lib64/libcrypto.so.3.1.4
7f6a143c4000-7f6a1447e000 r--p 003c4000 08:08 6982261 /usr/lib64/libcrypto.so.3.1.4
7f6a1447e000-7f6a144d5000 r--p 0047e000 08:08 6982261 /usr/lib64/libcrypto.so.3.1.4
7f6a144d5000-7f6a144d8000 rw-p 004d5000 08:08 6982261 /usr/lib64/libcrypto.so.3.1.4
7f6a144d8000-7f6a144db000 rw-p 00000000 00:00 0
7f6a144db000-7f6a144de000 r--p 00000000 08:08 6999099 /usr/lib64/girepository-1.0/GdkX11-3.0.typelib
7f6a144de000-7f6a144e2000 r--p 00000000 08:08 6984538 /usr/lib64/ruby/fiddle.so
7f6a144e2000-7f6a144ea000 r-xp 00004000 08:08 6984538 /usr/lib64/ruby/fiddle.so
7f6a144ea000-7f6a144ed000 r--p 0000c000 08:08 6984538 /usr/lib64/ruby/fiddle.so
7f6a144ed000-7f6a144ee000 r--p 0000e000 08:08 6984538 /usr/lib64/ruby/fiddle.so
7f6a144ee000-7f6a144ef000 rw-p 0000f000 08:08 6984538 /usr/lib64/ruby/fiddle.so
7f6a144ef000-7f6a144f9000 r--p 00000000 08:08 6980724 /usr/lib64/libmount.so.1.1.0
7f6a144f9000-7f6a14530000 r-xp 0000a000 08:08 6980724 /usr/lib64/libmount.so.1.1.0
7f6a14530000-7f6a1453d000 r--p 00041000 08:08 6980724 /usr/lib64/libmount.so.1.1.0
7f6a1453d000-7f6a1453f000 r--p 0004e000 08:08 6980724 /usr/lib64/libmount.so.1.1.0
7f6a1453f000-7f6a14540000 rw-p 00050000 08:08 6980724 /usr/lib64/libmount.so.1.1.0
7f6a14540000-7f6a14548000 r--p 00000000 08:08 6985981 /usr/lib64/libgirepository-1.0.so.1.0.0
7f6a14548000-7f6a1455b000 r-xp 00008000 08:08 6985981 /usr/lib64/libgirepository-1.0.so.1.0.0
7f6a1455b000-7f6a14563000 r--p 0001b000 08:08 6985981 /usr/lib64/libgirepository-1.0.so.1.0.0
7f6a14563000-7f6a14564000 r--p 00023000 08:08 6985981 /usr/lib64/libgirepository-1.0.so.1.0.0
7f6a14564000-7f6a14565000 rw-p 00000000 00:00 0
7f6a14565000-7f6a14568000 r--p 00000000 08:08 6980328 /usr/lib64/libpcre2-8.so.0.11.2
7f6a14568000-7f6a145d6000 r-xp 00003000 08:08 6980328 /usr/lib64/libpcre2-8.so.0.11.2
7f6a145d6000-7f6a145fe000 r--p 00071000 08:08 6980328 /usr/lib64/libpcre2-8.so.0.11.2
7f6a145fe000-7f6a145ff000 r--p 00098000 08:08 6980328 /usr/lib64/libpcre2-8.so.0.11.2
7f6a145ff000-7f6a14600000 rw-p 00099000 08:08 6980328 /usr/lib64/libpcre2-8.so.0.11.2
7f6a14600000-7f6a1469c000 r--p 00000000 08:08 6979933 /usr/lib64/libstdc++.so.6.0.32
7f6a1469c000-7f6a147c6000 r-xp 0009c000 08:08 6979933 /usr/lib64/libstdc++.so.6.0.32
7f6a147c6000-7f6a14842000 r--p 001c6000 08:08 6979933 /usr/lib64/libstdc++.so.6.0.32
7f6a14842000-7f6a1484f000 r--p 00242000 08:08 6979933 /usr/lib64/libstdc++.so.6.0.32
7f6a1484f000-7f6a14850000 rw-p 0024f000 08:08 6979933 /usr/lib64/libstdc++.so.6.0.32
7f6a14850000-7f6a14854000 rw-p 00000000 00:00 0
7f6a14854000-7f6a14855000 r--p 00000000 08:08 6979633 /usr/lib/locale/C.utf8/LC_IDENTIFICATION
7f6a14855000-7f6a14856000 r--p 00000000 08:08 6985978 /usr/lib64/girepository-1.0/xlib-2.0.typelib
7f6a14856000-7f6a14858000 r--p 00000000 08:08 6997309 /usr/lib64/girepository-1.0/PangoOT-1.0.typelib
7f6a14858000-7f6a14868000 r--p 00000000 08:08 6985968 /usr/lib64/girepository-1.0/GObject-2.0.typelib
7f6a14868000-7f6a14872000 r--p 00000000 08:08 6990608 /usr/lib64/gems/ruby/gobject-introspection-4.2.0/gobject_introspection.so
7f6a14872000-7f6a14886000 r-xp 0000a000 08:08 6990608 /usr/lib64/gems/ruby/gobject-introspection-4.2.0/gobject_introspection.so
7f6a14886000-7f6a1488d000 r--p 0001e000 08:08 6990608 /usr/lib64/gems/ruby/gobject-introspection-4.2.0/gobject_introspection.so
7f6a1488d000-7f6a1488f000 r--p 00025000 08:08 6990608 /usr/lib64/gems/ruby/gobject-introspection-4.2.0/gobject_introspection.so
7f6a1488f000-7f6a14890000 rw-p 00027000 08:08 6990608 /usr/lib64/gems/ruby/gobject-introspection-4.2.0/gobject_introspection.so
7f6a14890000-7f6a148a0000 rw-p 00000000 00:00 0
7f6a148a0000-7f6a148a2000 r--p 00000000 08:08 6997380 /usr/lib64/gems/ruby/pango-4.2.0/pango.so
7f6a148a2000-7f6a148a4000 r-xp 00002000 08:08 6997380 /usr/lib64/gems/ruby/pango-4.2.0/pango.so
7f6a148a4000-7f6a148a5000 r--p 00004000 08:08 6997380 /usr/lib64/gems/ruby/pango-4.2.0/pango.so
7f6a148a5000-7f6a148a6000 r--p 00004000 08:08 6997380 /usr/lib64/gems/ruby/pango-4.2.0/pango.so
7f6a148a6000-7f6a148a7000 rw-p 00000000 00:00 0
7f6a148a7000-7f6a148a8000 r--p 00000000 08:08 6985210 /usr/lib64/libXau.so.6.0.0
7f6a148a8000-7f6a148aa000 r-xp 00001000 08:08 6985210 /usr/lib64/libXau.so.6.0.0
7f6a148aa000-7f6a148ab000 r--p 00003000 08:08 6985210 /usr/lib64/libXau.so.6.0.0
7f6a148ab000-7f6a148ac000 r--p 00003000 08:08 6985210 /usr/lib64/libXau.so.6.0.0
7f6a148ac000-7f6a148ad000 rw-p 00000000 00:00 0
7f6a148ad000-7f6a148bb000 r--p 00000000 08:08 6985839 /usr/lib64/libgobject-2.0.so.0.7800.3
7f6a148bb000-7f6a148f1000 r-xp 0000e000 08:08 6985839 /usr/lib64/libgobject-2.0.so.0.7800.3
7f6a148f1000-7f6a14909000 r--p 00044000 08:08 6985839 /usr/lib64/libgobject-2.0.so.0.7800.3
7f6a14909000-7f6a1490c000 r--p 0005c000 08:08 6985839 /usr/lib64/libgobject-2.0.so.0.7800.3
7f6a1490c000-7f6a1490d000 rw-p 0005f000 08:08 6985839 /usr/lib64/libgobject-2.0.so.0.7800.3
7f6a1490d000-7f6a14926000 r--p 00000000 08:08 6990590 /usr/lib64/gems/ruby/glib2-4.2.0/glib2.so
7f6a14926000-7f6a14956000 r-xp 00019000 08:08 6990590 /usr/lib64/gems/ruby/glib2-4.2.0/glib2.so
7f6a14956000-7f6a14969000 r--p 00049000 08:08 6990590 /usr/lib64/gems/ruby/glib2-4.2.0/glib2.so
7f6a14969000-7f6a1496f000 r--p 0005b000 08:08 6990590 /usr/lib64/gems/ruby/glib2-4.2.0/glib2.so
7f6a1496f000-7f6a14970000 rw-p 00061000 08:08 6990590 /usr/lib64/gems/ruby/glib2-4.2.0/glib2.so
7f6a14970000-7f6a149a0000 rw-p 00000000 00:00 0
7f6a149a0000-7f6a149a2000 r--p 00000000 08:08 6993452 /usr/lib64/libXrender.so.1.3.0
7f6a149a2000-7f6a149a9000 r-xp 00002000 08:08 6993452 /usr/lib64/libXrender.so.1.3.0
7f6a149a9000-7f6a149aa000 r--p 00009000 08:08 6993452 /usr/lib64/libXrender.so.1.3.0
7f6a149aa000-7f6a149ab000 r--p 00009000 08:08 6993452 /usr/lib64/libXrender.so.1.3.0
7f6a149ab000-7f6a149ac000 rw-p 0000a000 08:08 6993452 /usr/lib64/libXrender.so.1.3.0
7f6a149ac000-7f6a149ae000 r--p 00000000 08:08 6981703 /usr/lib64/libffi.so.8.1.2
7f6a149ae000-7f6a149b8000 r-xp 00002000 08:08 6981703 /usr/lib64/libffi.so.8.1.2
7f6a149b8000-7f6a149ba000 r--p 0000c000 08:08 6981703 /usr/lib64/libffi.so.8.1.2
7f6a149ba000-7f6a149bb000 r--p 0000d000 08:08 6981703 /usr/lib64/libffi.so.8.1.2
7f6a149bb000-7f6a149bc000 rw-p 0000e000 08:08 6981703 /usr/lib64/libffi.so.8.1.2
7f6a149bc000-7f6a149bf000 r--p 00000000 08:08 6979663 /usr/lib64/libresolv.so.2
7f6a149bf000-7f6a149c7000 r-xp 00003000 08:08 6979663 /usr/lib64/libresolv.so.2
7f6a149c7000-7f6a149c9000 r--p 0000b000 08:08 6979663 /usr/lib64/libresolv.so.2
7f6a149c9000-7f6a149ca000 r--p 0000d000 08:08 6979663 /usr/lib64/libresolv.so.2
7f6a149ca000-7f6a149cb000 rw-p 0000e000 08:08 6979663 /usr/lib64/libresolv.so.2
7f6a149cb000-7f6a149cd000 rw-p 00000000 00:00 0
7f6a149cd000-7f6a149d6000 r--p 00000000 08:08 6985769 /usr/lib64/libhogweed.so.6.8
7f6a149d6000-7f6a149eb000 r-xp 00009000 08:08 6985769 /usr/lib64/libhogweed.so.6.8
7f6a149eb000-7f6a14a0d000 r--p 0001e000 08:08 6985769 /usr/lib64/libhogweed.so.6.8
7f6a14a0d000-7f6a14a0f000 r--p 0003f000 08:08 6985769 /usr/lib64/libhogweed.so.6.8
7f6a14a0f000-7f6a14a10000 rw-p 00000000 00:00 0
7f6a14a10000-7f6a14a1e000 r--p 00000000 08:08 6985771 /usr/lib64/libnettle.so.8.8
7f6a14a1e000-7f6a14a4e000 r-xp 0000e000 08:08 6985771 /usr/lib64/libnettle.so.8.8
7f6a14a4e000-7f6a14a65000 r--p 0003e000 08:08 6985771 /usr/lib64/libnettle.so.8.8
7f6a14a65000-7f6a14a67000 r--p 00055000 08:08 6985771 /usr/lib64/libnettle.so.8.8
7f6a14a67000-7f6a14a68000 rw-p 00057000 08:08 6985771 /usr/lib64/libnettle.so.8.8
7f6a14a68000-7f6a14a6b000 r--p 00000000 08:08 6980263 /usr/lib64/libtasn1.so.6.6.3
7f6a14a6b000-7f6a14a79000 r-xp 00003000 08:08 6980263 /usr/lib64/libtasn1.so.6.6.3
7f6a14a79000-7f6a14a7c000 r--p 00011000 08:08 6980263 /usr/lib64/libtasn1.so.6.6.3
7f6a14a7c000-7f6a14a7d000 r--p 00014000 08:08 6980263 /usr/lib64/libtasn1.so.6.6.3
7f6a14a7d000-7f6a14a7e000 rw-p 00000000 00:00 0
7f6a14a7e000-7f6a14a90000 r--p 00000000 08:08 6980273 /usr/lib64/libunistring.so.5.0.0
7f6a14a90000-7f6a14ac9000 r-xp 00012000 08:08 6980273 /usr/lib64/libunistring.so.5.0.0
7f6a14ac9000-7f6a14c29000 r--p 0004b000 08:08 6980273 /usr/lib64/libunistring.so.5.0.0
7f6a14c29000-7f6a14c2d000 r--p 001ab000 08:08 6980273 /usr/lib64/libunistring.so.5.0.0
7f6a14c2d000-7f6a14c2e000 rw-p 001af000 08:08 6980273 /usr/lib64/libunistring.so.5.0.0
7f6a14c2e000-7f6a14c30000 r--p 00000000 08:08 6980284 /usr/lib64/libidn2.so.0.3.8
7f6a14c30000-7f6a14c34000 r-xp 00002000 08:08 6980284 /usr/lib64/libidn2.so.0.3.8
7f6a14c34000-7f6a14c4e000 r--p 00006000 08:08 6980284 /usr/lib64/libidn2.so.0.3.8
7f6a14c4e000-7f6a14c4f000 r--p 0001f000 08:08 6980284 /usr/lib64/libidn2.so.0.3.8
7f6a14c4f000-7f6a14c50000 rw-p 00000000 00:00 0
7f6a14c50000-7f6a14c85000 r--p 00000000 08:08 6981716 /usr/lib64/libp11-kit.so.0.3.1
7f6a14c85000-7f6a14d4d000 r-xp 00035000 08:08 6981716 /usr/lib64/libp11-kit.so.0.3.1
7f6a14d4d000-7f6a14dc7000 r--p 000fd000 08:08 6981716 /usr/lib64/libp11-kit.so.0.3.1
7f6a14dc7000-7f6a14dd3000 r--p 00176000 08:08 6981716 /usr/lib64/libp11-kit.so.0.3.1
7f6a14dd3000-7f6a14de0000 rw-p 00182000 08:08 6981716 /usr/lib64/libp11-kit.so.0.3.1
7f6a14de0000-7f6a14de1000 rw-p 00000000 00:00 0
7f6a14de1000-7f6a14de6000 r--p 00000000 08:08 6981457 /usr/lib64/libsasl2.so.3.0.0
7f6a14de6000-7f6a14df9000 r-xp 00005000 08:08 6981457 /usr/lib64/libsasl2.so.3.0.0
7f6a14df9000-7f6a14dfe000 r--p 00018000 08:08 6981457 /usr/lib64/libsasl2.so.3.0.0
7f6a14dfe000-7f6a14dff000 r--p 0001d000 08:08 6981457 /usr/lib64/libsasl2.so.3.0.0
7f6a14dff000-7f6a14e00000 rw-p 0001e000 08:08 6981457 /usr/lib64/libsasl2.so.3.0.0
7f6a14e00000-7f6a14e38000 r--p 00000000 08:08 6985784 /usr/lib64/libgnutls.so.30.37.0
7f6a14e38000-7f6a14f7c000 r-xp 00038000 08:08 6985784 /usr/lib64/libgnutls.so.30.37.0
7f6a14f7c000-7f6a15012000 r--p 0017c000 08:08 6985784 /usr/lib64/libgnutls.so.30.37.0
7f6a15012000-7f6a15024000 r--p 00211000 08:08 6985784 /usr/lib64/libgnutls.so.30.37.0
7f6a15024000-7f6a15026000 rw-p 00223000 08:08 6985784 /usr/lib64/libgnutls.so.30.37.0
7f6a15026000-7f6a1502a000 rw-p 00000000 00:00 0
7f6a1502a000-7f6a1502d000 r--s 00000000 08:08 6997282 /usr/lib/fontconfig/cache/18f520a508f13854f77176faf7889ae9-le64.cache-8
7f6a1502d000-7f6a1502e000 r--p 00000000 08:08 6997307 /usr/lib64/girepository-1.0/PangoFT2-1.0.typelib
7f6a1502e000-7f6a15031000 r--p 00000000 08:08 6993703 /usr/lib64/libhiredis.so.1.0.0
7f6a15031000-7f6a1503d000 r-xp 00003000 08:08 6993703 /usr/lib64/libhiredis.so.1.0.0
7f6a1503d000-7f6a15040000 r--p 0000f000 08:08 6993703 /usr/lib64/libhiredis.so.1.0.0
7f6a15040000-7f6a15041000 r--p 00012000 08:08 6993703 /usr/lib64/libhiredis.so.1.0.0
7f6a15041000-7f6a15042000 rw-p 00013000 08:08 6993703 /usr/lib64/libhiredis.so.1.0.0
7f6a15042000-7f6a15047000 r--p 00000000 08:08 6991038 /usr/lib64/libmemcached.so.11.0.0
7f6a15047000-7f6a15062000 r-xp 00005000 08:08 6991038 /usr/lib64/libmemcached.so.11.0.0
7f6a15062000-7f6a1506f000 r--p 00020000 08:08 6991038 /usr/lib64/libmemcached.so.11.0.0
7f6a1506f000-7f6a15070000 r--p 0002d000 08:08 6991038 /usr/lib64/libmemcached.so.11.0.0
7f6a15070000-7f6a15071000 rw-p 0002e000 08:08 6991038 /usr/lib64/libmemcached.so.11.0.0
7f6a15071000-7f6a150cf000 r--p 00000000 08:08 6993710 /usr/lib64/libyaz.so.5.0.0
7f6a150cf000-7f6a1514f000 r-xp 0005e000 08:08 6993710 /usr/lib64/libyaz.so.5.0.0
7f6a1514f000-7f6a15175000 r--p 000de000 08:08 6993710 /usr/lib64/libyaz.so.5.0.0
7f6a15175000-7f6a15178000 r--p 00103000 08:08 6993710 /usr/lib64/libyaz.so.5.0.0
7f6a15178000-7f6a1521f000 rw-p 00106000 08:08 6993710 /usr/lib64/libyaz.so.5.0.0
7f6a1521f000-7f6a15250000 rw-p 00000000 00:00 0
7f6a15250000-7f6a15251000 r--p 00000000 08:08 6985972 /usr/lib64/girepository-1.0/fontconfig-2.0.typelib
7f6a15251000-7f6a15252000 r--p 00000000 08:08 6985272 /usr/lib64/libxcb-shm.so.0.0.0
7f6a15252000-7f6a15253000 r-xp 00001000 08:08 6985272 /usr/lib64/libxcb-shm.so.0.0.0
7f6a15253000-7f6a15254000 r--p 00002000 08:08 6985272 /usr/lib64/libxcb-shm.so.0.0.0
7f6a15254000-7f6a15255000 r--p 00002000 08:08 6985272 /usr/lib64/libxcb-shm.so.0.0.0
7f6a15255000-7f6a15256000 rw-p 00003000 08:08 6985272 /usr/lib64/libxcb-shm.so.0.0.0
7f6a15256000-7f6a15257000 r--p 00000000 08:08 6979379 /usr/lib64/gconv/CP932.so
7f6a15257000-7f6a15259000 r-xp 00001000 08:08 6979379 /usr/lib64/gconv/CP932.so
7f6a15259000-7f6a1526e000 r--p 00003000 08:08 6979379 /usr/lib64/gconv/CP932.so
7f6a1526e000-7f6a1526f000 r--p 00017000 08:08 6979379 /usr/lib64/gconv/CP932.so
7f6a1526f000-7f6a15280000 rw-p 00000000 00:00 0
7f6a15280000-7f6a15282000 r--p 00000000 08:08 6997369 /usr/lib64/gems/ruby/cairo-gobject-4.2.0/cairo_gobject.so
7f6a15282000-7f6a15284000 r-xp 00002000 08:08 6997369 /usr/lib64/gems/ruby/cairo-gobject-4.2.0/cairo_gobject.so
7f6a15284000-7f6a15285000 r--p 00004000 08:08 6997369 /usr/lib64/gems/ruby/cairo-gobject-4.2.0/cairo_gobject.so
7f6a15285000-7f6a15286000 r--p 00004000 08:08 6997369 /usr/lib64/gems/ruby/cairo-gobject-4.2.0/cairo_gobject.so
7f6a15286000-7f6a15287000 rw-p 00000000 00:00 0
7f6a15287000-7f6a1528b000 r--p 00000000 08:08 6979912 /usr/lib64/liblzma.so.5.4.5
7f6a1528b000-7f6a152ad000 r-xp 00004000 08:08 6979912 /usr/lib64/liblzma.so.5.4.5
7f6a152ad000-7f6a152b8000 r--p 00026000 08:08 6979912 /usr/lib64/liblzma.so.5.4.5
7f6a152b8000-7f6a152b9000 r--p 00031000 08:08 6979912 /usr/lib64/liblzma.so.5.4.5
7f6a152b9000-7f6a152ba000 rw-p 00000000 00:00 0
7f6a152ba000-7f6a152ee000 r--p 00000000 08:08 6981551 /usr/lib64/libxml2.so.2.12.3
7f6a152ee000-7f6a153da000 r-xp 00034000 08:08 6981551 /usr/lib64/libxml2.so.2.12.3
7f6a153da000-7f6a15419000 r--p 00120000 08:08 6981551 /usr/lib64/libxml2.so.2.12.3
7f6a15419000-7f6a15424000 r--p 0015e000 08:08 6981551 /usr/lib64/libxml2.so.2.12.3
7f6a15424000-7f6a15425000 rw-p 00169000 08:08 6981551 /usr/lib64/libxml2.so.2.12.3
7f6a15425000-7f6a15426000 rw-p 00000000 00:00 0
7f6a15426000-7f6a15430000 r--p 00000000 08:08 6986168 /usr/lib64/libxslt.so.1.1.39
7f6a15430000-7f6a1545a000 r-xp 0000a000 08:08 6986168 /usr/lib64/libxslt.so.1.1.39
7f6a1545a000-7f6a15467000 r--p 00034000 08:08 6986168 /usr/lib64/libxslt.so.1.1.39
7f6a15467000-7f6a15469000 r--p 00040000 08:08 6986168 /usr/lib64/libxslt.so.1.1.39
7f6a15469000-7f6a1546a000 rw-p 00042000 08:08 6986168 /usr/lib64/libxslt.so.1.1.39
7f6a1546a000-7f6a1546e000 r--p 00000000 08:08 6986165 /usr/lib64/libexslt.so.0.8.21
7f6a1546e000-7f6a1547c000 r-xp 00004000 08:08 6986165 /usr/lib64/libexslt.so.0.8.21
7f6a1547c000-7f6a1547f000 r--p 00012000 08:08 6986165 /usr/lib64/libexslt.so.0.8.21
7f6a1547f000-7f6a15480000 r--p 00015000 08:08 6986165 /usr/lib64/libexslt.so.0.8.21
7f6a15480000-7f6a15481000 rw-p 00016000 08:08 6986165 /usr/lib64/libexslt.so.0.8.21
7f6a15481000-7f6a1548f000 r--p 00000000 08:08 7000159 /usr/lib64/gems/ruby/nokogiri-1.15.5/nokogiri/nokogiri.so
7f6a1548f000-7f6a154be000 r-xp 0000e000 08:08 7000159 /usr/lib64/gems/ruby/nokogiri-1.15.5/nokogiri/nokogiri.so
7f6a154be000-7f6a154fb000 r--p 0003d000 08:08 7000159 /usr/lib64/gems/ruby/nokogiri-1.15.5/nokogiri/nokogiri.so
7f6a154fb000-7f6a154ff000 r--p 00079000 08:08 7000159 /usr/lib64/gems/ruby/nokogiri-1.15.5/nokogiri/nokogiri.so
7f6a154ff000-7f6a15500000 rw-p 0007d000 08:08 7000159 /usr/lib64/gems/ruby/nokogiri-1.15.5/nokogiri/nokogiri.so
7f6a15500000-7f6a15510000 rw-p 00000000 00:00 0
7f6a15510000-7f6a15511000 r--p 00000000 08:08 6997308 /usr/lib64/girepository-1.0/PangoFc-1.0.typelib
7f6a15511000-7f6a15513000 r--p 00000000 08:08 6989378 /usr/lib64/gems/ruby/json-2.7.1/json/ext/generator.so
7f6a15513000-7f6a15519000 r-xp 00002000 08:08 6989378 /usr/lib64/gems/ruby/json-2.7.1/json/ext/generator.so
7f6a15519000-7f6a1551b000 r--p 00008000 08:08 6989378 /usr/lib64/gems/ruby/json-2.7.1/json/ext/generator.so
7f6a1551b000-7f6a1551c000 r--p 00009000 08:08 6989378 /usr/lib64/gems/ruby/json-2.7.1/json/ext/generator.so
7f6a1551c000-7f6a1551d000 rw-p 00000000 00:00 0
7f6a1551d000-7f6a15521000 r--p 00000000 08:08 6984554 /usr/lib64/ruby/zlib.so
7f6a15521000-7f6a1552b000 r-xp 00004000 08:08 6984554 /usr/lib64/ruby/zlib.so
7f6a1552b000-7f6a1552e000 r--p 0000e000 08:08 6984554 /usr/lib64/ruby/zlib.so
7f6a1552e000-7f6a1552f000 r--p 00010000 08:08 6984554 /usr/lib64/ruby/zlib.so
7f6a1552f000-7f6a155b0000 rw-p 00000000 00:00 0
7f6a155b0000-7f6a155b5000 r--p 00000000 08:08 6986346 /usr/lib64/girepository-1.0/GdkPixbuf-2.0.typelib
7f6a155b5000-7f6a155b7000 r--p 00000000 08:08 6989379 /usr/lib64/gems/ruby/json-2.7.1/json/ext/parser.so
7f6a155b7000-7f6a155bb000 r-xp 00002000 08:08 6989379 /usr/lib64/gems/ruby/json-2.7.1/json/ext/parser.so
7f6a155bb000-7f6a155bc000 r--p 00006000 08:08 6989379 /usr/lib64/gems/ruby/json-2.7.1/json/ext/parser.so
7f6a155bc000-7f6a155bd000 r--p 00006000 08:08 6989379 /usr/lib64/gems/ruby/json-2.7.1/json/ext/parser.so
7f6a155bd000-7f6a155be000 rw-p 00000000 00:00 0
7f6a155be000-7f6a155c5000 r--p 00000000 08:08 6984550 /usr/lib64/ruby/socket.so
7f6a155c5000-7f6a155e7000 r-xp 00007000 08:08 6984550 /usr/lib64/ruby/socket.so
7f6a155e7000-7f6a155ee000 r--p 00029000 08:08 6984550 /usr/lib64/ruby/socket.so
7f6a155ee000-7f6a155ef000 r--p 00030000 08:08 6984550 /usr/lib64/ruby/socket.so
7f6a155ef000-7f6a155f0000 rw-p 00031000 08:08 6984550 /usr/lib64/ruby/socket.so
7f6a155f0000-7f6a15600000 rw-p 00000000 00:00 0
7f6a15600000-7f6a15602000 r--p 00000000 08:08 6997306 /usr/lib64/girepository-1.0/PangoCairo-1.0.typelib
7f6a15602000-7f6a15606000 r--p 00000000 08:08 6984466 /usr/lib64/ruby/date_core.so
7f6a15606000-7f6a15635000 r-xp 00004000 08:08 6984466 /usr/lib64/ruby/date_core.so
7f6a15635000-7f6a1563d000 r--p 00033000 08:08 6984466 /usr/lib64/ruby/date_core.so
7f6a1563d000-7f6a1563e000 r--p 0003a000 08:08 6984466 /usr/lib64/ruby/date_core.so
7f6a1563e000-7f6a1563f000 rw-p 0003b000 08:08 6984466 /usr/lib64/ruby/date_core.so
7f6a1563f000-7f6a15700000 rw-p 00000000 00:00 0
7f6a15700000-7f6a15702000 r--p 00000000 08:08 6985837 /usr/lib64/libgmodule-2.0.so.0.7800.3
7f6a15702000-7f6a15704000 r-xp 00002000 08:08 6985837 /usr/lib64/libgmodule-2.0.so.0.7800.3
7f6a15704000-7f6a15705000 r--p 00004000 08:08 6985837 /usr/lib64/libgmodule-2.0.so.0.7800.3
7f6a15705000-7f6a15706000 r--p 00004000 08:08 6985837 /usr/lib64/libgmodule-2.0.so.0.7800.3
7f6a15706000-7f6a15707000 rw-p 00005000 08:08 6985837 /usr/lib64/libgmodule-2.0.so.0.7800.3
7f6a15707000-7f6a15709000 r--p 00000000 08:08 6991036 /usr/lib64/libhashkit.so.2.0.0
7f6a15709000-7f6a1570c000 r-xp 00002000 08:08 6991036 /usr/lib64/libhashkit.so.2.0.0
7f6a1570c000-7f6a1570d000 r--p 00005000 08:08 6991036 /usr/lib64/libhashkit.so.2.0.0
7f6a1570d000-7f6a1570e000 r--p 00006000 08:08 6991036 /usr/lib64/libhashkit.so.2.0.0
7f6a1570e000-7f6a1570f000 rw-p 00007000 08:08 6991036 /usr/lib64/libhashkit.so.2.0.0
7f6a1570f000-7f6a15711000 r--p 00000000 08:08 6989049 /usr/lib64/libyaml-0.so.2.0.9
7f6a15711000-7f6a1572a000 r-xp 00002000 08:08 6989049 /usr/lib64/libyaml-0.so.2.0.9
7f6a1572a000-7f6a1572e000 r--p 0001b000 08:08 6989049 /usr/lib64/libyaml-0.so.2.0.9
7f6a1572e000-7f6a1572f000 r--p 0001e000 08:08 6989049 /usr/lib64/libyaml-0.so.2.0.9
7f6a1572f000-7f6a15780000 rw-p 00000000 00:00 0
7f6a15780000-7f6a15782000 r--p 00000000 08:08 6991042 /usr/lib64/libmemcachedutil.so.2.0.0
7f6a15782000-7f6a15784000 r-xp 00002000 08:08 6991042 /usr/lib64/libmemcachedutil.so.2.0.0
7f6a15784000-7f6a15785000 r--p 00004000 08:08 6991042 /usr/lib64/libmemcachedutil.so.2.0.0
7f6a15785000-7f6a15786000 r--p 00004000 08:08 6991042 /usr/lib64/libmemcachedutil.so.2.0.0
7f6a15786000-7f6a15787000 rw-p 00005000 08:08 6991042 /usr/lib64/libmemcachedutil.so.2.0.0
7f6a15787000-7f6a15789000 r--p 00000000 08:08 6984536 /usr/lib64/ruby/etc.so
7f6a15789000-7f6a1578c000 r-xp 00002000 08:08 6984536 /usr/lib64/ruby/etc.so
7f6a1578c000-7f6a1578e000 r--p 00005000 08:08 6984536 /usr/lib64/ruby/etc.so
7f6a1578e000-7f6a1578f000 r--p 00006000 08:08 6984536 /usr/lib64/ruby/etc.so
7f6a1578f000-7f6a158a0000 rw-p 00000000 00:00 0
7f6a158a0000-7f6a158a1000 r--p 00000000 08:08 6985973 /usr/lib64/girepository-1.0/freetype2-2.0.typelib
7f6a158a1000-7f6a158a2000 r--p 00000000 08:08 6990641 /usr/lib64/gems/ruby/gio2-4.2.0/gio2.so
7f6a158a2000-7f6a158a3000 r-xp 00001000 08:08 6990641 /usr/lib64/gems/ruby/gio2-4.2.0/gio2.so
7f6a158a3000-7f6a158a4000 r--p 00002000 08:08 6990641 /usr/lib64/gems/ruby/gio2-4.2.0/gio2.so
7f6a158a4000-7f6a158a5000 r--p 00002000 08:08 6990641 /usr/lib64/gems/ruby/gio2-4.2.0/gio2.so
7f6a158a5000-7f6a158a6000 rw-p 00000000 00:00 0
7f6a158a6000-7f6a158a9000 r--p 00000000 08:08 6989691 /usr/lib64/gems/ruby/psych-5.1.2/psych.so
7f6a158a9000-7f6a158ad000 r-xp 00003000 08:08 6989691 /usr/lib64/gems/ruby/psych-5.1.2/psych.so
7f6a158ad000-7f6a158ae000 r--p 00007000 08:08 6989691 /usr/lib64/gems/ruby/psych-5.1.2/psych.so
7f6a158ae000-7f6a158af000 r--p 00008000 08:08 6989691 /usr/lib64/gems/ruby/psych-5.1.2/psych.so
7f6a158af000-7f6a15940000 rw-p 00000000 00:00 0
7f6a15940000-7f6a15944000 r--p 00000000 08:08 6985971 /usr/lib64/girepository-1.0/cairo-1.0.typelib
7f6a15944000-7f6a15947000 r--p 00000000 08:08 6984551 /usr/lib64/ruby/stringio.so
7f6a15947000-7f6a1594c000 r-xp 00003000 08:08 6984551 /usr/lib64/ruby/stringio.so
7f6a1594c000-7f6a1594e000 r--p 00008000 08:08 6984551 /usr/lib64/ruby/stringio.so
7f6a1594e000-7f6a1594f000 r--p 00009000 08:08 6984551 /usr/lib64/ruby/stringio.so
7f6a1594f000-7f6a15a10000 rw-p 00000000 00:00 0
7f6a15a10000-7f6a15a11000 r--p 00000000 08:08 6985967 /usr/lib64/girepository-1.0/GModule-2.0.typelib
7f6a15a11000-7f6a15a12000 rw-p 00000000 00:00 0
7f6a15a12000-7f6a15a13000 r--p 00000000 08:08 6984535 /usr/lib64/ruby/erb/escape.so
7f6a15a13000-7f6a15a14000 r-xp 00001000 08:08 6984535 /usr/lib64/ruby/erb/escape.so
7f6a15a14000-7f6a15a15000 r--p 00002000 08:08 6984535 /usr/lib64/ruby/erb/escape.so
7f6a15a15000-7f6a15a16000 r--p 00002000 08:08 6984535 /usr/lib64/ruby/erb/escape.so
7f6a15a16000-7f6a15a17000 rw-p 00000000 00:00 0
7f6a15a17000-7f6a15a19000 r--p 00000000 08:08 6984552 /usr/lib64/ruby/strscan.so
7f6a15a19000-7f6a15a1c000 r-xp 00002000 08:08 6984552 /usr/lib64/ruby/strscan.so
7f6a15a1c000-7f6a15a1d000 r--p 00005000 08:08 6984552 /usr/lib64/ruby/strscan.so
7f6a15a1d000-7f6a15a1e000 r--p 00006000 08:08 6984552 /usr/lib64/ruby/strscan.so
7f6a15a1e000-7f6a15a1f000 rw-p 00000000 00:00 0
7f6a15a1f000-7f6a15a20000 ---p 00000000 00:00 0
7f6a15a20000-7f6a15ac1000 rw-p 00000000 00:00 0
7f6a15ac1000-7f6a15ac2000 ---p 00000000 00:00 0
7f6a15ac2000-7f6a15b63000 rw-p 00000000 00:00 0
7f6a15b63000-7f6a15b64000 ---p 00000000 00:00 0
7f6a15b64000-7f6a15c05000 rw-p 00000000 00:00 0
7f6a15c05000-7f6a15c06000 ---p 00000000 00:00 0
7f6a15c06000-7f6a15ca7000 rw-p 00000000 00:00 0
7f6a15ca7000-7f6a15ca8000 ---p 00000000 00:00 0
7f6a15ca8000-7f6a15d49000 rw-p 00000000 00:00 0
7f6a15d49000-7f6a15d4a000 ---p 00000000 00:00 0
7f6a15d4a000-7f6a15deb000 rw-p 00000000 00:00 0
7f6a15deb000-7f6a15dec000 ---p 00000000 00:00 0
7f6a15dec000-7f6a15e8d000 rw-p 00000000 00:00 0
7f6a15e8d000-7f6a15e8e000 ---p 00000000 00:00 0
7f6a15e8e000-7f6a15f2f000 rw-p 00000000 00:00 0
7f6a15f2f000-7f6a15f30000 ---p 00000000 00:00 0
7f6a15f30000-7f6a15fd1000 rw-p 00000000 00:00 0
7f6a15fd1000-7f6a15fd2000 ---p 00000000 00:00 0
7f6a15fd2000-7f6a16073000 rw-p 00000000 00:00 0
7f6a16073000-7f6a16074000 ---p 00000000 00:00 0
7f6a16074000-7f6a16115000 rw-p 00000000 00:00 0
7f6a16115000-7f6a16116000 ---p 00000000 00:00 0
7f6a16116000-7f6a161b7000 rw-p 00000000 00:00 0
7f6a161b7000-7f6a161b8000 ---p 00000000 00:00 0
7f6a161b8000-7f6a16259000 rw-p 00000000 00:00 0
7f6a16259000-7f6a1625a000 ---p 00000000 00:00 0
7f6a1625a000-7f6a162fb000 rw-p 00000000 00:00 0
7f6a162fb000-7f6a162fc000 ---p 00000000 00:00 0
7f6a162fc000-7f6a1639d000 rw-p 00000000 00:00 0
7f6a1639d000-7f6a1639e000 ---p 00000000 00:00 0
7f6a1639e000-7f6a1643f000 rw-p 00000000 00:00 0
7f6a1643f000-7f6a16440000 ---p 00000000 00:00 0
7f6a16440000-7f6a164e1000 rw-p 00000000 00:00 0
7f6a164e1000-7f6a164e2000 ---p 00000000 00:00 0
7f6a164e2000-7f6a16583000 rw-p 00000000 00:00 0
7f6a16583000-7f6a16584000 ---p 00000000 00:00 0
7f6a16584000-7f6a16625000 rw-p 00000000 00:00 0
7f6a16625000-7f6a16626000 ---p 00000000 00:00 0
7f6a16626000-7f6a166c7000 rw-p 00000000 00:00 0
7f6a166c7000-7f6a166c8000 ---p 00000000 00:00 0
7f6a166c8000-7f6a16769000 rw-p 00000000 00:00 0
7f6a16769000-7f6a1676a000 ---p 00000000 00:00 0
7f6a1676a000-7f6a1680b000 rw-p 00000000 00:00 0
7f6a1680b000-7f6a1680c000 ---p 00000000 00:00 0
7f6a1680c000-7f6a168ad000 rw-p 00000000 00:00 0
7f6a168ad000-7f6a168ae000 ---p 00000000 00:00 0
7f6a168ae000-7f6a1694f000 rw-p 00000000 00:00 0
7f6a1694f000-7f6a16950000 ---p 00000000 00:00 0
7f6a16950000-7f6a169f1000 rw-p 00000000 00:00 0
7f6a169f1000-7f6a169f2000 ---p 00000000 00:00 0
7f6a169f2000-7f6a16a93000 rw-p 00000000 00:00 0
7f6a16a93000-7f6a16a94000 ---p 00000000 00:00 0
7f6a16a94000-7f6a16b35000 rw-p 00000000 00:00 0
7f6a16b35000-7f6a16b36000 ---p 00000000 00:00 0
7f6a16b36000-7f6a16bd7000 rw-p 00000000 00:00 0
7f6a16bd7000-7f6a16bd8000 ---p 00000000 00:00 0
7f6a16bd8000-7f6a16c79000 rw-p 00000000 00:00 0
7f6a16c79000-7f6a16c7a000 ---p 00000000 00:00 0
7f6a16c7a000-7f6a16d1b000 rw-p 00000000 00:00 0
7f6a16d1b000-7f6a16d1c000 ---p 00000000 00:00 0
7f6a16d1c000-7f6a16dbd000 rw-p 00000000 00:00 0
7f6a16dbd000-7f6a16dbe000 ---p 00000000 00:00 0
7f6a16dbe000-7f6a16e5f000 rw-p 00000000 00:00 0
7f6a16e5f000-7f6a16e60000 ---p 00000000 00:00 0
7f6a16e60000-7f6a176b0000 rw-p 00000000 00:00 0
7f6a176b0000-7f6a176b1000 r-xp 0000a000 08:08 6981703 /usr/lib64/libffi.so.8.1.2
7f6a176b1000-7f6a176b2000 rw-p 00000000 00:00 0
7f6a176b2000-7f6a176b3000 r--p 00000000 08:08 6979636 /usr/lib/locale/C.utf8/LC_MESSAGES/SYS_LC_MESSAGES
7f6a176b3000-7f6a176b5000 r--p 00000000 08:08 6984463 /usr/lib64/ruby/cgi/escape.so
7f6a176b5000-7f6a176b7000 r-xp 00002000 08:08 6984463 /usr/lib64/ruby/cgi/escape.so
7f6a176b7000-7f6a176b8000 r--p 00004000 08:08 6984463 /usr/lib64/ruby/cgi/escape.so
7f6a176b8000-7f6a176b9000 r--p 00004000 08:08 6984463 /usr/lib64/ruby/cgi/escape.so
7f6a176b9000-7f6a176ba000 rw-p 00000000 00:00 0
7f6a176ba000-7f6a176bb000 r--p 00000000 08:08 6984541 /usr/lib64/ruby/monitor.so
7f6a176bb000-7f6a176bc000 r-xp 00001000 08:08 6984541 /usr/lib64/ruby/monitor.so
7f6a176bc000-7f6a176bd000 r--p 00002000 08:08 6984541 /usr/lib64/ruby/monitor.so
7f6a176bd000-7f6a176be000 r--p 00002000 08:08 6984541 /usr/lib64/ruby/monitor.so
7f6a176be000-7f6a30abf000 rw-p 00000000 00:00 0
7f6a30abf000-7f6a30ac1000 r--p 00000000 08:08 6999731 /usr/lib64/gems/ruby/zoom-0.5.0/zoom.so
7f6a30ac1000-7f6a30ac5000 r-xp 00002000 08:08 6999731 /usr/lib64/gems/ruby/zoom-0.5.0/zoom.so
7f6a30ac5000-7f6a30ac6000 r--p 00006000 08:08 6999731 /usr/lib64/gems/ruby/zoom-0.5.0/zoom.so
7f6a30ac6000-7f6a30ac7000 r--p 00007000 08:08 6999731 /usr/lib64/gems/ruby/zoom-0.5.0/zoom.so
7f6a30ac7000-7f6a30ac8000 rw-p 00000000 00:00 0
7f6a30ac8000-7f6a30aca000 r--p 00000000 08:08 7003637 /usr/lib64/gems/ruby/racc-1.7.3/racc/cparse.so
7f6a30aca000-7f6a30acd000 r-xp 00002000 08:08 7003637 /usr/lib64/gems/ruby/racc-1.7.3/racc/cparse.so
7f6a30acd000-7f6a30ace000 r--p 00005000 08:08 7003637 /usr/lib64/gems/ruby/racc-1.7.3/racc/cparse.so
7f6a30ace000-7f6a30acf000 r--p 00005000 08:08 7003637 /usr/lib64/gems/ruby/racc-1.7.3/racc/cparse.so
7f6a30acf000-7f6a30b00000 rw-p 00000000 00:00 0
7f6a30b00000-7f6a30b01000 r--p 00000000 08:08 6984540 /usr/lib64/ruby/io/wait.so
7f6a30b01000-7f6a30b02000 r-xp 00001000 08:08 6984540 /usr/lib64/ruby/io/wait.so
7f6a30b02000-7f6a30b03000 r--p 00002000 08:08 6984540 /usr/lib64/ruby/io/wait.so
7f6a30b03000-7f6a30b04000 r--p 00002000 08:08 6984540 /usr/lib64/ruby/io/wait.so
7f6a30b04000-7f6a30b05000 rw-p 00000000 00:00 0
7f6a30b05000-7f6a30b07000 r--p 00000000 08:08 6984545 /usr/lib64/ruby/pathname.so
7f6a30b07000-7f6a30b0c000 r-xp 00002000 08:08 6984545 /usr/lib64/ruby/pathname.so
7f6a30b0c000-7f6a30b0e000 r--p 00007000 08:08 6984545 /usr/lib64/ruby/pathname.so
7f6a30b0e000-7f6a30b0f000 r--p 00008000 08:08 6984545 /usr/lib64/ruby/pathname.so
7f6a30b0f000-7f6a30b30000 rw-p 00000000 00:00 0
7f6a30b30000-7f6a30b31000 r--p 00000000 08:08 6984521 /usr/lib64/ruby/enc/trans/transdb.so
7f6a30b31000-7f6a30b32000 r-xp 00001000 08:08 6984521 /usr/lib64/ruby/enc/trans/transdb.so
7f6a30b32000-7f6a30b33000 r--p 00002000 08:08 6984521 /usr/lib64/ruby/enc/trans/transdb.so
7f6a30b33000-7f6a30b34000 r--p 00002000 08:08 6984521 /usr/lib64/ruby/enc/trans/transdb.so
7f6a30b34000-7f6a30c36000 rw-p 00000000 00:00 0
7f6a30c36000-7f6a30c3d000 r--s 00000000 08:08 6979736 /usr/lib64/gconv/gconv-modules.cache
7f6a30c3d000-7f6a30c96000 r--p 00000000 08:08 6979632 /usr/lib/locale/C.utf8/LC_CTYPE
7f6a30c96000-7f6a30cbc000 r--p 00000000 08:08 6979654 /usr/lib64/libc.so.6
7f6a30cbc000-7f6a30e1d000 r-xp 00026000 08:08 6979654 /usr/lib64/libc.so.6
7f6a30e1d000-7f6a30e6b000 r--p 00187000 08:08 6979654 /usr/lib64/libc.so.6
7f6a30e6b000-7f6a30e6f000 r--p 001d4000 08:08 6979654 /usr/lib64/libc.so.6
7f6a30e6f000-7f6a30e71000 rw-p 001d8000 08:08 6979654 /usr/lib64/libc.so.6
7f6a30e71000-7f6a30e79000 rw-p 00000000 00:00 0
7f6a30e79000-7f6a30e89000 r--p 00000000 08:08 6979657 /usr/lib64/libm.so.6
7f6a30e89000-7f6a30eff000 r-xp 00010000 08:08 6979657 /usr/lib64/libm.so.6
7f6a30eff000-7f6a30f59000 r--p 00086000 08:08 6979657 /usr/lib64/libm.so.6
7f6a30f59000-7f6a30f5a000 r--p 000df000 08:08 6979657 /usr/lib64/libm.so.6
7f6a30f5a000-7f6a30f5b000 rw-p 000e0000 08:08 6979657 /usr/lib64/libm.so.6
7f6a30f5b000-7f6a30f6c000 r--p 00000000 08:08 6980033 /usr/lib64/libgmp.so.10.4.1
7f6a30f6c000-7f6a30fe8000 r-xp 00011000 08:08 6980033 /usr/lib64/libgmp.so.10.4.1
7f6a30fe8000-7f6a30ffd000 r--p 0008d000 08:08 6980033 /usr/lib64/libgmp.so.10.4.1
7f6a30ffd000-7f6a30fff000 r--p 000a1000 08:08 6980033 /usr/lib64/libgmp.so.10.4.1
7f6a30fff000-7f6a31000000 rw-p 000a3000 08:08 6980033 /usr/lib64/libgmp.so.10.4.1
7f6a31000000-7f6a3104b000 r--p 00000000 08:08 6984462 /usr/lib64/libruby.so.3.3.0
7f6a3104b000-7f6a313e0000 r-xp 0004b000 08:08 6984462 /usr/lib64/libruby.so.3.3.0
7f6a313e0000-7f6a3154c000 r--p 003e0000 08:08 6984462 /usr/lib64/libruby.so.3.3.0
7f6a3154c000-7f6a31565000 r--p 0054c000 08:08 6984462 /usr/lib64/libruby.so.3.3.0
7f6a31565000-7f6a31566000 rw-p 00565000 08:08 6984462 /usr/lib64/libruby.so.3.3.0
7f6a31566000-7f6a3157e000 rw-p 00000000 00:00 0
7f6a3157e000-7f6a31581000 r--p 00000000 08:08 6976691 /usr/lib64/libgcc_s-13-20231205.so.1
7f6a31581000-7f6a3159c000 r-xp 00003000 08:08 6976691 /usr/lib64/libgcc_s-13-20231205.so.1
7f6a3159c000-7f6a315a0000 r--p 0001e000 08:08 6976691 /usr/lib64/libgcc_s-13-20231205.so.1
7f6a315a0000-7f6a315a1000 r--p 00021000 08:08 6976691 /usr/lib64/libgcc_s-13-20231205.so.1
7f6a315a1000-7f6a315a4000 rw-p 00000000 00:00 0
7f6a315a4000-7f6a315a6000 r--p 00000000 08:08 6980054 /usr/lib64/libcrypt.so.2.0.0
7f6a315a6000-7f6a315ba000 r-xp 00002000 08:08 6980054 /usr/lib64/libcrypt.so.2.0.0
7f6a315ba000-7f6a315d3000 r--p 00016000 08:08 6980054 /usr/lib64/libcrypt.so.2.0.0
7f6a315d3000-7f6a315d4000 r--p 0002e000 08:08 6980054 /usr/lib64/libcrypt.so.2.0.0
7f6a315d4000-7f6a315dd000 rw-p 00000000 00:00 0
7f6a315dd000-7f6a315e0000 r--p 00000000 08:08 6979909 /usr/lib64/libz.so.1.2.13.zlib-ng
7f6a315e0000-7f6a315f6000 r-xp 00003000 08:08 6979909 /usr/lib64/libz.so.1.2.13.zlib-ng
7f6a315f6000-7f6a315fd000 r--p 00019000 08:08 6979909 /usr/lib64/libz.so.1.2.13.zlib-ng
7f6a315fd000-7f6a315fe000 r--p 00020000 08:08 6979909 /usr/lib64/libz.so.1.2.13.zlib-ng
7f6a315fe000-7f6a31601000 rw-p 00000000 00:00 0
7f6a31601000-7f6a31602000 r--p 00000000 08:08 6984477 /usr/lib64/ruby/enc/encdb.so
7f6a31602000-7f6a31603000 r-xp 00001000 08:08 6984477 /usr/lib64/ruby/enc/encdb.so
7f6a31603000-7f6a31604000 r--p 00002000 08:08 6984477 /usr/lib64/ruby/enc/encdb.so
7f6a31604000-7f6a31605000 r--p 00002000 08:08 6984477 /usr/lib64/ruby/enc/encdb.so
7f6a31605000-7f6a31606000 rw-p 00000000 00:00 0
7f6a31606000-7f6a31607000 r--p 00000000 08:08 6979651 /usr/lib64/ld-linux-x86-64.so.2
7f6a31607000-7f6a3162e000 r-xp 00001000 08:08 6979651 /usr/lib64/ld-linux-x86-64.so.2
7f6a3162e000-7f6a31638000 r--p 00028000 08:08 6979651 /usr/lib64/ld-linux-x86-64.so.2
7f6a31638000-7f6a3163a000 r--p 00031000 08:08 6979651 /usr/lib64/ld-linux-x86-64.so.2
7f6a3163a000-7f6a3163c000 rw-p 00033000 08:08 6979651 /usr/lib64/ld-linux-x86-64.so.2
7ffdbe4fa000-7ffdbecf9000 rw-p 00000000 00:00 0 [stack]
7ffdbed8a000-7ffdbed8e000 r--p 00000000 00:00 0 [vvar]
7ffdbed8e000-7ffdbed90000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall]
/usr/bin/ruby -rbundler/setup -rsimplecov -Ilib -w -I/usr/share/gems/gems/rspec-support-3.12.1/lib:/usr/share/gems/gems/rspec-core-3.12.2/lib /usr/share/gems/gems/rspec-core-3.12.2/exe/rspec --pattern spec/alexandria/\*\*/\*_spec.rb failed
</code></pre>
<p>I have not tried to minimize failure test (it may take time..)</p>
Ruby master - Bug #20076 (Open): M:N scheduler is stuck on macOS with RUBY_MN_THREADS=1
https://redmine.ruby-lang.org/issues/20076
2023-12-21T03:17:50Z
hsbt (Hiroshi SHIBATA)
hsbt@ruby-lang.org
<p>This is known issue. I already shared this to ko1.</p>
<p>The version of <a href="https://github.com/ruby/ruby/commit/28e3886689c71b22487dd5d0cb62f3b5ed0a77cc" class="external">https://github.com/ruby/ruby/commit/28e3886689c71b22487dd5d0cb62f3b5ed0a77cc</a> is crashed with <code>make exam</code>.</p>
<p>This is happend with webrick test on <code>make test-tool</code>.</p>
<p>My environment is macOS Sonoma 14.3 beta1 and</p>
<pre><code>$ pkgutil --pkg-info=com.apple.pkg.CLTools_Executables
package-id: com.apple.pkg.CLTools_Executables
version: 15.1.0.0.1.1700200546
volume: /
location: /
install-time: 1702331495
</code></pre>
Ruby master - Bug #20067 (Open): IO.pipe `int_enc` and `ext_enc` not working as documented?
https://redmine.ruby-lang.org/issues/20067
2023-12-15T13:30:51Z
byroot (Jean Boussier)
byroot@ruby-lang.org
<p>From the documentation:</p>
<blockquote>
<p>pipe(ext_enc, int_enc, **opts)</p>
</blockquote>
<blockquote>
<p>If argument int_enc is given, it must be an Encoding object or encoding name string that specifies the internal encoding to be used; if argument ext_enc is also given, it must be an Encoding object or encoding name string that specifies the external encoding to be used.</p>
</blockquote>
<p>Test script:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">ios</span> <span class="o">=</span> <span class="no">IO</span><span class="p">.</span><span class="nf">pipe</span><span class="p">(</span><span class="no">Encoding</span><span class="o">::</span><span class="no">BINARY</span><span class="p">,</span> <span class="no">Encoding</span><span class="o">::</span><span class="no">BINARY</span><span class="p">)</span>
<span class="nb">p</span> <span class="p">[</span><span class="ss">:internal</span><span class="p">,</span> <span class="o">*</span><span class="n">ios</span><span class="p">.</span><span class="nf">map</span><span class="p">(</span><span class="o">&</span><span class="ss">:internal_encoding</span><span class="p">)]</span>
<span class="nb">p</span> <span class="p">[</span><span class="ss">:external</span><span class="p">,</span> <span class="o">*</span><span class="n">ios</span><span class="p">.</span><span class="nf">map</span><span class="p">(</span><span class="o">&</span><span class="ss">:external_encoding</span><span class="p">)]</span>
<span class="no">Encoding</span><span class="p">.</span><span class="nf">default_internal</span> <span class="o">=</span> <span class="no">Encoding</span><span class="o">::</span><span class="no">UTF_8</span>
<span class="no">Encoding</span><span class="p">.</span><span class="nf">default_external</span> <span class="o">=</span> <span class="no">Encoding</span><span class="o">::</span><span class="no">UTF_8</span>
<span class="n">ios</span> <span class="o">=</span> <span class="no">IO</span><span class="p">.</span><span class="nf">pipe</span><span class="p">(</span><span class="no">Encoding</span><span class="o">::</span><span class="no">BINARY</span><span class="p">,</span> <span class="no">Encoding</span><span class="o">::</span><span class="no">BINARY</span><span class="p">)</span>
<span class="nb">p</span> <span class="p">[</span><span class="ss">:internal</span><span class="p">,</span> <span class="o">*</span><span class="n">ios</span><span class="p">.</span><span class="nf">map</span><span class="p">(</span><span class="o">&</span><span class="ss">:internal_encoding</span><span class="p">)]</span>
<span class="nb">p</span> <span class="p">[</span><span class="ss">:external</span><span class="p">,</span> <span class="o">*</span><span class="n">ios</span><span class="p">.</span><span class="nf">map</span><span class="p">(</span><span class="o">&</span><span class="ss">:external_encoding</span><span class="p">)]</span>
</code></pre>
<p>Actual output:</p>
<pre><code>[:internal, nil, nil]
[:external, #<Encoding:ASCII-8BIT>, nil]
[:internal, nil, nil]
[:external, #<Encoding:ASCII-8BIT>, #<Encoding:UTF-8>]
</code></pre>
<p>Expected output:</p>
<pre><code>[:internal, #<Encoding:ASCII-8BIT>, #<Encoding:ASCII-8BIT>]
[:external, #<Encoding:ASCII-8BIT>, #<Encoding:ASCII-8BIT>]
[:internal, #<Encoding:ASCII-8BIT>, #<Encoding:ASCII-8BIT>]
[:external, #<Encoding:ASCII-8BIT>, #<Encoding:ASCII-8BIT>]
</code></pre>
<p>Am I reading the documentation incorrectly, or is it just not working as claimed?</p>
<p>I tried on older versions, and it seems to have been like that all the way down to Ruby 1.9.</p>
<p>The only reliable way I found to have a "binary" pipe is to call <code>IO#binmode</code>.</p>
Ruby master - Bug #20047 (Open): ConditionVariable#wait has spurious wakeups from signal traps
https://redmine.ruby-lang.org/issues/20047
2023-12-07T13:07:37Z
Eregon (Benoit Daloze)
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">Signal</span><span class="p">.</span><span class="nf">trap</span><span class="p">(</span><span class="s2">"INT"</span><span class="p">)</span> <span class="p">{</span> <span class="nb">p</span> <span class="ss">:SIGINT</span> <span class="p">}</span>
<span class="no">Thread</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="nb">sleep</span> <span class="mf">0.6</span>
<span class="sb">`kill -INT </span><span class="si">#{</span><span class="vg">$$</span><span class="si">}</span><span class="sb">`</span>
<span class="k">end</span>
<span class="n">m</span><span class="p">,</span> <span class="n">cv</span> <span class="o">=</span> <span class="no">Mutex</span><span class="p">.</span><span class="nf">new</span><span class="p">,</span> <span class="no">ConditionVariable</span><span class="p">.</span><span class="nf">new</span>
<span class="n">m</span><span class="p">.</span><span class="nf">synchronize</span> <span class="k">do</span>
<span class="n">r</span> <span class="o">=</span> <span class="no">ARGV</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="p">?</span> <span class="n">cv</span><span class="p">.</span><span class="nf">wait</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="p">:</span> <span class="n">cv</span><span class="p">.</span><span class="nf">wait</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
<span class="nb">p</span> <span class="p">[</span><span class="s2">"ConditionVariable#wait returned"</span><span class="p">,</span> <span class="n">r</span><span class="p">]</span>
<span class="k">end</span>
</code></pre>
<p>The above program (without CLI arguments) should hang on <code>.wait</code> and not return, because neither ConditionVariable#{signal,broadcast} are used.<br>
That's the behavior on TruffleRuby and JRuby, but not on CRuby, where <code>.wait</code> wakes up spuriously.</p>
<pre><code>$ ruby -v spurious_cv.rb
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]
:SIGINT
["ConditionVariable#wait returned", 1]
$ ruby -v spurious_cv.rb
truffleruby 23.1.1, like ruby 3.2.2, Oracle GraalVM Native [x86_64-linux]
:SIGINT
# hangs as expected
$ ruby -v spurious_cv.rb
jruby 9.4.5.0 (3.1.4) 2023-11-02 1abae2700f OpenJDK 64-Bit Server VM 17.0.8+7 on 17.0.8+7 +jit [x86_64-linux]
:SIGINT
# hangs as expected
</code></pre>
<p>When given an argument, it should wait 2 seconds.<br>
But on CRuby it wakes up spuriously:</p>
<pre><code>$ ruby -v spurious_cv.rb timeout
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]
:SIGINT
["ConditionVariable#wait returned", 0]
$ ruby -v spurious_cv.rb timeout
truffleruby 23.1.1, like ruby 3.2.2, Oracle GraalVM Native [x86_64-linux]
:SIGINT
["ConditionVariable#wait returned", #<ConditionVariable:0x188>]
$ ruby -v spurious_cv.rb timeout
jruby 9.4.5.0 (3.1.4) 2023-11-02 1abae2700f OpenJDK 64-Bit Server VM 17.0.8+7 on 17.0.8+7 +jit [x86_64-linux]
:SIGINT
["ConditionVariable#wait returned", #<Thread::ConditionVariable:0x482ba4b1>]
</code></pre>
<p><code>ConditionVariable#wait</code> needs to be interrupted to execute the signal handler, which does <code>{ p :SIGINT }</code> on the main thread.<br>
However, <code>ConditionVariable#wait</code> should automatically be restarted internally after that, with the remaining timeout.<br>
That is what I think is the bug in CRuby.</p>
<p>While it's good practice to have a loop around ConditionVariable#wait (at least when there is no timeout), it still seems highly unexpected in a high-level language like Ruby<br>
to have ConditionVariable#wait return when neither ConditionVariable#{signal,broadcast} are used (i.e., spurious wakeups).</p>
<p>Also adding a loop is non-trivial for the case where a timeout argument is passed, as then one needs to manually account the remaining timeout instead of letting ConditionVariable#wait do its job correctly.<br>
And also need to check that if ConditionVariable#wait returns nil then one should break the loop, which is quite error-prone.<br>
Instead of just using <code>cv.wait(mutex, timeout)</code> when it works correctly.</p>
<p>From <a href="https://github.com/ruby-concurrency/concurrent-ruby/issues/1015" class="external">https://github.com/ruby-concurrency/concurrent-ruby/issues/1015</a></p>
Ruby master - Bug #20043 (Open): `defined?` checks for method existence but only sometimes
https://redmine.ruby-lang.org/issues/20043
2023-12-05T22:17:59Z
tenderlovemaking (Aaron Patterson)
tenderlove@ruby-lang.org
<p>When an expression is passed to <code>defined?</code>, it will <em>sometimes</em> check if a method in a sub-expression is defined and sometimes it won't.</p>
<p>For example:</p>
<pre><code>$ ./miniruby -e'p defined?(a)'
nil
$ ./miniruby -e'p defined?([a])'
nil
</code></pre>
<p>In the above case, Ruby will check whether or not the method <code>a</code> is defined, and it returns <code>nil</code>. However, if you use a splat, it will not check:</p>
<pre><code>$ ./miniruby -e'p defined?([*a])'
"expression"
</code></pre>
<p>The same thing seems to happen with method parameters:</p>
<pre><code>$ ./miniruby -e'p defined?(itself)'
"method"
$ ./miniruby -e'p defined?(itself(a))'
nil
$ ./miniruby -e'p defined?(itself(*a))'
"method"
</code></pre>
<p>Oddly, <code>defined?</code> will check contents of arrays, but <em>won't</em> check contents of hashes:</p>
<pre><code>$ ./miniruby -e'p defined?([[[[a]]]])'
nil
$ ./miniruby -e'p defined?({ a => a })'
"expression"
</code></pre>
<p>I think all of the cases that refer to <code>a</code> should check whether or not <code>a</code> is defined regardless of splats or hashes.</p>
Ruby master - Bug #20009 (Open): Marshal.load raises exception when load dumped class include non...
https://redmine.ruby-lang.org/issues/20009
2023-11-19T16:26:03Z
ippachi (Kazuya Hatanaka)
<a name="Reproduction-code"></a>
<h2 >Reproduction code<a href="#Reproduction-code" class="wiki-anchor">¶</a></h2>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">C</span><span class="err">クラス</span><span class="p">;</span> <span class="k">end</span>
<span class="no">Marshal</span><span class="p">.</span><span class="nf">load</span><span class="p">(</span><span class="no">Marshal</span><span class="p">.</span><span class="nf">dump</span><span class="p">(</span><span class="no">C</span><span class="err">クラス</span><span class="p">))</span>
</code></pre>
<a name="Actual-result"></a>
<h2 >Actual result<a href="#Actual-result" class="wiki-anchor">¶</a></h2>
<pre><code><internal:marshal>:34:in `load': undefined class/module C\xE3\x82\xAF\xE3\x83\xA9\xE3\x82\xB9 (ArgumentError)
from marshal.rb:2:in `<main>'
</code></pre>
<a name="Expected-result"></a>
<h2 >Expected result<a href="#Expected-result" class="wiki-anchor">¶</a></h2>
<p>Returns <code>Cクラス</code></p>
<a name="Impacted-area"></a>
<h2 >Impacted area<a href="#Impacted-area" class="wiki-anchor">¶</a></h2>
<p>An exception is raised in Rails under the following conditions</p>
<ul>
<li>minitest is used with default settings</li>
<li>Parallel execution with parallelize</li>
<li>test class names contain non-ASCII characters</li>
</ul>
<p>The default parallelization uses DRb, and Marshal is used inside DRb.</p>
<a name="Other"></a>
<h2 >Other<a href="#Other" class="wiki-anchor">¶</a></h2>
<p>After trying various things, I thought I could fix it by making <code>rb_path_to_class</code> support strings containing non-ASCII characters, but I couldn't find anything more than that.</p>
Ruby master - Bug #19984 (Open): `make test-bundler-parallel` fails with ` --enable-shared`
https://redmine.ruby-lang.org/issues/19984
2023-11-02T09:17:50Z
vo.x (Vit Ondruch)
v.ondruch@tiscali.cz
<pre><code>+ ./configure --enable-shared
checking for ruby... false
... snip ...
config.status: creating Makefile
---
Configuration summary for ruby version 3.3.0
* Installation prefix: /usr/local
* exec prefix: ${prefix}
* arch: x86_64-linux
* site arch: ${arch}
* RUBY_BASE_NAME: ruby
* enable shared: yes
* ruby lib prefix: ${libdir}/${RUBY_BASE_NAME}
* site libraries path: ${rubylibprefix}/${sitearch}
* vendor path: ${rubylibprefix}/vendor_ruby
* target OS: linux
* compiler: gcc
* with thread: pthread
* with coroutine: amd64
* enable shared libs: yes
* dynamic library ext: so
* CFLAGS: ${optflags} ${debugflags} ${warnflags}
* LDFLAGS: -L. -Wl,-z,relro -Wl,--as-needed -Wl,-z,now \
-specs=/usr/lib/rpm/redhat/redhat-hardened-ld \
-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 \
-Wl,--build-id=sha1 -fstack-protector-strong \
-rdynamic -Wl,-export-dynamic -Wl,--no-as-needed
* DLDFLAGS: -Wl,-z,relro -Wl,--as-needed -Wl,-z,now \
-specs=/usr/lib/rpm/redhat/redhat-hardened-ld \
-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 \
-Wl,--build-id=sha1 \
-Wl,--compress-debug-sections=zlib
* optflags: -O3 -fno-fast-math
* debugflags: -ggdb3
* warnflags: -Wall -Wextra -Wdeprecated-declarations \
-Wdiv-by-zero -Wduplicated-cond \
-Wimplicit-function-declaration -Wimplicit-int \
-Wpointer-arith -Wwrite-strings \
-Wold-style-definition -Wimplicit-fallthrough=0 \
-Wmissing-noreturn -Wno-cast-function-type \
-Wno-constant-logical-operand -Wno-long-long \
-Wno-missing-field-initializers \
-Wno-overlength-strings \
-Wno-packed-bitfield-compat \
-Wno-parentheses-equality -Wno-self-assign \
-Wno-tautological-compare -Wno-unused-parameter \
-Wno-unused-value -Wsuggest-attribute=format \
-Wsuggest-attribute=noreturn -Wunused-variable \
-Wmisleading-indentation -Wundef
* strip command: strip -S -x
* install doc: rdoc
* YJIT support: yes
* RJIT support: yes
* man page type: doc
---
$ make -O -j8 V=1 VERBOSE=1 'COPY=cp -p'
BASERUBY = echo executable host ruby is required. use --with-baseruby option.; false
CC = gcc
LD = ld
LDSHARED = gcc -shared
CFLAGS = -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -m64
XCFLAGS = -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-overflow -fvisibility=hidden -fexcess-precision=standard -DRUBY_EXPORT -I. -I.ext/include/x86_64-linux -I./include -I. -I./prism -I./enc/unicode/15.0.0
CPPFLAGS =
DLDFLAGS = -Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -Wl,--compress-debug-sections=zlib -Wl,-soname,libruby.so.3.3 -fstack-protector-strong -m64
SOLIBS = -lz -lrt -lrt -lgmp -ldl -lcrypt -lm -lpthread
LANG = C.UTF-8
LC_ALL =
LC_CTYPE =
MFLAGS = -j8 -Otarget --jobserver-auth=fifo:/tmp/GMfifo10180 --sync-mutex=fnm:/tmp/GmCLOiGB
RUSTC = rustc
YJIT_RUSTC_ARGS = --crate-name=yjit --crate-type=staticlib --edition=2021 -g -C lto=thin -C opt-level=3 -C overflow-checks=on '--out-dir=/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/yjit/target/release/' ./yjit/src/lib.rs
gcc (GCC) 13.2.1 20231011 (Red Hat 13.2.1-4)
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
gcc -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -m64 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-overflow -fvisibility=hidden -fexcess-precision=standard -DRUBY_EXPORT -I. -I.ext/include/x86_64-linux -I./include -I. -I./prism -I./enc/unicode/15.0.0 -o dmyext.o -c dmyext.c
... snip ...
$ make test-bundler-parallel
BASERUBY = echo executable host ruby is required. use --with-baseruby option.; false
CC = gcc
LD = ld
LDSHARED = gcc -shared
CFLAGS = -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -m64
XCFLAGS = -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-overflow -fvisibility=hidden -fexcess-precision=standard -DRUBY_EXPORT -I. -I.ext/include/x86_64-linux -I./include -I. -I./prism -I./enc/unicode/15.0.0
CPPFLAGS =
DLDFLAGS = -Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -Wl,--compress-debug-sections=zlib -Wl,-soname,libruby.so.3.3 -fstack-protector-strong -m64
SOLIBS = -lz -lrt -lrt -lgmp -ldl -lcrypt -lm -lpthread
LANG = C.UTF-8
LC_ALL =
LC_CTYPE =
MFLAGS =
RUSTC = rustc
YJIT_RUSTC_ARGS = --crate-name=yjit --crate-type=staticlib --edition=2021 -g -C lto=thin -C opt-level=3 -C overflow-checks=on '--out-dir=/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/yjit/target/release/' ./yjit/src/lib.rs
gcc (GCC) 13.2.1 20231011 (Red Hat 13.2.1-4)
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
generating enc.mk
making srcs under enc
make[1]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484'
make[1]: Nothing to be done for 'srcs'.
make[1]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484'
generating transdb.h
transdb.h unchanged
generating makefiles ext/configure-ext.mk
ext/configure-ext.mk updated
make[1]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484'
make[1]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484'
generating makefile exts.mk
exts.mk unchanged
make[1]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/bigdecimal'
installing default bigdecimal libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/bigdecimal'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/coverage'
installing default coverage libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/coverage'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/date'
installing default date_core libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/date'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/digest'
installing digest libraries
installing default digest libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/digest'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/digest/sha2'
installing default sha2 libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/digest/sha2'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/fiddle'
installing default fiddle libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/fiddle'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/io/console'
installing default console libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/io/console'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/json'
installing default libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/json'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/monitor'
installing default monitor libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/monitor'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/nkf'
installing default nkf libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/nkf'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/objspace'
installing default objspace libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/objspace'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/openssl'
installing default openssl libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/openssl'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/pathname'
installing default pathname libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/pathname'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/psych'
installing default psych libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/psych'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/pty'
installing default pty libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/pty'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/ripper'
installing default ripper libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/ripper'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/rubyvm'
installing default libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/rubyvm'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/socket'
installing default socket libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/socket'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/syslog'
installing default syslog libraries
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ext/syslog'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/.bundle/gems/debug-1.8.0/ext/debug'
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/.bundle/gems/debug-1.8.0/ext/debug'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/.bundle/gems/racc-1.7.1/ext/racc/cparse'
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/.bundle/gems/racc-1.7.1/ext/racc/cparse'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/.bundle/gems/rbs-3.2.2/ext/rbs_extension'
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/.bundle/gems/rbs-3.2.2/ext/rbs_extension'
make[2]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484'
make[2]: 'ruby' is up to date.
make[2]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484'
make[1]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484'
make[1]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484'
make[1]: Nothing to be done for 'note'.
make[1]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484'
making enc
make[1]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484'
make[1]: Nothing to be done for 'enc'.
make[1]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484'
making trans
make[1]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484'
make[1]: Nothing to be done for './enc/trans'.
make[1]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484'
making encs
make[1]: Entering directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484'
make[1]: Nothing to be done for 'encs'.
make[1]: Leaving directory '/builddir/build/BUILD/ruby-3.3.0-a1e24ab484'
generating x86_64-linux-fake.rb
x86_64-linux-fake.rb updated
./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems -C . -Ilib \
-e 'ENV["GEM_HOME"] = File.expand_path(".bundle")' \
-e 'ENV["BUNDLE_APP_CONFIG"] = File.expand_path(".bundle")' \
-e 'ENV["BUNDLE_PATH__SYSTEM"] = "true"' \
-e 'ENV["BUNDLE_WITHOUT"] = "lint doc"' \
-e 'load "spec/bundler/support/bundle.rb"' -- install --quiet --gemfile=tool/bundler/dev_gems.rb
./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems \
-r./x86_64-linux-fake \
-e "ARGV[-1] = File.expand_path(ARGV[-1])" \
-e "exec(*ARGV)" -- \
./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems -I./spec/bundler \
-e "ENV['PARALLEL_TESTS_EXECUTABLE'] = ARGV.shift" \
-e "load ARGV.shift" \
"./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems -C . -Ispec/bundler:spec/lib .bundle/bin/rspec" \
./.bundle/bin/parallel_rspec \
-o "--require spec_helper --require formatter_overrides" \
--runtime-log ./tmp/parallel_runtime_rspec.log ./spec/bundler/
8 processes for 169 specs, ~ 21 specs per process
An error occurred in a `before(:suite)` hook.
Failure/Error:
raise <<~ERROR
Invoking `#{cmd}` failed with output:
----------------------------------------------------------------------
#{command_execution.stdboth}
----------------------------------------------------------------------
ERROR
RuntimeError:
Invoking `/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ruby -rrubygems /builddir/build/BUILD/ruby-3.3.0-a1e24ab484/bin/gem --backtrace build lib/bundler/bundler.gemspec` failed with output:
----------------------------------------------------------------------
/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ruby: error while loading shared libraries: libruby.so.3.3: cannot open shared object file: No such file or directory
----------------------------------------------------------------------
# ./spec/bundler/support/helpers.rb:202:in `sys_exec'
# ./spec/bundler/support/helpers.rb:165:in `gem_command'
# ./spec/bundler/support/helpers.rb:343:in `with_built_bundler'
# ./spec/bundler/support/helpers.rb:304:in `block (2 levels) in system_gems'
# ./spec/bundler/support/helpers.rb:300:in `each'
# ./spec/bundler/support/helpers.rb:300:in `block in system_gems'
# ./spec/bundler/support/helpers.rb:357:in `block in with_gem_path_as'
# ./spec/bundler/support/helpers.rb:371:in `without_env_side_effects'
# ./spec/bundler/support/helpers.rb:352:in `with_gem_path_as'
# ./spec/bundler/support/helpers.rb:298:in `system_gems'
# ./spec/bundler/spec_helper.rb:92:in `block (2 levels) in <top (required)>'
Finished in 0.36529 seconds (files took 0.67828 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples
An error occurred in a `before(:suite)` hook.
Failure/Error:
raise <<~ERROR
Invoking `#{cmd}` failed with output:
----------------------------------------------------------------------
#{command_execution.stdboth}
----------------------------------------------------------------------
ERROR
RuntimeError:
Invoking `/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ruby -rrubygems /builddir/build/BUILD/ruby-3.3.0-a1e24ab484/bin/gem --backtrace build lib/bundler/bundler.gemspec` failed with output:
----------------------------------------------------------------------
/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ruby: error while loading shared libraries: libruby.so.3.3: cannot open shared object file: No such file or directory
----------------------------------------------------------------------
# ./spec/bundler/support/helpers.rb:202:in `sys_exec'
# ./spec/bundler/support/helpers.rb:165:in `gem_command'
# ./spec/bundler/support/helpers.rb:343:in `with_built_bundler'
# ./spec/bundler/support/helpers.rb:304:in `block (2 levels) in system_gems'
# ./spec/bundler/support/helpers.rb:300:in `each'
# ./spec/bundler/support/helpers.rb:300:in `block in system_gems'
# ./spec/bundler/support/helpers.rb:357:in `block in with_gem_path_as'
# ./spec/bundler/support/helpers.rb:371:in `without_env_side_effects'
# ./spec/bundler/support/helpers.rb:352:in `with_gem_path_as'
# ./spec/bundler/support/helpers.rb:298:in `system_gems'
# ./spec/bundler/spec_helper.rb:92:in `block (2 levels) in <top (required)>'
Finished in 0.4346 seconds (files took 0.62401 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples
An error occurred in a `before(:suite)` hook.
Failure/Error:
raise <<~ERROR
Invoking `#{cmd}` failed with output:
----------------------------------------------------------------------
#{command_execution.stdboth}
----------------------------------------------------------------------
ERROR
RuntimeError:
Invoking `/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ruby -rrubygems /builddir/build/BUILD/ruby-3.3.0-a1e24ab484/bin/gem --backtrace build lib/bundler/bundler.gemspec` failed with output:
----------------------------------------------------------------------
/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ruby: error while loading shared libraries: libruby.so.3.3: cannot open shared object file: No such file or directory
----------------------------------------------------------------------
# ./spec/bundler/support/helpers.rb:202:in `sys_exec'
# ./spec/bundler/support/helpers.rb:165:in `gem_command'
# ./spec/bundler/support/helpers.rb:343:in `with_built_bundler'
# ./spec/bundler/support/helpers.rb:304:in `block (2 levels) in system_gems'
# ./spec/bundler/support/helpers.rb:300:in `each'
# ./spec/bundler/support/helpers.rb:300:in `block in system_gems'
# ./spec/bundler/support/helpers.rb:357:in `block in with_gem_path_as'
# ./spec/bundler/support/helpers.rb:371:in `without_env_side_effects'
# ./spec/bundler/support/helpers.rb:352:in `with_gem_path_as'
# ./spec/bundler/support/helpers.rb:298:in `system_gems'
# ./spec/bundler/spec_helper.rb:92:in `block (2 levels) in <top (required)>'
Finished in 0.37847 seconds (files took 0.71128 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples
An error occurred in a `before(:suite)` hook.
Failure/Error:
raise <<~ERROR
Invoking `#{cmd}` failed with output:
----------------------------------------------------------------------
#{command_execution.stdboth}
----------------------------------------------------------------------
ERROR
RuntimeError:
Invoking `/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ruby -rrubygems /builddir/build/BUILD/ruby-3.3.0-a1e24ab484/bin/gem --backtrace build lib/bundler/bundler.gemspec` failed with output:
----------------------------------------------------------------------
/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ruby: error while loading shared libraries: libruby.so.3.3: cannot open shared object file: No such file or directory
----------------------------------------------------------------------
# ./spec/bundler/support/helpers.rb:202:in `sys_exec'
# ./spec/bundler/support/helpers.rb:165:in `gem_command'
# ./spec/bundler/support/helpers.rb:343:in `with_built_bundler'
# ./spec/bundler/support/helpers.rb:304:in `block (2 levels) in system_gems'
# ./spec/bundler/support/helpers.rb:300:in `each'
# ./spec/bundler/support/helpers.rb:300:in `block in system_gems'
# ./spec/bundler/support/helpers.rb:357:in `block in with_gem_path_as'
# ./spec/bundler/support/helpers.rb:371:in `without_env_side_effects'
# ./spec/bundler/support/helpers.rb:352:in `with_gem_path_as'
# ./spec/bundler/support/helpers.rb:298:in `system_gems'
# ./spec/bundler/spec_helper.rb:92:in `block (2 levels) in <top (required)>'
Finished in 0.32898 seconds (files took 0.78975 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples
An error occurred in a `before(:suite)` hook.
Failure/Error:
raise <<~ERROR
Invoking `#{cmd}` failed with output:
----------------------------------------------------------------------
#{command_execution.stdboth}
----------------------------------------------------------------------
ERROR
RuntimeError:
Invoking `/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ruby -rrubygems /builddir/build/BUILD/ruby-3.3.0-a1e24ab484/bin/gem --backtrace build lib/bundler/bundler.gemspec` failed with output:
----------------------------------------------------------------------
/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ruby: error while loading shared libraries: libruby.so.3.3: cannot open shared object file: No such file or directory
----------------------------------------------------------------------
# ./spec/bundler/support/helpers.rb:202:in `sys_exec'
# ./spec/bundler/support/helpers.rb:165:in `gem_command'
# ./spec/bundler/support/helpers.rb:343:in `with_built_bundler'
# ./spec/bundler/support/helpers.rb:304:in `block (2 levels) in system_gems'
# ./spec/bundler/support/helpers.rb:300:in `each'
# ./spec/bundler/support/helpers.rb:300:in `block in system_gems'
# ./spec/bundler/support/helpers.rb:357:in `block in with_gem_path_as'
# ./spec/bundler/support/helpers.rb:371:in `without_env_side_effects'
# ./spec/bundler/support/helpers.rb:352:in `with_gem_path_as'
# ./spec/bundler/support/helpers.rb:298:in `system_gems'
# ./spec/bundler/spec_helper.rb:92:in `block (2 levels) in <top (required)>'
Finished in 0.41138 seconds (files took 0.77373 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples
An error occurred in a `before(:suite)` hook.
Failure/Error:
raise <<~ERROR
Invoking `#{cmd}` failed with output:
----------------------------------------------------------------------
#{command_execution.stdboth}
----------------------------------------------------------------------
ERROR
RuntimeError:
Invoking `/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ruby -rrubygems /builddir/build/BUILD/ruby-3.3.0-a1e24ab484/bin/gem --backtrace build lib/bundler/bundler.gemspec` failed with output:
----------------------------------------------------------------------
/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ruby: error while loading shared libraries: libruby.so.3.3: cannot open shared object file: No such file or directory
----------------------------------------------------------------------
# ./spec/bundler/support/helpers.rb:202:in `sys_exec'
# ./spec/bundler/support/helpers.rb:165:in `gem_command'
# ./spec/bundler/support/helpers.rb:343:in `with_built_bundler'
# ./spec/bundler/support/helpers.rb:304:in `block (2 levels) in system_gems'
# ./spec/bundler/support/helpers.rb:300:in `each'
# ./spec/bundler/support/helpers.rb:300:in `block in system_gems'
# ./spec/bundler/support/helpers.rb:357:in `block in with_gem_path_as'
# ./spec/bundler/support/helpers.rb:371:in `without_env_side_effects'
# ./spec/bundler/support/helpers.rb:352:in `with_gem_path_as'
# ./spec/bundler/support/helpers.rb:298:in `system_gems'
# ./spec/bundler/spec_helper.rb:92:in `block (2 levels) in <top (required)>'
Finished in 0.46772 seconds (files took 0.7346 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples
An error occurred in a `before(:suite)` hook.
Failure/Error:
raise <<~ERROR
Invoking `#{cmd}` failed with output:
----------------------------------------------------------------------
#{command_execution.stdboth}
----------------------------------------------------------------------
ERROR
RuntimeError:
Invoking `/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ruby -rrubygems /builddir/build/BUILD/ruby-3.3.0-a1e24ab484/bin/gem --backtrace build lib/bundler/bundler.gemspec` failed with output:
----------------------------------------------------------------------
/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ruby: error while loading shared libraries: libruby.so.3.3: cannot open shared object file: No such file or directory
----------------------------------------------------------------------
# ./spec/bundler/support/helpers.rb:202:in `sys_exec'
# ./spec/bundler/support/helpers.rb:165:in `gem_command'
# ./spec/bundler/support/helpers.rb:343:in `with_built_bundler'
# ./spec/bundler/support/helpers.rb:304:in `block (2 levels) in system_gems'
# ./spec/bundler/support/helpers.rb:300:in `each'
# ./spec/bundler/support/helpers.rb:300:in `block in system_gems'
# ./spec/bundler/support/helpers.rb:357:in `block in with_gem_path_as'
# ./spec/bundler/support/helpers.rb:371:in `without_env_side_effects'
# ./spec/bundler/support/helpers.rb:352:in `with_gem_path_as'
# ./spec/bundler/support/helpers.rb:298:in `system_gems'
# ./spec/bundler/spec_helper.rb:92:in `block (2 levels) in <top (required)>'
Finished in 0.35757 seconds (files took 0.73007 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples
An error occurred in a `before(:suite)` hook.
Failure/Error:
raise <<~ERROR
Invoking `#{cmd}` failed with output:
----------------------------------------------------------------------
#{command_execution.stdboth}
----------------------------------------------------------------------
ERROR
RuntimeError:
Invoking `/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ruby -rrubygems /builddir/build/BUILD/ruby-3.3.0-a1e24ab484/bin/gem --backtrace build lib/bundler/bundler.gemspec` failed with output:
----------------------------------------------------------------------
/builddir/build/BUILD/ruby-3.3.0-a1e24ab484/ruby: error while loading shared libraries: libruby.so.3.3: cannot open shared object file: No such file or directory
----------------------------------------------------------------------
# ./spec/bundler/support/helpers.rb:202:in `sys_exec'
# ./spec/bundler/support/helpers.rb:165:in `gem_command'
# ./spec/bundler/support/helpers.rb:343:in `with_built_bundler'
# ./spec/bundler/support/helpers.rb:304:in `block (2 levels) in system_gems'
# ./spec/bundler/support/helpers.rb:300:in `each'
# ./spec/bundler/support/helpers.rb:300:in `block in system_gems'
# ./spec/bundler/support/helpers.rb:357:in `block in with_gem_path_as'
# ./spec/bundler/support/helpers.rb:371:in `without_env_side_effects'
# ./spec/bundler/support/helpers.rb:352:in `with_gem_path_as'
# ./spec/bundler/support/helpers.rb:298:in `system_gems'
# ./spec/bundler/spec_helper.rb:92:in `block (2 levels) in <top (required)>'
Finished in 0.24372 seconds (files took 1.05 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples
Tests Failed
8 errors, 0 examples, 0 failures
Took 1 seconds
make: *** [uncommon.mk:1626: yes-test-bundler-parallel] Error 1
</code></pre>
Ruby master - Bug #19981 (Open): bootstraptest/test_ractor.rb: Segmentation fault on arm32
https://redmine.ruby-lang.org/issues/19981
2023-10-30T12:50:07Z
jaruga (Jun Aruga)
<p>I faced the following segmentation fault on Ubuntu jammy arm32 (emulated environment by <code>SETARCH='setarch linux32 --verbose --32bit'</code>) in both Travis CI arm64 <a href="https://app.travis-ci.com/github/ruby/ruby/jobs/612418476#L2422" class="external">log</a> and RubyCI arm64-neoverse server.</p>
<p>I tested it on the latest ruby master branch <code>14fa5e39d72c84d3e12e10dc5d77a6e6200c10f5</code>.</p>
<p>I was able to reproduce this issue on RubyCI arm64-neoverse server, and prepared the reproducing script. So, you can try to debug on the server.<br>
It seems that the <code>-O3</code> flag triggered the issue. Because I didn't see the issue when Travis CI setting <code>- optflags=-O1</code> in <code>.travis.yml</code> on the current master branch.<br>
<a href="https://github.com/junaruga/report-ruby-ractor-segmentation-fault" class="external">https://github.com/junaruga/report-ruby-ractor-segmentation-fault</a></p>
<pre><code>+ arm-linux-gnueabihf-gcc --version
arm-linux-gnueabihf-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
+ setarch linux32 --verbose --32bit make -s test
Switching on ADDR_LIMIT_32BIT.
Execute command `make'.
Fstderr output is not empty
<internal:ractor>:760: [BUG] Segmentation fault at 0x0000000c
ruby 3.3.0dev (2023-10-30T09:27:06Z master 14fa5e39d7) [armv8l-linux-eabihf]
-- Control frame information -----------------------------------------------
c:0005 p:0003 s:0021 e:000020 METHOD <internal:ractor>:760
c:0004 p:0008 s:0014 e:000013 BLOCK bootstraptest.test_ractor.rb_541_1260.rb:4
c:0003 p:0018 s:0011 e:000010 METHOD <internal:kernel>:187
c:0002 p:0004 s:0006 e:000005 BLOCK bootstraptest.test_ractor.rb_541_1260.rb:3 [FINISH]
c:0001 p:---- s:0003 e:000002 DUMMY [FINISH]
-- Ruby level backtrace information ----------------------------------------
bootstraptest.test_ractor.rb_541_1260.rb:3:in `block in <main>'
<internal:kernel>:187:in `loop'
bootstraptest.test_ractor.rb_541_1260.rb:4:in `block (2 levels) in <main>'
<internal:ractor>:760:in `yield'
-- Threading information ---------------------------------------------------
Total ractor count: 2
Ruby thread count for this ractor: 1
-- Machine register context ------------------------------------------------
r0: 0x00000000 r1: 0x00000001 r2: 0x00000007 r3: 0x00000000 r4: 0x00c935c8
r5: 0x00000002 r6: 0x00000002 r7: 0x00000000 r8: 0x00000004 r9: 0x00c646b0
r10: 0x00000002 sp: 0xd5d91c90 fau: 0x0000000c
-- Other runtime information -----------------------------------------------
* Loaded script: bootstraptest.test_ractor.rb_541_1260.rb
* Loaded features:
0 enumerator.so
1 thread.rb
2 fiber.so
3 rational.so
4 complex.so
5 ruby2_keywords.rb
6 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/encdb.so
7 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/trans/transdb.so
* Process memory map:
00640000-0093a000 r-xp 00000000 103:03 29263803 /home/jaruga/git/ruby/ruby/build/ruby
0094a000-0094e000 r--p 002fa000 103:03 29263803 /home/jaruga/git/ruby/ruby/build/ruby
0094e000-0094f000 rw-p 002fe000 103:03 29263803 /home/jaruga/git/ruby/ruby/build/ruby
0094f000-00956000 rw-p 00000000 00:00 0
00bf3000-00cba000 rw-p 00000000 00:00 0 [heap]
d5700000-d5721000 rw-p 00000000 00:00 0
d5721000-d5800000 ---p 00000000 00:00 0
d5900000-d5921000 rw-p 00000000 00:00 0
d5921000-d5a00000 ---p 00000000 00:00 0
d5a00000-d5a21000 rw-p 00000000 00:00 0
d5a21000-d5b00000 ---p 00000000 00:00 0
d5b00000-d5b21000 rw-p 00000000 00:00 0
d5b21000-d5c00000 ---p 00000000 00:00 0
d5c5f000-d5c60000 ---p 00000000 00:00 0
d5c60000-d5c90000 rw-p 00000000 00:00 0
d5c9f000-d5ca0000 ---p 00000000 00:00 0
d5ca0000-d5cd0000 rw-p 00000000 00:00 0
d5cde000-d5cdf000 ---p 00000000 00:00 0
d5cdf000-d5cef000 rw-p 00000000 00:00 0
d5cef000-d5cf0000 ---p 00000000 00:00 0
d5cf0000-d5d81000 rw-p 00000000 00:00 0
d5d81000-d5d82000 ---p 00000000 00:00 0
d5d82000-d5e12000 rw-p 00000000 00:00 0
d5e12000-d5e13000 ---p 00000000 00:00 0
d5e13000-d5ea3000 rw-p 00000000 00:00 0
d5ea3000-d5ea4000 ---p 00000000 00:00 0
d5ea4000-d5f34000 rw-p 00000000 00:00 0
d5f34000-d5f35000 ---p 00000000 00:00 0
d5f35000-d5fc5000 rw-p 00000000 00:00 0
d5fc5000-d5fc6000 ---p 00000000 00:00 0
d5fc6000-d6056000 rw-p 00000000 00:00 0
d6056000-d6057000 ---p 00000000 00:00 0
d6057000-d60e7000 rw-p 00000000 00:00 0
d60e7000-d60e8000 ---p 00000000 00:00 0
d60e8000-d6178000 rw-p 00000000 00:00 0
d6178000-d6179000 ---p 00000000 00:00 0
d6179000-d6209000 rw-p 00000000 00:00 0
d6209000-d620a000 ---p 00000000 00:00 0
d620a000-d629a000 rw-p 00000000 00:00 0
d629a000-d629b000 ---p 00000000 00:00 0
d629b000-d632b000 rw-p 00000000 00:00 0
d632b000-d632c000 ---p 00000000 00:00 0
d632c000-f5d10000 rw-p 00000000 00:00 0
f5d10000-f5d12000 r-xp 00000000 103:03 29263555 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/trans/transdb.so
f5d12000-f5d21000 ---p 00002000 103:03 29263555 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/trans/transdb.so
f5d21000-f5d22000 r--p 00001000 103:03 29263555 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/trans/transdb.so
f5d22000-f5d23000 rw-p 00002000 103:03 29263555 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/trans/transdb.so
f5d30000-f5d32000 r-xp 00000000 103:03 29263548 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/encdb.so
f5d32000-f5d41000 ---p 00002000 103:03 29263548 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/encdb.so
f5d41000-f5d42000 r--p 00001000 103:03 29263548 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/encdb.so
f5d42000-f5d43000 rw-p 00002000 103:03 29263548 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/encdb.so
f5d4f000-f5d50000 ---p 00000000 00:00 0
f5d50000-f5d71000 rw-p 00000000 00:00 0
f5d71000-f5d72000 ---p 00000000 00:00 0
f5d72000-f5d93000 rw-p 00000000 00:00 0
f5d93000-f5d94000 ---p 00000000 00:00 0
f5d94000-f5db5000 rw-p 00000000 00:00 0
f5db5000-f5db6000 ---p 00000000 00:00 0
f5db6000-f5dd7000 rw-p 00000000 00:00 0
f5dd7000-f5dd8000 ---p 00000000 00:00 0
f5dd8000-f5df9000 rw-p 00000000 00:00 0
f5df9000-f5dfa000 ---p 00000000 00:00 0
f5dfa000-f5e1b000 rw-p 00000000 00:00 0
f5e1b000-f5e1c000 ---p 00000000 00:00 0
f5e1c000-f5e3d000 rw-p 00000000 00:00 0
f5e3d000-f5e3e000 ---p 00000000 00:00 0
f5e3e000-f5e5f000 rw-p 00000000 00:00 0
f5e5f000-f5e60000 ---p 00000000 00:00 0
f5e60000-f66a0000 rw-p 00000000 00:00 0
f66af000-f73b0000 rw-p 00000000 00:00 0
f73b5000-f7436000 rw-p 00000000 00:00 0
f7436000-f76b0000 r--p 0006f000 103:03 11802136 /usr/lib/locale/locale-archive
f76b0000-f78b0000 r--p 00000000 103:03 11802136 /usr/lib/locale/locale-archive
f78b0000-f79bc000 r-xp 00000000 103:03 11670018 /usr/lib/arm-linux-gnueabihf/libc.so.6
f79bc000-f79cc000 ---p 0010c000 103:03 11670018 /usr/lib/arm-linux-gnueabihf/libc.so.6
f79cc000-f79ce000 r--p 0010c000 103:03 11670018 /usr/lib/arm-linux-gnueabihf/libc.so.6
f79ce000-f79cf000 rw-p 0010e000 103:03 11670018 /usr/lib/arm-linux-gnueabihf/libc.so.6
f79cf000-f79d9000 rw-p 00000000 00:00 0
f79e0000-f7a21000 r-xp 00000000 103:03 11670021 /usr/lib/arm-linux-gnueabihf/libm.so.6
f7a21000-f7a30000 ---p 00041000 103:03 11670021 /usr/lib/arm-linux-gnueabihf/libm.so.6
f7a30000-f7a31000 r--p 00040000 103:03 11670021 /usr/lib/arm-linux-gnueabihf/libm.so.6
f7a31000-f7a32000 rw-p 00041000 103:03 11670021 /usr/lib/arm-linux-gnueabihf/libm.so.6
f7a40000-f7a6b000 r-xp 00000000 103:03 11670013 /usr/lib/arm-linux-gnueabihf/libcrypt.so.1.1.0
f7a6b000-f7a7b000 ---p 0002b000 103:03 11670013 /usr/lib/arm-linux-gnueabihf/libcrypt.so.1.1.0
f7a7b000-f7a7c000 r--p 0002b000 103:03 11670013 /usr/lib/arm-linux-gnueabihf/libcrypt.so.1.1.0
f7a7c000-f7a7d000 rw-p 0002c000 103:03 11670013 /usr/lib/arm-linux-gnueabihf/libcrypt.so.1.1.0
f7a7d000-f7a85000 rw-p 00000000 00:00 0
f7a88000-f7aa7000 r-xp 00000000 103:03 11670015 /usr/lib/arm-linux-gnueabihf/ld-linux-armhf.so.3
f7aac000-f7ab3000 r--s 00000000 103:03 11670285 /usr/lib/arm-linux-gnueabihf/gconv/gconv-modules.cache
f7ab3000-f7ab5000 rw-p 00000000 00:00 0
f7ab5000-f7ab6000 r-xp 00000000 00:00 0 [sigpage]
f7ab6000-f7ab8000 r--p 0001e000 103:03 11670015 /usr/lib/arm-linux-gnueabihf/ld-linux-armhf.so.3
f7ab8000-f7ab9000 rw-p 00020000 103:03 11670015 /usr/lib/arm-linux-gnueabihf/ld-linux-armhf.so.3
ff7dd000-fffdc000 rw-p 00000000 00:00 0 [stack]
ffff0000-ffff1000 r-xp 00000000 00:00 0 [vectors]
</code></pre>
Ruby master - Bug #19974 (Open): OpenSSL::PKCS7 generates SegFault when parsing invalid data
https://redmine.ruby-lang.org/issues/19974
2023-10-26T14:17:56Z
dprater (David Prater)
<p>We ran into an instance of attempting to parse invalid PKCS7 certs that consistently causes a segfault in multiple versions of Ruby 3, on multiple platforms (Linux, Mac).</p>
<h2>To reproduce:<br>
------- (within pry or irb or whatever ruby shell you prefer) ----------<br>
data = "-----BEGIN PKCS7-----\nMAsGCSqGSIb3DQEHAg==\n-----END PKCS7-----\n"<br>
OpenSSL::PKCS7.new(data).certificates</h2>
<p>This causes a segfault 100% of the time for me on both an M1 Mac as well as in docker containers running on both Mac as well as Linux hosts.</p>
<p>The issue appears to be attempting to parse empty signedData. <a href="https://lapo.it/asn1js/#MAsGCSqGSIb3DQEHAg" class="external">https://lapo.it/asn1js/#MAsGCSqGSIb3DQEHAg</a> shows that this data contains the necessary ASN1 sequence to look like a valid PKCS7 certificate. However, the signedData is empty. I assume this is the cause of the issue, but I surely don't know.</p>
<p>I've attached the info from the core dump inside a linux container running on an M1 Mac.</p>
Ruby master - Bug #19970 (Open): Eval leaks callcache and callinfo objects on arm32 (linux)
https://redmine.ruby-lang.org/issues/19970
2023-10-24T12:56:58Z
larsin (Lars Ingjer)
<p>The following script demonstrates a memory leak on arm 32 (linux):</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">gcdiff</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
<span class="no">GC</span><span class="p">.</span><span class="nf">start</span>
<span class="k">if</span> <span class="vi">@last_gc_stat</span>
<span class="nb">puts</span> <span class="s2">"GC.stat </span><span class="si">#{</span><span class="n">n</span><span class="si">}</span><span class="s2"> diff old_objects: </span><span class="si">#{</span><span class="no">GC</span><span class="p">.</span><span class="nf">stat</span><span class="p">(</span><span class="ss">:old_objects</span><span class="p">)</span> <span class="o">-</span> <span class="vi">@last_gc_stat</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="vi">@last_gc_stat</span> <span class="o">=</span> <span class="no">GC</span><span class="p">.</span><span class="nf">stat</span><span class="p">(</span><span class="ss">:old_objects</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">foo</span>
<span class="k">end</span>
<span class="mi">10</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span> <span class="o">|</span><span class="n">i</span><span class="o">|</span>
<span class="mi">10_000</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span>
<span class="nb">eval</span> <span class="s1">'foo'</span>
<span class="k">end</span>
<span class="n">gcdiff</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="nb">puts</span> <span class="s2">"Number of live objects: </span><span class="si">#{</span><span class="no">GC</span><span class="p">.</span><span class="nf">stat</span><span class="p">(</span><span class="ss">:heap_live_slots</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span>
<span class="nb">puts</span> <span class="s2">"Memory usage: </span><span class="si">#{</span><span class="sb">`ps -o rss= -p </span><span class="si">#{</span><span class="vg">$$</span><span class="si">}</span><span class="sb">`</span><span class="si">}</span><span class="s2">"</span>
<span class="nb">puts</span>
<span class="k">end</span>
</code></pre>
<p>Output:</p>
<pre><code>Number of live objects: 41303
Memory usage: 11900
GC.stat 1 diff old_objects: 20037
Number of live objects: 61317
Memory usage: 13604
GC.stat 2 diff old_objects: 20001
Number of live objects: 81317
Memory usage: 14880
GC.stat 3 diff old_objects: 20000
Number of live objects: 101317
Memory usage: 16596
GC.stat 4 diff old_objects: 20000
Number of live objects: 121317
Memory usage: 17248
GC.stat 5 diff old_objects: 20000
Number of live objects: 141317
Memory usage: 18760
GC.stat 6 diff old_objects: 20000
Number of live objects: 161317
Memory usage: 19540
GC.stat 7 diff old_objects: 20000
Number of live objects: 181317
Memory usage: 21752
GC.stat 8 diff old_objects: 20000
Number of live objects: 201317
Memory usage: 21828
GC.stat 9 diff old_objects: 20000
Number of live objects: 221317
Memory usage: 24896
</code></pre>
<p>ObjectSpace.count_imemo_objects shows that imemo_callcache and imemo_callinfo are leaking.</p>
<p>The issue does not occur on arm64 mac or x86_64 linux with the same ruby version.<br>
The issue has also been reproduced with the latest 3.2.2 snapshot (2023-09-30).</p>
Ruby master - Bug #19922 (Open): ObjectSpace.dump_all in multiple threads in parallel causes SEGV
https://redmine.ruby-lang.org/issues/19922
2023-10-12T12:56:37Z
wanabe (_ wanabe)
s.wanabe@gmail.com
<p><code>ObjectSpace.dump_all</code> in multiple threads in parallel causes SEGV.<br>
The reproduce code is here:</p>
<pre><code>$ ruby -robjspace -e 'def dump; 10.times { ObjectSpace.dump_all } end; Thread.new { dump }; dump'
/home/wanabe/.rbenv/versions/master/lib/ruby/3.3.0+0/objspace.rb:100: [BUG] Segmentation fault at 0x0000000000000000
(snip)
</code></pre>
<p>I attached the full log.</p>
<p>I assumed that:</p>
<ul>
<li>Thread1
<ul>
<li>calls <code>rb_objspace_reachable_objects_from_root()</code>
</li>
<li>changes <code>GET_RACTOR()->mfd</code>: mfd1</li>
<li>calls <code>dump_flush()</code>
<ul>
<li>changes current thread due to IO</li>
</ul>
</li>
</ul>
</li>
<li>Thread2
<ul>
<li>calls <code>rb_objspace_reachable_objects_from_root()</code>
</li>
<li>changes <code>GET_RACTOR()->mfd</code>: mfd2</li>
<li>calls <code>dump_flush()</code>
<ul>
<li>changes current thread due to IO</li>
</ul>
</li>
</ul>
</li>
<li>Thread1
<ul>
<li>gets unexpected <code>GET_RACTOR()->mfd</code>: mfd2</li>
</ul>
</li>
</ul>
Ruby master - Bug #19869 (Open): Mark skipped test somehow
https://redmine.ruby-lang.org/issues/19869
2023-09-08T15:01:20Z
vo.x (Vit Ondruch)
v.ondruch@tiscali.cz
<p>When Minitest was used to execute the Ruby test suite, skipped test were cleanly marked, e.g.:</p>
<pre><code>[14036/25715] TestGemExtCmakeBuilder#test_self_build_has_makefile = s
</code></pre>
<p>However, with the test-unit the output is:</p>
<pre><code>[14036/25715] TestGemExtCmakeBuilder#test_self_build_has_makefile = 0.01 s
</code></pre>
<p>This is problematic, because running test suite, I can see that some test were skipped:</p>
<pre><code>25705 tests, 6108213 assertions, 0 failures, 0 errors, 99 skips
</code></pre>
<p>But I can't tell which. Is there a chance to fix this?</p>
Ruby master - Bug #19841 (Open): Marshal.dump stack overflow with recursive Time
https://redmine.ruby-lang.org/issues/19841
2023-08-18T18:53:57Z
segiddins (Samuel Giddins)
segiddins@segiddins.me
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1">#!/usr/bin/env ruby</span>
<span class="nb">puts</span> <span class="no">RUBY_VERSION</span>
<span class="n">t</span> <span class="o">=</span> <span class="no">Time</span><span class="p">.</span><span class="nf">at</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="ss">:nanosecond</span><span class="p">)</span>
<span class="n">t</span><span class="p">.</span><span class="nf">instance_variable_set</span> <span class="ss">:@itself</span><span class="p">,</span> <span class="n">t</span>
<span class="no">Marshal</span><span class="p">.</span><span class="nf">dump</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
</code></pre>
<p>Yields a stack overflow error from the <code>Marshal.dump</code> call, even though Marshal is explicitly able to handle cyclical references</p>
Ruby master - Bug #19761 (Open): AddressSanitizer fails with Thread and Process
https://redmine.ruby-lang.org/issues/19761
2023-07-08T07:26:56Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<p>With AddressSanitizer on macOS, this code crashes.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">system</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span>
<span class="no">Thread</span><span class="p">.</span><span class="nf">new</span> <span class="p">{}</span>
<span class="mi">300_000</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span>
<span class="no">String</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="ss">capacity: </span><span class="mi">1000</span><span class="p">)</span>
<span class="k">end</span>
</code></pre>
<pre><code>==62870==ERROR: AddressSanitizer failed to deallocate 0x8000 (32768) bytes at address 0x62d00000a400
AddressSanitizer: CHECK failed: sanitizer_posix.cpp:61 "(("unable to unmap" && 0)) != (0)" (0x0, 0x0) (tid=857549)
<empty stack>
Assertion Failed: ../debug/vm_core.h:1853:rb_current_execution_context:!expect_ec || ec != NULL
ruby 3.3.0dev (2023-07-08T02:54:37Z tmp 0083edc3a0) [x86_64-darwin22]
-- Crash Report log information --------------------------------------------
See Crash Report log file in one of the following locations:
* ~/Library/Logs/DiagnosticReports
* /Library/Logs/DiagnosticReports
for more details.
Don't forget to include the above Crash Report log file in bug reports.
-- C level backtrace information -------------------------------------------
</code></pre>
Ruby master - Bug #19749 (Open): Confirm correct behaviour when attaching private method with `#d...
https://redmine.ruby-lang.org/issues/19749
2023-06-28T13:40:35Z
itarato (Peter Arato)
<p>This issue is a special case of <a href="https://bugs.ruby-lang.org/issues/19745" class="external">https://bugs.ruby-lang.org/issues/19745</a>:</p>
<p>Should dynamically added private methods via <code>.singleton_class.send(:define_method,...</code> at the top-level be accessible publicly?</p>
<p>See the following example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">bar</span><span class="p">;</span> <span class="k">end</span>
<span class="n">foo</span> <span class="o">=</span> <span class="no">Object</span><span class="p">.</span><span class="nf">new</span>
<span class="n">foo</span><span class="p">.</span><span class="nf">singleton_class</span><span class="p">.</span><span class="nf">define_method</span><span class="p">(</span><span class="ss">:bar</span><span class="p">,</span> <span class="nb">method</span><span class="p">(</span><span class="ss">:bar</span><span class="p">))</span>
<span class="n">foo</span><span class="p">.</span><span class="nf">bar</span> <span class="c1"># No error.</span>
</code></pre>
<p>The script above runs fine on latest Ruby 3.3. Is this correct to ignore the fact that the visibility in the caller context is the default top-level private visibility?</p>
<p>This came up during a TruffleRuby investigation (<a href="https://github.com/oracle/truffleruby/issues/3134" class="external">https://github.com/oracle/truffleruby/issues/3134</a>) where the result for the same script is: <code>private method 'bar' called for #<Object:0xc8> (NoMethodError)</code></p>
Ruby master - Bug #19631 (Open): module_eval does not propulate absolute_path for Kernel.caller_l...
https://redmine.ruby-lang.org/issues/19631
2023-05-06T03:06:58Z
daveola (David Stellar)
<p>I am using module_eval and noticing that since ruby 3.2 the Kernel locations do not have absolute_path for any of the eval code, though the path is available. This is a regression since at least ruby 3.0 which still works.</p>
<p>I am on 3.2.2, and here is some sample code:</p>
<pre><code>class Script < Module
script = %q{
def self.locations
Kernel.caller_locations.each { |loc|
puts "LOCATION: #{loc}"
puts "ABSPATH: #{loc.absolute_path}"
puts "PATH: #{loc.path}"
}
end
self.locations
}
module_eval(script, "/this/is/my/path", 0)
end
</code></pre>
<p>The output for the code at the top of the caller locations (inside the module_eval) is:</p>
<pre><code>LOCATION: /this/is/my/path:9:in '<class:Script>'
ABSPATH:
PATH: /this/is/my/path
</code></pre>
<p>But the absolute_path should have the correct path data as well</p>
Ruby master - Bug #19609 (Open): net/http ignores open_timeout, read_timeout on Windows
https://redmine.ruby-lang.org/issues/19609
2023-04-20T13:27:54Z
inversion (Yura Babak)
<p>This small sample works fine on Linux (it takes 2 seconds to finish) but on Windows, it always fails with a timeout after some <strong>magical 21 seconds</strong>.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s1">'net/http'</span>
<span class="n">uri</span> <span class="o">=</span> <span class="no">URI</span> <span class="s1">'http://1.2.3.4'</span>
<span class="n">http</span> <span class="o">=</span> <span class="no">Net</span><span class="o">::</span><span class="no">HTTP</span><span class="o">::</span><span class="n">new</span><span class="p">(</span><span class="n">uri</span><span class="p">.</span><span class="nf">host</span><span class="p">,</span> <span class="n">uri</span><span class="p">.</span><span class="nf">port</span><span class="p">)</span>
<span class="n">http</span><span class="p">.</span><span class="nf">open_timeout</span> <span class="o">=</span> <span class="mi">2</span>
<span class="n">http</span><span class="p">.</span><span class="nf">read_timeout</span> <span class="o">=</span> <span class="mi">2</span>
<span class="n">time_start</span> <span class="o">=</span> <span class="no">Time</span><span class="p">.</span><span class="nf">now</span>
<span class="k">begin</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">http</span><span class="p">.</span><span class="nf">get</span> <span class="n">uri</span>
<span class="k">rescue</span> <span class="no">Exception</span>
<span class="nb">puts</span> <span class="vg">$!</span><span class="p">.</span><span class="nf">inspect</span>
<span class="k">end</span>
<span class="n">time_total</span> <span class="o">=</span> <span class="no">Time</span><span class="p">.</span><span class="nf">now</span> <span class="o">-</span> <span class="n">time_start</span>
<span class="nb">puts</span> <span class="n">time_total</span>
</code></pre>
<p>Strange that I have installed different versions and the results are not consistent:</p>
<p><strong>ruby 3.2.2</strong> (2023-03-30 revision e51014f9c0) [x64-mingw-ucrt]:</p>
<pre><code>#<Net::OpenTimeout: Failed to open TCP connection to 1.2.3.4:80 (execution expired)>
21.0494375
</code></pre>
<p><strong>ruby 3.1.2p20</strong> (2022-04-12 revision 4491bb740a) [x64-mingw-ucrt]:</p>
<pre><code>#<Net::OpenTimeout: Failed to open TCP connection to 1.2.3.4:80 (A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. - user specified timeout)>
2.0190419 # — works as expected
</code></pre>
<p><strong>ruby 3.0.1p64</strong> (2021-04-05 revision 0fb782ee38) [x64-mingw32]:</p>
<pre><code>#<Net::OpenTimeout: execution expired>
21.0423962
</code></pre>
Ruby master - Bug #19598 (Open): Inconsistent behaviour of TracePoint API
https://redmine.ruby-lang.org/issues/19598
2023-04-13T11:38:06Z
bgdimitrov (Bogdan Dimitrov)
<p>Hello,</p>
<p>I am seeing inconsistent behaviour of the TracePoint API. If I raise an error from within the <code>:raise</code> event block it crashes the entire program with a <code>exception reentered (fatal)</code> next time any error is raised. However if I add a simple <code>if</code> check in the <code>:raised</code> event block the same program doesn't crash anymore.</p>
<p>My specific use case is that sometimes when I have <code>Exception</code>s being raised in my application they are being handled by ActiveRecord and wrapped in a <code>ActiveRecord::StatementInvalid</code>, which is a <code>StandardError</code>. The codebase has a lot of <code>rescue StandardError</code> statements which swallow the <code>StatementInvalid</code> and therefore the <code>Exception</code>s get ignored. I would like to bypass the <code>rescue StandardError</code> statements in this case. My current solution is to manually check in every <code>rescue StandardError</code> if the <code>StatementInvalid</code> has an <code>Exception</code> in its <code>.cause</code> attribute and if there is re-raise it, but the codebase is very big and this is not a very good solution as every developer needs to remember to do this check if they add a new <code>rescue StandardError</code> or modify an existing one.</p>
<p>Using TracePoint to do the aforementioned check before any <code>rescue</code> statements are called and then re-raise the Exception seems like a very neat way to automate the handling of these masked <code>Exception</code>s. However I am getting inconsistent behaviour from Ruby depending on what code I put inside the <code>:raised</code> event handler. Here are two identical pieces of code apart from an extra <code>if</code> check in the second example. The first example crashes with <code>exception reentered (fatal)</code>, the second doesn't.</p>
<a name="Code-to-reproduce-crash"></a>
<h4 >Code to reproduce crash<a href="#Code-to-reproduce-crash" class="wiki-anchor">¶</a></h4>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s2">"active_record"</span>
<span class="k">class</span> <span class="nc">Test</span>
<span class="k">def</span> <span class="nf">run</span>
<span class="k">begin</span>
<span class="n">tp</span> <span class="o">=</span> <span class="no">TracePoint</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="ss">:raise</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">t</span><span class="o">|</span>
<span class="nb">puts</span> <span class="s2">"TracePoint received: </span><span class="si">#{</span><span class="n">t</span><span class="p">.</span><span class="nf">raised_exception</span><span class="p">.</span><span class="nf">class</span><span class="si">}</span><span class="s2">"</span>
<span class="k">raise</span> <span class="n">t</span><span class="p">.</span><span class="nf">raised_exception</span><span class="p">.</span><span class="nf">cause</span>
<span class="k">end</span>
<span class="nb">puts</span> <span class="s2">"TracePoint created"</span>
<span class="n">tp</span><span class="p">.</span><span class="nf">enable</span> <span class="k">do</span>
<span class="nb">puts</span> <span class="s2">"TracePoint enabled"</span>
<span class="c1"># Generate an Exception masked as a StatementInvalid</span>
<span class="k">begin</span>
<span class="k">raise</span> <span class="no">Exception</span>
<span class="kp">catch</span> <span class="no">Exception</span>
<span class="k">raise</span> <span class="no">ActiveRecord</span><span class="o">::</span><span class="no">StatementInvalid</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">rescue</span> <span class="no">Exception</span> <span class="o">=></span> <span class="n">e</span>
<span class="nb">puts</span> <span class="s2">"Got Exception instead of StatementInvalid"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">t</span> <span class="o">=</span> <span class="no">Test</span><span class="p">.</span><span class="nf">new</span>
<span class="n">t</span><span class="p">.</span><span class="nf">run</span>
<span class="k">begin</span>
<span class="k">raise</span> <span class="no">ArgumentError</span>
<span class="k">rescue</span> <span class="no">ArgumentError</span> <span class="o">=></span> <span class="n">e</span>
<span class="nb">puts</span> <span class="s2">"Never reach here"</span>
<span class="k">end</span>
</code></pre>
<a name="Output"></a>
<h4 >Output<a href="#Output" class="wiki-anchor">¶</a></h4>
<pre><code>TracePoint created
TracePoint enabled
TracePoint received: Exception
Got Exception instead of StatementInvalid
tp_test2.rb: exception reentered (fatal)
</code></pre>
<a name="Code-that-doesnt-crash-extra-if-check-on-line-8"></a>
<h4 >Code that doesn't crash, extra if check on line 8<a href="#Code-that-doesnt-crash-extra-if-check-on-line-8" class="wiki-anchor">¶</a></h4>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s2">"active_record"</span>
<span class="k">class</span> <span class="nc">Test</span>
<span class="k">def</span> <span class="nf">run</span>
<span class="k">begin</span>
<span class="n">tp</span> <span class="o">=</span> <span class="no">TracePoint</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="ss">:raise</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">t</span><span class="o">|</span>
<span class="nb">puts</span> <span class="s2">"TracePoint received: </span><span class="si">#{</span><span class="n">t</span><span class="p">.</span><span class="nf">raised_exception</span><span class="p">.</span><span class="nf">class</span><span class="si">}</span><span class="s2">"</span>
<span class="k">if</span> <span class="n">t</span><span class="p">.</span><span class="nf">raised_exception</span><span class="p">.</span><span class="nf">instance_of?</span><span class="p">(</span><span class="no">ActiveRecord</span><span class="o">::</span><span class="no">StatementInvalid</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">t</span><span class="p">.</span><span class="nf">raised_exception</span><span class="p">.</span><span class="nf">cause</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="nb">puts</span> <span class="s2">"TracePoint created"</span>
<span class="n">tp</span><span class="p">.</span><span class="nf">enable</span> <span class="k">do</span>
<span class="nb">puts</span> <span class="s2">"TracePoint enabled"</span>
<span class="c1"># Generate an Exception masked as a StatementInvalid</span>
<span class="k">begin</span>
<span class="k">raise</span> <span class="no">Exception</span>
<span class="kp">catch</span> <span class="no">Exception</span>
<span class="k">raise</span> <span class="no">ActiveRecord</span><span class="o">::</span><span class="no">StatementInvalid</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">rescue</span> <span class="no">Exception</span> <span class="o">=></span> <span class="n">e</span>
<span class="nb">puts</span> <span class="s2">"Got Exception instead of StatementInvalid"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">t</span> <span class="o">=</span> <span class="no">Test</span><span class="p">.</span><span class="nf">new</span>
<span class="n">t</span><span class="p">.</span><span class="nf">run</span>
<span class="k">begin</span>
<span class="k">raise</span> <span class="no">ArgumentError</span>
<span class="k">rescue</span> <span class="no">ArgumentError</span> <span class="o">=></span> <span class="n">e</span>
<span class="nb">puts</span> <span class="s2">"Never reach here"</span>
<span class="k">end</span>
</code></pre>
<a name="Output-2"></a>
<h4 >Output<a href="#Output-2" class="wiki-anchor">¶</a></h4>
<pre><code>TracePoint created
TracePoint enabled
TracePoint received: Exception
Got Exception instead of StatementInvalid
Never reach here
</code></pre>
Ruby master - Bug #19557 (Open): Deadlock on STDOUT(ERR) lock on signal handler
https://redmine.ruby-lang.org/issues/19557
2023-03-29T08:27:05Z
ko1 (Koichi Sasada)
<p>The following Ruby code produces <code>deadlock; recursive locking (ThreadError)</code>.<br>
It means some IO operations (<code>puts</code>, ...) is not used on trap handlers safely.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">trap</span><span class="p">(</span><span class="ss">:USR1</span><span class="p">){</span><span class="nb">puts</span> <span class="s1">'world'</span><span class="p">}</span>
<span class="no">Thread</span><span class="p">.</span><span class="nf">new</span><span class="p">{</span><span class="kp">loop</span><span class="p">{</span><span class="no">Process</span><span class="p">.</span><span class="nf">kill</span><span class="p">(</span><span class="ss">:USR1</span><span class="p">,</span> <span class="vg">$$</span><span class="p">);</span> <span class="nb">sleep</span> <span class="mf">0.5</span><span class="p">}}</span>
<span class="kp">loop</span><span class="p">{</span><span class="nb">puts</span> <span class="s1">'hello'</span><span class="p">}</span>
</code></pre>
<pre><code>...
hello
hello
hello
hello
hello
../../src/clean/test.rb:2:in `write': deadlock; recursive locking (ThreadError)
from ../../src/clean/test.rb:2:in `puts'
from ../../src/clean/test.rb:2:in `puts'
from ../../src/clean/test.rb:2:in `block in <main>'
from ../../src/clean/test.rb:4:in `write'
from ../../src/clean/test.rb:4:in `puts'
from ../../src/clean/test.rb:4:in `puts'
from ../../src/clean/test.rb:4:in `block in <main>'
from <internal:kernel>:187:in `loop'
from ../../src/clean/test.rb:4:in `<main>'
</code></pre>
<a name="Reason"></a>
<h2 >Reason<a href="#Reason" class="wiki-anchor">¶</a></h2>
<ul>
<li>
<code>puts()</code> calls <code>rb_io_writev()</code>
</li>
<li>it calls <code>IO#write</code>
</li>
<li>it calls <code>io_write_m()</code>
</li>
<li>it calls <code>io_writev()</code>
</li>
<li>it calls <code>io_fwritev()</code>
</li>
<li>it calls <code>io_binwritev()</code>
</li>
<li>it calls <code>rb_mutex_synchronize()</code> with <code>io_binwritev_internal()</code>
<ul>
<li>STDOUT's <code>fptr->write_lock</code> is acquired here</li>
</ul>
</li>
<li>
<code>io_binwritev_internal()</code> calls <code>rb_writev_internal()</code>
</li>
<li>it calls <code>rb_thread_io_blocking_region()</code> with <code>internal_writev_func()</code>
</li>
</ul>
<p>Here, <code>internal_writev_func()</code> can be interrupted by signals and if a trap handler is registered, call the trap handler (written in Ruby, <code>puts 'world'</code> in this case) and call <code>Kernel#puts()</code> and <code>fptr->write_lock</code> is already acquired -> <code>deadlock; recursive locking</code>.</p>
<a name="Ideas"></a>
<h2 >Ideas<a href="#Ideas" class="wiki-anchor">¶</a></h2>
<p>I'm not sure why <code>fptr->write_lock</code> is needed, but if there is no internal consistency issue, we can make <code>fptr->write_lock</code> <code>nil</code> at least for STDOUT/ERR.</p>
<p>Another idea is, calling trap handlers (or other interruptible Ruby code such as finalizers and so on) after releasing the lock. But I'm not sure it is feasible.</p>
Ruby master - Bug #19473 (Open): can't be called from trap context (ThreadError) is too limiting
https://redmine.ruby-lang.org/issues/19473
2023-03-02T12:04:28Z
Eregon (Benoit Daloze)
<p>Simple reproducer:</p>
<pre><code>$ ruby -ve 'm=Mutex.new; trap(:HUP) { m.synchronize { p :OK } }; Process.kill :HUP, Process.pid; sleep 0.1'
ruby 3.2.1 (2023-02-08 revision 31819e82c8) [x86_64-linux]
-e:1:in `synchronize': can't be called from trap context (ThreadError)
from -e:1:in `block in <main>'
from -e:1:in `kill'
from -e:1:in `<main>'
</code></pre>
<p>Expected behavior:</p>
<pre><code>$ ruby -ve 'm=Mutex.new; trap(:HUP) { m.synchronize { p :OK } }; Process.kill :HUP, Process.pid; sleep 0.1'
truffleruby 22.3.1, like ruby 3.0.3, GraalVM CE Native [x86_64-linux]
:OK
$ ruby -ve 'm=Mutex.new; trap(:HUP) { m.synchronize { p :OK } }; Process.kill :HUP, Process.pid; sleep 0.1'
jruby 9.4.0.0 (3.1.0) 2022-11-23 95c0ec159f OpenJDK 64-Bit Server VM 17.0.6+10 on 17.0.6+10 +jit [x86_64-linux]
:OK
</code></pre>
<p>This exception is highly problematic, for instance it breaks <code>Timeout.timeout</code> in <code>trap</code>:<br>
<a href="https://github.com/ruby/timeout/issues/17#issuecomment-1142035939" class="external">https://github.com/ruby/timeout/issues/17#issuecomment-1142035939</a></p>
<p>I suppose this behavior is because <em>sometimes</em> it's problematic to lock a Mutex in trap, e.g., if it's already locked by the main thread/fiber.<br>
But that would otherwise already raise <code>deadlock; recursive locking (ThreadError)</code>, so there is no point to fail early.<br>
And that's just one case, not all, so we should not always raise an exception.</p>
<p>There seems to be no valid reason to prevent <em>all</em> <code>Mutex#synchronize</code> in <code>trap</code>.<br>
After all, if the Mutex for instance is only used in <code>trap</code>, it's well-defined AFAIK.<br>
For instance a given trap handler does not seem executed concurrently:</p>
<pre><code>$ ruby -ve 'trap(:HUP) { puts "in trap\n"+caller.join("\n")+"\n\n"; sleep 0.1 }; pid = Process.pid; Process.wait fork { 20.times { Process.kill :HUP, pid } }; sleep 1'
ruby 3.2.1 (2023-02-08 revision 31819e82c8) [x86_64-linux]
in trap
-e:1:in `wait'
-e:1:in `<main>'
in trap
-e:1:in `wait'
-e:1:in `<main>'
in trap
-e:1:in `wait'
-e:1:in `<main>'
in trap
-e:1:in `wait'
-e:1:in `<main>'
in trap
-e:1:in `wait'
-e:1:in `<main>'
in trap
-e:1:in `wait'
-e:1:in `<main>'
</code></pre>
<p>And if the trap handler using the Mutex is never called while the Mutex is held by the main thread/fiber, there is also no problem.</p>
Ruby master - Bug #19470 (Open): Frequent small range-reads from and then writes to a large array...
https://redmine.ruby-lang.org/issues/19470
2023-03-01T05:36:52Z
giner (Stanislav German-Evtushenko)
<p>Write to a large array gets very slow when done after range-reading more than 3 items. In such case the original array gets marked as shared which triggers CoW on a small change afterwards. This leads to a significant performance impact and high memory utilization in cases when we need to range-read/write from/to the same array many times. While this issue can be avoided by reading <= 3 elements at a time the main problem is that this behaviour is not obvious and hard to catch on on-trivial projects.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">times</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">arr</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="mi">100000</span>
<span class="n">times</span><span class="p">.</span><span class="nf">push</span> <span class="mi">0</span>
<span class="mi">100000</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span>
<span class="n">time_start</span> <span class="o">=</span> <span class="no">Time</span><span class="p">.</span><span class="nf">now</span>
<span class="n">arr</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="mi">100</span> <span class="c1"># takes 0.01662315899999512</span>
<span class="n">times</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+=</span> <span class="no">Time</span><span class="p">.</span><span class="nf">now</span> <span class="o">-</span> <span class="n">time_start</span>
<span class="k">end</span>
<span class="n">times</span><span class="p">.</span><span class="nf">push</span> <span class="mi">0</span>
<span class="mi">100000</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span>
<span class="n">arr</span><span class="p">[</span><span class="mi">0</span><span class="o">..</span><span class="mi">2</span><span class="p">]</span>
<span class="n">time_start</span> <span class="o">=</span> <span class="no">Time</span><span class="p">.</span><span class="nf">now</span>
<span class="n">arr</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="mi">100</span> <span class="c1"># takes 0.01826406799999659</span>
<span class="n">times</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+=</span> <span class="no">Time</span><span class="p">.</span><span class="nf">now</span> <span class="o">-</span> <span class="n">time_start</span>
<span class="k">end</span>
<span class="n">times</span><span class="p">.</span><span class="nf">push</span> <span class="mi">0</span>
<span class="mi">100000</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span>
<span class="n">arr</span><span class="p">[</span><span class="mi">0</span><span class="o">..</span><span class="mi">3</span><span class="p">]</span>
<span class="n">time_start</span> <span class="o">=</span> <span class="no">Time</span><span class="p">.</span><span class="nf">now</span>
<span class="n">arr</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="mi">100</span> <span class="c1"># takes 7.757753919000069</span>
<span class="n">times</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+=</span> <span class="no">Time</span><span class="p">.</span><span class="nf">now</span> <span class="o">-</span> <span class="n">time_start</span>
<span class="k">end</span>
<span class="n">times</span><span class="p">.</span><span class="nf">push</span> <span class="mi">0</span>
<span class="mi">100000</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span>
<span class="n">arr</span><span class="p">.</span><span class="nf">dup</span>
<span class="n">time_start</span> <span class="o">=</span> <span class="no">Time</span><span class="p">.</span><span class="nf">now</span>
<span class="n">arr</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="mi">100</span> <span class="c1"># takes 7.626929300999957</span>
<span class="n">times</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+=</span> <span class="no">Time</span><span class="p">.</span><span class="nf">now</span> <span class="o">-</span> <span class="n">time_start</span>
<span class="k">end</span>
<span class="n">times</span><span class="p">.</span><span class="nf">push</span> <span class="mi">0</span>
<span class="mi">100000</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span>
<span class="n">arr</span><span class="p">.</span><span class="nf">clone</span>
<span class="n">time_start</span> <span class="o">=</span> <span class="no">Time</span><span class="p">.</span><span class="nf">now</span>
<span class="n">arr</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="mi">100</span> <span class="c1"># takes 8.216933763000046</span>
<span class="n">times</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+=</span> <span class="no">Time</span><span class="p">.</span><span class="nf">now</span> <span class="o">-</span> <span class="n">time_start</span>
<span class="k">end</span>
<span class="nb">p</span> <span class="n">times</span>
</code></pre>
Ruby master - Bug #19413 (Open): Can't move object when 2 ivars refer to same object
https://redmine.ruby-lang.org/issues/19413
2023-02-04T22:15:59Z
luke-gru (Luke Gruber)
luke.gru@gmail.com
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">A</span>
<span class="k">def</span> <span class="nf">initialize</span>
<span class="vi">@a</span> <span class="o">=</span> <span class="no">Object</span><span class="p">.</span><span class="nf">new</span>
<span class="vi">@b</span> <span class="o">=</span> <span class="vi">@a</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">r</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span> <span class="o">|</span><span class="n">err</span><span class="o">|</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">receive</span>
<span class="nb">p</span> <span class="n">obj</span>
<span class="k">end</span>
<span class="n">r</span><span class="p">.</span><span class="nf">send</span><span class="p">(</span><span class="no">A</span><span class="p">.</span><span class="nf">new</span><span class="p">,</span> <span class="ss">move: </span><span class="kp">true</span><span class="p">)</span> <span class="c1"># Allocator undefined for Ractor::MovedObject</span>
<span class="n">r</span><span class="p">.</span><span class="nf">take</span>
</code></pre>
<p>To fix it we could have a hash of old to new objects during traversal/replacement and use the same new object over again if necessary.</p>
Ruby master - Bug #19384 (Open): ASCII 128..154 characters in IO.popen or %x output do not reflec...
https://redmine.ruby-lang.org/issues/19384
2023-01-26T21:17:30Z
stringsn88keys (Thomas Powell)
<p>Operating systems: Windows 10 and Windows Server 2022 (likely all recent versions of Windows)<br>
Ruby: confirmed on 2.7.7 through 3.1.3</p>
<p>On macOS and Linux I can create a file named "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ" and then do a directory listing via IO.popen or %x and find the file name in the output string.</p>
<p>In Windows, while the encoding is reported as #<a href="Encoding:UTF-8" class="external">Encoding:UTF-8</a>, I have to .force_encoding on the output to be able to find the string in the output:</p>
<a name="xdir-tmp"></a>
<h2 >%x|dir tmp|<a href="#xdir-tmp" class="wiki-anchor">¶</a></h2>
<p>output encoding: #<a href="Encoding:UTF-8" class="external">Encoding:UTF-8</a><br>
Output can be made to match by forcing the following encodings:<br>
IBM437<br>
CP850<br>
IBM865</p>
<a name="IOpopendir-tmpread"></a>
<h2 >IO.popen(dir tmp).read<a href="#IOpopendir-tmpread" class="wiki-anchor">¶</a></h2>
<p>output encoding: #<a href="Encoding:UTF-8" class="external">Encoding:UTF-8</a><br>
Output can be made to match by forcing the following encodings:<br>
IBM437<br>
CP850<br>
IBM865</p>
<p>But on macOS or Linux:<br>
❯ ruby directory_test.rb</p>
<a name="xls-tmp"></a>
<h2 >%x|ls tmp|<a href="#xls-tmp" class="wiki-anchor">¶</a></h2>
<p>output encoding: #<a href="Encoding:UTF-8" class="external">Encoding:UTF-8</a><br>
output matches without forcing encoding<br>
Output can be made to match by forcing the following encodings:<br>
UTF-8<br>
UTF8-MAC<br>
CESU-8<br>
UTF8-DoCoMo<br>
UTF8-KDDI<br>
UTF8-SoftBank</p>
<a name="IOpopenls-tmpread"></a>
<h2 >IO.popen(ls tmp).read<a href="#IOpopenls-tmpread" class="wiki-anchor">¶</a></h2>
<p>output encoding: #<a href="Encoding:UTF-8" class="external">Encoding:UTF-8</a><br>
output matches without forcing encoding<br>
Output can be made to match by forcing the following encodings:<br>
UTF-8<br>
UTF8-MAC<br>
CESU-8<br>
UTF8-DoCoMo<br>
UTF8-KDDI<br>
UTF8-SoftBank</p>
<p>Note:<br>
The example is contrived because the actual IO.popen output is from a customer system with umlaut characters. However, I have found creating a filename with these characters will adequately reproduce the issue.<br>
Also, I'm only using ASCII/IBM437 as an encoding to create a contiguous set of characters, "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ" as a contrived example.</p>
Ruby master - Bug #19313 (Open): Leaked file descriptors while running test-all
https://redmine.ruby-lang.org/issues/19313
2023-01-05T18:55:37Z
Eregon (Benoit Daloze)
<pre><code>$ make test-all TESTOPTS="-j8"
Run options:
--seed=25187
"--ruby=./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems"
--excludes-dir=./test/excludes
--name=!/memory_leak/
-j8
# Running tests:
Skipping Gem::PackageTask tests. rake not found.s_test_2 227226=test_mjit 227227=test_signal 227228=test_gem_comman
Leaked file descriptor: TestFileUtils#test_chown_error: 11 #<File::Stat dev=0xfd00, ino=16777261, mode=0100664, nlink=1, uid=0, gid=0, rdev=0x0, size=9253600, blksize=4096, blocks=18080, atime=2023-01-05 18:16:02.96509764 +0100, mtime=2022-02-23 13:12:06.095215536 +0100, ctime=2022-02-23 13:12:06.095215536 +0100>
Leaked file descriptor: TestFileUtils#test_chown_error: 12 #<File::Stat dev=0xfd00, ino=16777274, mode=0100664, nlink=1, uid=0, gid=0, rdev=0x0, size=6940392, blksize=4096, blocks=13560, atime=2023-01-05 18:16:04.425114636 +0100, mtime=2022-02-23 13:13:58.955685143 +0100, ctime=2022-02-23 13:13:58.955685143 +0100>
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 227230 eregon 11r REG 253,0 9253600 16777261 /var/lib/sss/mc/passwd
ruby 227230 eregon 12r REG 253,0 6940392 16777274 /var/lib/sss/mc/group
Leaked file descriptor: Fiddle::TestFunc#test_qsort1: 12 #<File::Stat dev=0x1, ino=9463, mode=0100777, nlink=0, uid=1000, gid=1000, rdev=0x0, size=4096, blksize=4096, blocks=8, atime=2023-01-05 19:50:42.892803183 +0100, mtime=2023-01-05 19:50:42.892803183 +0100, ctime=2023-01-05 19:50:42.892803183 +0100>
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 227225 eregon 12u REG 0,1 4096 9463 /memfd:libffi (deleted)
Leaked file descriptor: TestFileExhaustive#test_expand_path_home_dir_string: 9 #<File::Stat dev=0xfd00, ino=16777261, mode=0100664, nlink=1, uid=0, gid=0, rdev=0x0, size=9253600, blksize=4096, blocks=18080, atime=2023-01-05 18:16:02.96509764 +0100, mtime=2022-02-23 13:12:06.095215536 +0100, ctime=2022-02-23 13:12:06.095215536 +0100>
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 227226 eregon 9r REG 253,0 9253600 16777261 /var/lib/sss/mc/passwd
Leaked file descriptor: TestDir#test_home: 12 #<File::Stat dev=0xfd00, ino=16777261, mode=0100664, nlink=1, uid=0, gid=0, rdev=0x0, size=9253600, blksize=4096, blocks=18080, atime=2023-01-05 18:16:02.96509764 +0100, mtime=2022-02-23 13:12:06.095215536 +0100, ctime=2022-02-23 13:12:06.095215536 +0100>
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 227224 eregon 12r REG 253,0 9253600 16777261 /var/lib/sss/mc/passwd
Leaked file descriptor: Fiddle::TestFunction#test_argument_count: 13 #<File::Stat dev=0x1, ino=13688, mode=0100777, nlink=0, uid=1000, gid=1000, rdev=0x0, size=4096, blksize=4096, blocks=8, atime=2023-01-05 19:50:49.882901778 +0100, mtime=2023-01-05 19:50:49.882901778 +0100, ctime=2023-01-05 19:50:49.882901778 +0100>
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 227230 eregon 13u REG 0,1 4096 13688 /memfd:libffi (deleted)
Leaked file descriptor: TestProcess#test_uid_from_name: 12 #<File::Stat dev=0xfd00, ino=16777261, mode=0100664, nlink=1, uid=0, gid=0, rdev=0x0, size=9253600, blksize=4096, blocks=18080, atime=2023-01-05 18:16:02.96509764 +0100, mtime=2022-02-23 13:12:06.095215536 +0100, ctime=2022-02-23 13:12:06.095215536 +0100>
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 227229 eregon 12r REG 253,0 9253600 16777261 /var/lib/sss/mc/passwd
Retrying...
Finished tests in 64.982686s, 360.4191 tests/s, 86076.9433 assertions/s.
23421 tests, 5593511 assertions, 0 failures, 0 errors, 156 skips
ruby -v: ruby 3.3.0dev (2023-01-05T18:06:01Z master 54950a78e3) [x86_64-linux]
</code></pre>
<p>On Fedora 37.</p>
<p>If this does not happen on Debian-based OS or macOS I guess it could be a glibc or maybe even a OS bug.</p>
<p>This doesn't cause test failures but makes the output quite noisy.<br>
I have a few leaked descriptors for a while on Fedora when running test-all, also on previous Fedora versions.</p>
Ruby master - Bug #19297 (Open): Don't download content from internet to execute Ruby test suite
https://redmine.ruby-lang.org/issues/19297
2023-01-02T13:41:57Z
vo.x (Vit Ondruch)
v.ondruch@tiscali.cz
<p>Trying to build Ruby 3.2.0 for Fedora and execute its test suite via <code>make check</code> as we always did <a href="https://src.fedoraproject.org/rpms/ruby/blob/631163e3b8a51ed610528181aabe0da008049bb6/f/ruby.spec#_1008" class="external">1</a>, the test suite suddenly fails (while it was working with <a class="changeset" title="darwin: resolve rb symbols from ext by `-flat_namespace` to see libruby transitively This repair..." href="https://redmine.ruby-lang.org/projects/ruby-master/repository/git/revisions/c5eefb7f37db2865891298dd1a1e60dff09560ad">git|c5eefb7f37</a>):</p>
<pre><code>... snip ...
C-API Util function ruby_strtod
- converts a string to a double and returns the remaining string
- returns 0 and the full string if there's no numerical value
Finished in 45.737677 seconds
3827 files, 31635 examples, 177877 expectations, 0 failures, 0 errors, 0 tagged
./miniruby -I/builddir/build/BUILD/ruby-3.2.0/lib -I. -I.ext/common /builddir/build/BUILD/ruby-3.2.0/tool/runruby.rb --extout=.ext -- --disable-gems -C "/builddir/build/BUILD/ruby-3.2.0" bin/gem install --no-document \
--install-dir .bundle --conservative "bundler" "rake" "rspec:~> 3" #"ruby-prof"
ERROR: Could not find a valid gem 'bundler' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - SocketError: Failed to open TCP connection to rubygems.org:443 (getaddrinfo: Temporary failure in name resolution) (https://rubygems.org/specs.4.8.gz)
ERROR: Could not find a valid gem 'rspec' (~> 3), here is why:
Unable to download data from https://rubygems.org/ - SocketError: Failed to open TCP connection to rubygems.org:443 (getaddrinfo: Temporary failure in name resolution) (https://rubygems.org/specs.4.8.gz)
make: Leaving directory '/builddir/build/BUILD/ruby-3.2.0/redhat-linux-build'
make: *** [uncommon.mk:1464: yes-test-syntax-suggest-prepare] Error 2
</code></pre>
<p>This is obviously due to the test suite trying to download <code>rspec</code> from the internet, while Fedora builders does not have internet access (and won't ever have for security reasons). If I am not mistaken, this is caused by <a class="changeset" title="Test syntax_suggest by `make check`" href="https://redmine.ruby-lang.org/projects/ruby-master/repository/git/revisions/cae53842735237ccf71a13873fd0d1ae7f165582">git|cae53842735237ccf71a13873fd0d1ae7f165582</a>. Now</p>
<ol>
<li>Can this be fixed?</li>
<li>Can the tarball be always self contained?</li>
</ol>
Ruby master - Bug #19268 (Open): Mingw64 Build Failure
https://redmine.ruby-lang.org/issues/19268
2022-12-27T09:42:22Z
cfis (Charlie Savage)
<p>For both Ruby 3.1.3 and Ruby 3.2.0, building on msys2/ucrt64 fails:</p>
<pre><code class="c syntaxhl" data-language="c"><span class="n">linking</span> <span class="n">miniruby</span><span class="p">.</span><span class="n">exe</span>
<span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">sh</span><span class="o">:</span> <span class="o">-</span><span class="n">c</span><span class="o">:</span> <span class="n">line</span> <span class="mi">1</span><span class="o">:</span> <span class="n">syntax</span> <span class="n">error</span> <span class="n">near</span> <span class="n">unexpected</span> <span class="n">token</span> <span class="err">`</span><span class="p">(</span><span class="err">'</span>
<span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">sh</span><span class="o">:</span> <span class="o">-</span><span class="n">c</span><span class="o">:</span> <span class="n">line</span> <span class="mi">1</span><span class="o">:</span> <span class="err">`</span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">ruby</span><span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">ruby</span> <span class="o">--</span><span class="n">disable</span><span class="o">=</span><span class="n">gems</span> <span class="o">-</span><span class="n">n</span> <span class="o">-</span><span class="n">e</span> <span class="n">BEGIN</span><span class="p">{</span><span class="n">version</span><span class="o">=</span><span class="n">ARGV</span><span class="p">.</span><span class="n">shift</span><span class="p">;</span><span class="n">mis</span><span class="o">=</span><span class="n">ARGV</span><span class="p">.</span><span class="n">dup</span><span class="p">}</span> <span class="o">-</span><span class="n">e</span> <span class="n">END</span><span class="p">{</span><span class="n">abort</span> <span class="s">"UNICODE version mismatch: #{mis}"</span> <span class="n">unless</span> <span class="n">mis</span><span class="p">.</span><span class="n">empty</span><span class="o">?</span><span class="p">}</span> <span class="o">-</span><span class="n">e</span> <span class="p">(</span><span class="n">mis</span><span class="p">.</span><span class="n">delete</span><span class="p">(</span><span class="n">ARGF</span><span class="p">.</span><span class="n">path</span><span class="p">);</span> <span class="n">ARGF</span><span class="p">.</span><span class="n">close</span><span class="p">)</span> <span class="k">if</span> <span class="o">/</span><span class="n">ONIG_UNICODE_VERSION_STRING</span> <span class="o">+</span><span class="s">"#{Regexp.quote(version)}"</span><span class="o">/</span><span class="n">o</span> <span class="mi">15</span><span class="p">.</span><span class="mi">0</span><span class="p">.</span><span class="mi">0</span> <span class="p">.</span><span class="o">/</span><span class="n">enc</span><span class="o">/</span><span class="n">unicode</span><span class="o">/</span><span class="mi">15</span><span class="p">.</span><span class="mi">0</span><span class="p">.</span><span class="mi">0</span><span class="o">/</span><span class="n">casefold</span><span class="p">.</span><span class="n">h</span> <span class="p">.</span><span class="o">/</span><span class="n">enc</span><span class="o">/</span><span class="n">unicode</span><span class="o">/</span><span class="mi">15</span><span class="p">.</span><span class="mi">0</span><span class="p">.</span><span class="mi">0</span><span class="o">/</span><span class="n">name2ctype</span><span class="p">.</span><span class="n">h</span><span class="err">'</span>
<span class="n">make</span><span class="o">:</span> <span class="o">***</span> <span class="p">[</span><span class="n">uncommon</span><span class="p">.</span><span class="n">mk</span><span class="o">:</span><span class="mi">878</span><span class="o">:</span> <span class="p">.</span><span class="n">rbconfig</span><span class="p">.</span><span class="n">time</span><span class="p">]</span> <span class="n">Error</span> <span class="mi">2</span>
</code></pre>
<p>The fix that works for me is changing:</p>
<pre><code class="c syntaxhl" data-language="c"> <span class="o">-</span><span class="n">e</span> <span class="err">'</span><span class="p">(</span><span class="n">mis</span><span class="p">.</span><span class="n">delete</span><span class="p">(</span><span class="n">ARGF</span><span class="p">.</span><span class="n">path</span><span class="p">);</span> <span class="n">ARGF</span><span class="p">.</span><span class="n">close</span><span class="p">)</span> <span class="k">if</span> <span class="o">/</span><span class="n">ONIG_UNICODE_VERSION_STRING</span> <span class="o">+</span><span class="s">"#{Regexp.quote(version)}"</span><span class="o">/</span><span class="n">o</span><span class="err">'</span> \
</code></pre>
<p>To</p>
<pre><code class="c syntaxhl" data-language="c"> <span class="o">-</span><span class="n">e</span> <span class="s">"(mis.delete(ARGF.path); ARGF.close) if /ONIG_UNICODE_VERSION_STRING +</span><span class="se">\"</span><span class="s">#{Regexp.quote(version)}</span><span class="se">\"</span><span class="s">/o"</span> \
</code></pre>
<pre><code></code></pre>
Ruby master - Bug #19251 (Open): Limit amount of test failures due to updates of tzdata
https://redmine.ruby-lang.org/issues/19251
2022-12-22T08:19:02Z
vo.x (Vit Ondruch)
v.ondruch@tiscali.cz
<p>It seems that recently, Ruby test suite is broken ~ twice a year due to changes in tzdata. I am not sure how detailed the test suite needs to be to have the right amount of test coverage, but it would be nice if Ruby developers had more control above this changes then this changes being forced upon us via OS update. This is followup to <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: Ruby 3.1.3 testsuite fails after timezone 2022g update is applied (Closed)" href="https://redmine.ruby-lang.org/issues/19187">#19187</a>.</p>
<p>BTW with my Fedora / RHEL maintainer hat on, this is a bit annoying, because:</p>
<ol>
<li>It tends to hide other issues</li>
<li>In Fedora, it might block other development</li>
<li>Especially in RHEL, where there is not so big churn, it is unpleasant to start work on fixing CVE just to discover one needs to fix the tzdata test failures first</li>
</ol>
Ruby master - Bug #19231 (Open): Integer#step and Float::INFINITY - inconsistent behaviour when c...
https://redmine.ruby-lang.org/issues/19231
2022-12-13T15:17:41Z
andrykonchin (Andrew Konchin)
<p>The initial issue was reported here <a href="https://github.com/oracle/truffleruby/issues/2797" class="external">https://github.com/oracle/truffleruby/issues/2797</a>.</p>
<p><code>0.step(Float::INFINITY, 10)</code> returns:</p>
<ul>
<li>
<code>Integers</code> when called with a block</li>
<li>
<code>Floats</code> when called without a block</li>
</ul>
<p>I would expect <code>Floats</code> to be returned in both cases.</p>
<p>Examples:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="mi">0</span><span class="p">.</span><span class="nf">step</span><span class="p">(</span><span class="no">Float</span><span class="o">::</span><span class="no">INFINITY</span><span class="p">,</span> <span class="mi">10</span><span class="p">).</span><span class="nf">take</span><span class="p">(</span><span class="mi">1</span><span class="p">).</span><span class="nf">map</span><span class="p">(</span><span class="o">&</span><span class="ss">:class</span><span class="p">)</span>
<span class="o">=></span> <span class="p">[</span><span class="no">Float</span><span class="p">]</span>
</code></pre>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="mi">0</span><span class="p">.</span><span class="nf">step</span><span class="p">(</span><span class="no">Float</span><span class="o">::</span><span class="no">INFINITY</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">offset</span><span class="o">|</span> <span class="nb">p</span> <span class="n">offset</span><span class="p">.</span><span class="nf">class</span><span class="p">;</span> <span class="k">break</span> <span class="p">}</span>
<span class="c1"># Integer</span>
</code></pre>
<p>When <code>to</code> argument is a finite <code>Float</code> value then calling with a block returns <code>Floats</code> as well:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="mi">0</span><span class="p">.</span><span class="nf">step</span><span class="p">(</span><span class="mf">100.0</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">offset</span><span class="o">|</span> <span class="nb">p</span> <span class="n">offset</span><span class="p">.</span><span class="nf">class</span><span class="p">;</span> <span class="k">break</span> <span class="p">}</span>
<span class="c1"># Float</span>
</code></pre>
<p>Wondering whether it's intentional behaviour.</p>
<p>I've found a related issue <a href="https://bugs.ruby-lang.org/issues/15518" class="external">https://bugs.ruby-lang.org/issues/15518</a>.</p>
Ruby master - Bug #19192 (Open): IO has third data mode, document is incomplete.
https://redmine.ruby-lang.org/issues/19192
2022-12-09T16:02:34Z
YO4 (Yoshinao Muramatsu)
<p>The documentation on the mode parameter of File.open is incomplete, I would like to clarify IO's data mode actual behavior here.</p>
<p>document says</p>
<pre><code>To specify whether data is to be treated as text or as binary data, either of the following may be suffixed to any of the string read/write modes above:
't': Text data; sets the default external encoding to Encoding::UTF_8; on Windows, enables conversion between EOL and CRLF and enables interpreting 0x1A as an end-of-file marker.
'b': Binary data; sets the default external encoding to Encoding::ASCII_8BIT; on Windows, suppresses conversion between EOL and CRLF and disables interpreting 0x1A as an end-of-file marker.
If neither is given, the stream defaults to text data.
</code></pre>
<p>But actually it's more complicated than that.</p>
<p>There is three Data Mode</p>
<ul>
<li>text mode. Can convert encoding and newline.</li>
<li>binary mode. Cannot convert encoding nor newline. Encoding is treated as Encoding::ASCII_8BIT.</li>
<li>third mode: DOS TEXT mode. That enables conversion between EOL and CRLF and enables interpreting 0x1A as an end-of-file marker.</li>
</ul>
<p>On Windows platform<br>
't' textmode with universal newline conversion.<br>
'b' binary mode.<br>
If neither is given, DOS TEXT mode.</p>
<p>On other platforms<br>
't' textmode with universal newline conversion.<br>
'b' binary mode.<br>
If neither is given, textmode without newline conversion.</p>
<p>On Windows, there are some special cases.<br>
If Encoding conversion is specified, DOS TEXT mode is ignored and universal newline conversion applied.<br>
If access mode is "a+", last (only one) EOF charactor is overwritten when DOS TEXT mode.<br>
There are more parameter combinations, see <a href="https://gist.github.com/YO4/262e9bd5e44a37a7a2fa9118e271b30b" class="external">https://gist.github.com/YO4/262e9bd5e44a37a7a2fa9118e271b30b</a><br>
Is this all? I have not fully investigated.</p>
<p>Since the topic of data mode spanned access mode and encoding conversion, I don't think my English skills will allow me to summarize this into rdoc without breaking something...</p>
Ruby master - Bug #19165 (Open): Method (with no param) delegation with *, **, and ... is slow
https://redmine.ruby-lang.org/issues/19165
2022-12-01T08:49:16Z
matsuda (Akira Matsuda)
ronnie@dio.jp
<p>I found that method delegation via Forwardable is much slower than normal method call when delegating a method that does not take parameters.</p>
<p>Here's a benchmark that explains what I mean.</p>
<pre><code>require 'forwardable'
require 'pp'
require 'benchmark/ips'
class Obj
extend Forwardable
attr_accessor :other
def initialize
@other = Other.new
end
def foo_without_splat
@other.foo
end
def foo_with_splat(*)
@other.foo(*)
end
def foo_with_splat_with_name(*args)
@other.foo(*args)
end
def foo_with_splat_and_double_splat(*, **)
@other.foo(*, **)
end
def foo_with_triple_dots(...)
@other.foo(...)
end
delegate :foo => :@other
end
class Other
def foo() end
end
o = Obj.new
Benchmark.ips do |x|
x.report 'simple call' do
o.other.foo
end
x.report 'delegate without splat' do
o.foo_without_splat
end
x.report 'delegate with splat' do
o.foo_with_splat
end
x.report 'delegate with splat with name' do
o.foo_with_splat_with_name
end
x.report 'delegate with splat and double splat' do
o.foo_with_splat_and_double_splat
end
x.report 'delegate with triple dots' do
o.foo_with_triple_dots
end
x.report 'delegate via forwardable' do
o.foo
end
end
(result)
simple call 38.918M (± 0.9%) i/s - 194.884M
delegate without splat
31.933M (± 1.6%) i/s - 159.611M
delegate with splat 10.269M (± 1.6%) i/s - 51.631M
delegate with splat with name
9.888M (± 1.0%) i/s - 49.588M
delegate with splat and double splat
4.117M (± 0.9%) i/s - 20.696M
delegate with triple dots
4.169M (± 0.9%) i/s - 20.857M
delegate via forwardable
9.204M (± 2.1%) i/s - 46.295M
</code></pre>
<p>It shows that Method delegation with a splat is 3-4 times slower (regardless of whether the parameter is named or not), and delegation with a triple-dot literal is 9-10 times slower than a method delegation without an argument.<br>
This may be because calling a method taking a splat always assigns an Array object even when no actual argument was given, and calling a method taking triple-dots assigns five Array objects and two Hash objects (this is equivalent to <code>*, **</code>).</p>
<p>Are there any chance reducing these object assignments and making them faster? My concern is that the Rails framework heavily uses this kind of method delegations, and presumably it causes unignorable performance overhead.</p>
Ruby master - Bug #19048 (Open): Install of Ruby 3.1.x fails on Ubuntu 20.04 running on WSL
https://redmine.ruby-lang.org/issues/19048
2022-10-11T13:39:55Z
NickGrahamDfE (Nick Graham)
Ruby master - Bug #19044 (Open): Attempting to compile a static ruby 3.1 fails with MinGW
https://redmine.ruby-lang.org/issues/19044
2022-10-09T12:24:03Z
maxirmx (Maxim Samsonov)
<ol>
<li>
<p>I use the code from <a href="https://github.com/ruby/ruby/tree/ruby_3_1" class="external">https://github.com/ruby/ruby/tree/ruby_3_1</a> and GHA workflow at <a href="https://github.com/ruby/ruby/blob/ruby_3_1/.github/workflows/mingw.yml" class="external">https://github.com/ruby/ruby/blob/ruby_3_1/.github/workflows/mingw.yml</a> as a baseline</p>
</li>
<li>
<p>I alter configure command in the workflow from</p>
</li>
</ol>
<pre><code>- name: configure
run: >
../src/configure --disable-install-doc --prefix=/.
--build=$CHOST --host=$CHOST --target=$CHOST
</code></pre>
<pre><code> to
</code></pre>
<pre><code>- name: configure
run: >
../src/configure --disable-install-doc --with-static-linked-ext --disable-shared --without-gmp -- prefix=/.
--build=$CHOST --host=$CHOST --target=$CHOST
</code></pre>
<p>and uncomment <code>option nodynamic</code> in <code>ext/Setup</code></p>
<ol start="3">
<li>The first failure I observe is:</li>
</ol>
<pre><code>C:\msys64\ucrt64\bin\dllwrap.exe: WARNING: C:\msys64\ucrt64\bin\dllwrap.exe is deprecated, use gcc -shared or ld -shared instead
C:\msys64\ucrt64\bin\dllwrap.exe: no export definition file provided.
Creating one, but that may not be what you want
x86_64-w64-mingw32-cc: error: unrecognized command-line option '-mno-cygwin'; did you mean '-mno-clwb'?
C:\msys64\ucrt64\bin\dllwrap.exe: x86_64-w64-mingw32-cc exited with status 1
make: *** [GNUmakefile:73: ruby.exp] Error 1
</code></pre>
<pre><code> In order to resolve it I comment out ``` DLLWRAP += -mno-cygwin``` in ```cygwin/GNUmakefile.in```
</code></pre>
<ol start="4">
<li>Then I get the second failure:</li>
</ol>
<pre><code>creating ruby.exp
C:\msys64\ucrt64\bin\dllwrap.exe: WARNING: C:\msys64\ucrt64\bin\dllwrap.exe is deprecated, use gcc -shared or ld -shared instead
C:\msys64\ucrt64\bin\dllwrap.exe: no export definition file provided.
Creating one, but that may not be what you want
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: warning: cannot find entry symbol _DllMainCRTStartup@12; defaulting to 0000000063981000
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: warning: cannot find entry symbol _DllMainCRTStartup@12; defaulting to 0000000063981000
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: warning: cannot find entry symbol _DllMainCRTStartup@12; defaulting to 0000000063981000
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ruby.o:ruby.c:(.text+0x54f5): undefined reference to `Init_enc'
collect2.exe: error: ld returned 1 exit status
make: *** [GNUmakefile:74: ruby.exp] Error 1
</code></pre>
<p>I believe that when <code>GNUMakefile</code> is generated <code>disable-shared</code> flag is ignored silently</p>
Ruby master - Bug #19039 (Open): Closing an IO being select'ed in another thread does not resume ...
https://redmine.ruby-lang.org/issues/19039
2022-10-06T05:30:13Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<p>Is this intentional?</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">r1</span><span class="p">,</span> <span class="n">w1</span> <span class="o">=</span> <span class="no">IO</span><span class="p">.</span><span class="nf">pipe</span>
<span class="n">r2</span><span class="p">,</span> <span class="n">w2</span> <span class="o">=</span> <span class="no">IO</span><span class="p">.</span><span class="nf">pipe</span>
<span class="no">Thread</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="nb">select</span><span class="p">([</span><span class="n">r1</span><span class="p">,</span> <span class="n">r2</span><span class="p">])</span>
<span class="nb">p</span> <span class="ss">:ok</span>
<span class="k">end</span>
<span class="nb">sleep</span> <span class="mi">1</span>
<span class="nb">p</span> <span class="n">r1</span><span class="p">.</span><span class="nf">close</span>
<span class="c1"># expected: closing r1 resumes select([r1, r2]) in the thread</span>
<span class="c1"># actual: select([r1, r2]) continues to wait</span>
<span class="nb">sleep</span> <span class="mi">1</span>
<span class="n">w2</span> <span class="o"><<</span> <span class="s2">"foo"</span>
<span class="c1"># Making r2 readable resumes select([r1, r2])</span>
<span class="c1"># And it raises an exception: closed stream (IOError)</span>
<span class="nb">sleep</span> <span class="mi">1</span>
</code></pre>
<p>Incidentally, IO#read is resumed by closing the IO.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">r1</span><span class="p">,</span> <span class="n">w1</span> <span class="o">=</span> <span class="no">IO</span><span class="p">.</span><span class="nf">pipe</span>
<span class="no">Thread</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="n">r1</span><span class="p">.</span><span class="nf">read</span>
<span class="nb">p</span> <span class="ss">:ok</span>
<span class="k">end</span>
<span class="nb">sleep</span> <span class="mi">1</span>
<span class="nb">p</span> <span class="n">r1</span><span class="p">.</span><span class="nf">close</span>
<span class="c1"># Closing r1 resumes r1.read in the thread</span>
<span class="c1"># And it raises: stream closed in another thread (IOError)</span>
<span class="nb">sleep</span> <span class="mi">1</span>
</code></pre>
Ruby master - Bug #19017 (Open): Net::HTTP may block when attempting to reuse a persistent connec...
https://redmine.ruby-lang.org/issues/19017
2022-09-22T20:56:35Z
joshc (Josh C)
josh.nw@gmail.com
<p>Ruby's Net::HTTP code performs a blocking <code>Net::BufferedIO#eof?</code> check when attempting to reuse a persistent HTTP connection. See <a href="https://github.com/ruby/ruby/blob/6b099328af2ae2d04cbfd06fedc36a19cdecd30d/lib/net/http.rb#L1573" class="external">https://github.com/ruby/ruby/blob/6b099328af2ae2d04cbfd06fedc36a19cdecd30d/lib/net/http.rb#L1573</a>. The bug is the check can hang for up to the HTTP <code>read_timeout</code>, which is 60 seconds by default.</p>
<p>The code calls <code>TCPSocket#wait_readable(0)</code> to see if the socket is readable before calling the blocking <code>eof?</code> method. However, it's possible for the socket to be readable with SSL Handshake records and no Application Data. So the call to <code>eof?</code> will process the SSL Handshake records, but hang since no Application Data is available.</p>
<p>The issue can be triggered if a TLS 1.3 server sends a <code>NewSessionTicket</code> sometime after Application Data is written. The attached client and server code demonstrate the problem. Note it's important that the client and server be on separate hosts otherwise <code>eof?</code> will always return immediately.</p>
<p>On the server, copy <code>Server.java</code> and <code>certs.p12</code> into a directory, install JDK 17, compile the server and run it:</p>
<pre><code>$ openssl pkcs12 -info -in certs.p12 -noout -passin pass:password
MAC: sha1, Iteration 2048
MAC length: 20, salt length: 8
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
$ sudo apt install -y openjdk-17-jdk openjdk-17-jre
$ javac Server.java
$ java -Djavax.net.debug=ssl,verbose Server
Loaded pkcs12
</code></pre>
<p>On the client, copy <code>http.rb</code> and <code>ca.pem</code> into a directory, add the IP address for the server as <code>pluto</code> to <code>/etc/hosts</code>:</p>
<pre><code>$ file ca.pem
$ sudo vi /etc/hosts
...
192.168.0.10 pluto
...
$ ruby --version
ruby 2.7.6p219 (2022-04-12 revision c9c2245c0a) [x86_64-linux]
$ openssl version
OpenSSL 1.1.1f 31 Mar 2020
</code></pre>
<p>Run the client to make the first request:</p>
<pre><code>$ ruby http.rb
opening connection to pluto:8888...
opened
starting SSL for pluto:8888...
</code></pre>
<p>The server will handle request_1 and trigger a new session ticket:</p>
<pre><code>javax.net.ssl|DEBUG|10|main|2022-09-22 18:18:23.269 UTC|SSLCipher.java:466|jdk.tls.keyLimits: entry = AES/GCM/NoPadding KeyUpdate 2^37. AES/GCM/NOPADDING:KEYUPDATE = 137438953472
Connected to 37532
Handling request_0
... snip ...
javax.net.ssl|DEBUG|10|main|2022-09-22 18:18:25.310 UTC|SSLCipher.java:2024|KeyLimit write side: algorithm = AES/GCM/NOPADDING:KEYUPDATE
countdown value = 137438953472
javax.net.ssl|DEBUG|10|main|2022-09-22 18:18:25.335 UTC|SSLCipher.java:1870|KeyLimit read side: algorithm = AES/GCM/NOPADDING:KEYUPDATE
countdown value = 137438953472
read body
updated session data
javax.net.ssl|ALL|10|main|2022-09-22 18:18:25.343 UTC|SSLSocketImpl.java:1564|trigger new session ticket
wrote response
Handling request_1
</code></pre>
<p>The client will hang when trying to reuse the persistent connection:</p>
<pre><code>OSSL_DEBUG: SSL SESSION new callback added [ossl_ssl.c:963]
SSL established, protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384
<- "POST / HTTP/1.1\r\nAccept-Encoding: identity\r\nConnection: keep-alive\r\nContent-Type: text/plain\r\nAccept: */*\r\nUser-Agent: Ruby\r\nHost: pluto:8888\r\nContent-Length: 0\r\n\r\n"
<- ""
OSSL_DEBUG: SSL SESSION new callback entered [ossl_ssl.c:454]
-> "HTTP/1.1 200 OK\r\n"
-> "Content-Length: 0\r\n"
-> "\r\n"
reading 0 bytes...
-> ""
read 0 bytes
Conn keep-alive
OSSL_DEBUG: SSL SESSION new callback entered [ossl_ssl.c:454]
</code></pre>
<p>Pressing Ctrl-C shows the backtrace:</p>
<pre><code>^CTraceback (most recent call last):
11: from http.rb:10:in `<main>'
10: from /home/josh/.rbenv/versions/2.7.6/lib/ruby/2.7.0/net/http.rb:933:in `start'
9: from http.rb:17:in `block in <main>'
8: from /home/josh/.rbenv/versions/2.7.6/lib/ruby/2.7.0/net/http.rb:1294:in `post'
7: from /home/josh/.rbenv/versions/2.7.6/lib/ruby/2.7.0/net/http.rb:1506:in `send_entity'
6: from /home/josh/.rbenv/versions/2.7.6/lib/ruby/2.7.0/net/http.rb:1492:in `request'
5: from /home/josh/.rbenv/versions/2.7.6/lib/ruby/2.7.0/net/http.rb:1518:in `transport_request'
4: from /home/josh/.rbenv/versions/2.7.6/lib/ruby/2.7.0/net/http.rb:1573:in `begin_transport'
3: from /home/josh/.rbenv/versions/2.7.6/lib/ruby/2.7.0/net/protocol.rb:134:in `eof?'
2: from /home/josh/.rbenv/versions/2.7.6/lib/ruby/2.7.0/openssl/buffering.rb:300:in `eof?'
1: from /home/josh/.rbenv/versions/2.7.6/lib/ruby/2.7.0/openssl/buffering.rb:57:in `fill_rbuff'
/home/josh/.rbenv/versions/2.7.6/lib/ruby/2.7.0/openssl/buffering.rb:57:in `sysread': Interrupt
</code></pre>
<p>I get the same behavior with latest ruby too:</p>
<pre><code>$ ruby --version
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
</code></pre>
<p>Changing Net::HTTP to the following:</p>
<pre><code>elsif @socket.io.read_nonblock(0, exception: false).nil?
</code></pre>
<p>Resolves the issue:</p>
<pre><code>$ ruby http.rb
opening connection to pluto:8888...
opened
starting SSL for pluto:8888...
OSSL_DEBUG: SSL SESSION new callback added [ossl_ssl.c:963]
SSL established, protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384
<- "POST / HTTP/1.1\r\nAccept-Encoding: identity\r\nConnection: keep-alive\r\nContent-Type: text/plain\r\nAccept: */*\r\nUser-Agent: Ruby\r\nHost: pluto:8888\r\nContent-Length: 0\r\n\r\n"
<- ""
OSSL_DEBUG: SSL SESSION new callback entered [ossl_ssl.c:454]
-> "HTTP/1.1 200 OK\r\n"
-> "Content-Length: 0\r\n"
-> "\r\n"
reading 0 bytes...
-> ""
read 0 bytes
Conn keep-alive
<- "POST / HTTP/1.1\r\nAccept-Encoding: identity\r\nConnection: keep-alive\r\nContent-Type: text/plain\r\nAccept: */*\r\nUser-Agent: Ruby\r\nHost: pluto:8888\r\nContent-Length: 0\r\n\r\n"
<- ""
OSSL_DEBUG: SSL SESSION new callback entered [ossl_ssl.c:454]
-> "HTTP/1.1 200 OK\r\n"
-> "Content-Length: 0\r\n"
-> "\r\n"
reading 0 bytes...
-> ""
read 0 bytes
Conn keep-alive
</code></pre>
<p>However, based on <a href="https://github.com/ruby/ruby/pull/1089#issuecomment-159878003" class="external">https://github.com/ruby/ruby/pull/1089#issuecomment-159878003</a> that change may not be correct. Or it could be that Ruby on Windows doesn't have this issue anymore.</p>
Ruby master - Bug #18995 (Open): IO#set_encoding sometimes set an IO's internal encoding to the d...
https://redmine.ruby-lang.org/issues/18995
2022-09-04T23:06:54Z
javanthropus (Jeremy Bopp)
jeremy@bopp.net
<p>This script demonstrates the behavior:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">show</span><span class="p">(</span><span class="n">io</span><span class="p">)</span>
<span class="nb">printf</span><span class="p">(</span>
<span class="s2">"external encoding: %-25p internal encoding: %-25p</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span>
<span class="n">io</span><span class="p">.</span><span class="nf">external_encoding</span><span class="p">,</span>
<span class="n">io</span><span class="p">.</span><span class="nf">internal_encoding</span>
<span class="p">)</span>
<span class="k">end</span>
<span class="no">Encoding</span><span class="p">.</span><span class="nf">default_external</span> <span class="o">=</span> <span class="s1">'iso-8859-1'</span>
<span class="no">Encoding</span><span class="p">.</span><span class="nf">default_internal</span> <span class="o">=</span> <span class="s1">'iso-8859-2'</span>
<span class="no">File</span><span class="p">.</span><span class="nf">open</span><span class="p">(</span><span class="s1">'/dev/null'</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">f</span><span class="o">|</span>
<span class="n">f</span><span class="p">.</span><span class="nf">set_encoding</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">,</span> <span class="kp">nil</span><span class="p">)</span>
<span class="n">show</span><span class="p">(</span><span class="n">f</span><span class="p">)</span> <span class="c1"># f.internal_encoding is iso-8859-2, as expected</span>
<span class="n">f</span><span class="p">.</span><span class="nf">set_encoding</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">,</span> <span class="s1">'invalid'</span><span class="p">)</span>
<span class="n">show</span><span class="p">(</span><span class="n">f</span><span class="p">)</span> <span class="c1"># f.internal_encoding is now iso-8859-1!</span>
<span class="no">Encoding</span><span class="p">.</span><span class="nf">default_external</span> <span class="o">=</span> <span class="s1">'iso-8859-3'</span>
<span class="no">Encoding</span><span class="p">.</span><span class="nf">default_internal</span> <span class="o">=</span> <span class="s1">'iso-8859-4'</span>
<span class="n">show</span><span class="p">(</span><span class="n">f</span><span class="p">)</span> <span class="c1"># f.internal_encoding is now iso-8859-3!</span>
<span class="k">end</span>
</code></pre>
<p>In the 1st case, we see that the IO's internal encoding is set to the current setting of Encoding.default_internal. In the 2nd case, the IO's internal encoding is set to Encoding.default_external instead. The 3rd case is more interesting because it shows that the IO's internal encoding is actually following the current setting of Encoding.default_external. It didn't just copy it when #set_encoding was called. It changes whenever Encoding.default_external changes.</p>
<p>What should the correct behavior be?</p>
Ruby master - Bug #18993 (Open): Inconsistent Range#size for Float and Rational
https://redmine.ruby-lang.org/issues/18993
2022-09-02T18:18:04Z
masasakano (Masa Sakano)
<p>The returned values of Range#size between Rational and Float and also with regard to <code>exclude_end</code> of true and false are inconsistent.</p>
<p>The example below highlights the difference. The first and second should return the same value. The difference between the first and third seems strange - if this is the specification, it should be clearly described in the <a href="https://ruby-doc.org/core-3.1.2/Range.html#method-i-size" title="Ruby-3.1.2 official doc of Range" class="external">doc</a>. This point may be related to the issue "Misc <a class="issue tracker-5 status-1 priority-4 priority-default" title="Misc: Doc for Range#size for Float/Rational does not make sense (Open)" href="https://redmine.ruby-lang.org/issues/18984">#18984</a>".</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="p">(</span><span class="mi">5</span><span class="p">.</span><span class="nf">quo</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span><span class="o">...</span><span class="mi">5</span><span class="p">).</span><span class="nf">size</span> <span class="c1"># => 3</span>
<span class="p">(</span><span class="mi">5</span><span class="p">.</span><span class="nf">quo</span><span class="p">(</span><span class="mi">3</span><span class="p">).</span><span class="nf">to_f</span><span class="o">...</span><span class="mi">5</span><span class="p">).</span><span class="nf">size</span> <span class="c1"># => 4</span>
<span class="p">(</span><span class="mi">5</span><span class="p">.</span><span class="nf">quo</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span><span class="o">..</span><span class="mi">5</span><span class="p">).</span><span class="nf">size</span> <span class="c1"># => 4</span>
<span class="p">(</span><span class="mi">5</span><span class="p">.</span><span class="nf">quo</span><span class="p">(</span><span class="mi">3</span><span class="p">).</span><span class="nf">to_f</span><span class="o">..</span><span class="mi">5</span><span class="p">).</span><span class="nf">size</span> <span class="c1"># => 4</span>
</code></pre>
Ruby master - Bug #18923 (Open): Dir.glob Errno::ENAMETOOLONG - Caused by outdated logic in open_...
https://redmine.ruby-lang.org/issues/18923
2022-07-17T20:33:45Z
test35965@gmail.com (Alexander Riccio)
<p>This bug - as do most of my bug reports - started out while dealing with something productive and completely unrelated :)</p>
<p>In short: <code>open_dir_handle</code> in <code>win32.c</code> handles long paths incorrectly.</p>
<p>At best, this will cause programs that use <code>Dir.glob</code> to crash on windows when paths in the tree exceed the length allocated by ruby. I believe this is wrong in master too.</p>
<p>I'm a bit confused by error handling for <a href="https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfinalpathnamebyhandlew" class="external"><code>GetFinalPathNameByHandleW</code></a>. It <em>looks correct</em> , but its a confusing enough API that I'm going to mention it further down just in case.</p>
<p>In more detail:</p>
<p>As the developer of altWinDirStat, I'm way more familiar than I'd like with the labyrinth of weirdness that is handling paths on Windows. Long file paths have been supported through UNC paths and similar weirdness for as long as I've been around, maybe since the beginning of NT.</p>
<p>Many probably know all of this already, but will recap off the top of my head for context:</p>
<p>"Long" means up to the UTF-16 limit of 32k characters or so (and yes, IIRC, official documentation does not give the exact number of 32,768 because they say something about substitutions and such), which in practice is half the max value <code>UNICODE_STRING</code> struct can store in the <code>USHORT</code> <code>Length</code> member. Windows 10 has recently removed the <code>MAX_PATH</code> restriction from many dated Windows APIs that used to require kinda-UNC path prefixing (<code>"\\?\"</code>), which makes things easier for users, but also broke a lot of poorly written software that handled buffers incorrectly.</p>
<p>In ruby, any program that relies on <code>Dir.glob</code> will crash with a valid <em>final</em> path that exceeds MAX_PATH, since <a href="https://github.com/ruby/ruby/blob/82add06f9cbe00ad611e99692d8d49b77159c601/win32/win32.c#L2061" class="external"><code>GetFinalPathNameByHandleW</code> will return a length longer than <code>FINAL_PATH_MAX</code></a>.</p>
<p>One option to fix this is to make the stack buffer large enough to hold any possible string. I don't think this is a good idea. But it would be the smallest change.</p>
<p>A different option is to add this error explicitly to the <code>Dir.glob</code> docs, and make every single program work around this. I don't think that's a good fix either.</p>
<p>Another option to fix this that I do not <em>necessarily</em> recommend is to do the classic windows thing and call <code>GetFinalPathNameByHandleW</code> once with a zero-sized buffer and then use the return value of <code>GetFinalPathNameByHandleW</code> to allocate a sufficiently large buffer on the heap to hold the buffer, then call it again. Much slower, but definitely works well. This could cause a lot of heap churn if you have a lot of files (e.g. anybody who has a node_modules somewhere in their monorepo). Apparently people are already paying attention to <a href="https://bugs.ruby-lang.org/issues/9934" class="external">filepath-sized allocations in ruby</a>.</p>
<p>I'm very very OCD about how I use heap when I'm writing native code, it's a huge pain, but OCD means OCD <em>and</em> slightly better performance :). If you want to do it, the other option I see is <em>first</em> try the API with a <code>MAX_PATH</code> sized stack buffer, and if that works, excellent! Lightning fast code, no heap. If the stack buffer is too small, <em>then</em> I'll allocate a heap buffer big enough to hold the size of the string requested by whatever that win32 api has suggested I use in the return code. Excellent performance, but you need to make sure you're not introducing new bugs when you implement the code twice now, and not to mix up the heap/stack buffers.</p>
<p>With any fix, I suggest checking the last error on failure and reporting that instead. That may be better than just using the length of the input string. If the error is any of the errors listed in the documentation, it probably doesn't make sense to use the length of the input string anyways... in that case there's something wrong?</p>
<p>It might be a good idea for someone with the time to go through and update all the <code>MAX_PATH</code>-adjacent code to support long paths. That will be a huge endeavor, but worth it.</p>
<p>You can reproduce this with one line, calling <code>Dir.glob([])</code> on any valid path that's longer than 260 characters.</p>
<p>I'm also noticing that ruby is still using <code>lstrlenW</code> and <code>lstrcat</code> in <code>win32.c</code>... this is a terrible idea! <code>lstrcat</code> catches access violations/segfaults and then just continues program execution. I've seen this happen in other software and lost data to it. It's a pervasive enough problem on windows that I once thought of writing an EMET-style shim to redirect those system calls to normal c stdlib functions that crash on access violations. You don't need to switch to strsafe funcs or secure c lib funcs, it's an easy enough drop-in fix to switch to standard functions. Nothing will break unless something was already broken. I'll open a simple bug for that.</p>
<hr>
<p>The "maybe an issue" is that the <code>GetFinalPathNameByHandleW</code> appears even more confusing than most old win32 path-handling functions. <a href="https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfinalpathnamebyhandlew" class="external">The docs</a> say:</p>
<pre><code>If the function succeeds, the return value is the length of the string received by lpszFilePath, in TCHARs. This value does not include the size of the terminating null character.
</code></pre>
<p>...then a note for the ANSI version on vista and following windows versions, with subtly contradictory behavior, and then the failure behavior:</p>
<pre><code>If the function fails because lpszFilePath is too small to hold the string plus the terminating null character, the return value is the required buffer size, in TCHARs. This value includes the size of the terminating null character.
If the function fails for any other reason, the return value is zero. To get extended error information, call GetLastError.
</code></pre>
<p>...and then a table that probably talks about the possible values <code>GetLastError</code> will return, though annoyingly, doesn't say that explicitly.</p>
<p>I've been off-by-one when dealing with APIs like this enough times to not trust myself or any human around it. The SAL in the headers isn't as good as it is for some similarly-worded APIs, so it's not useful here.</p>
Ruby master - Bug #18878 (Open): parse.y: Foo::Bar {} is inconsistently rejected
https://redmine.ruby-lang.org/issues/18878
2022-06-26T13:06:35Z
qnighy (Masaki Hara)
<p>The following source doesn't parse:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">Foo</span><span class="o">::</span><span class="no">Bar</span> <span class="p">{}</span>
</code></pre>
<p>despite the following:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">bar</span> <span class="c1"># local variable or method call</span>
<span class="no">Bar</span> <span class="c1"># constant</span>
<span class="n">bar</span><span class="p">()</span> <span class="c1"># method call</span>
<span class="no">Bar</span><span class="p">()</span> <span class="c1"># method call</span>
<span class="n">bar</span> <span class="p">{}</span> <span class="c1"># method call</span>
<span class="no">Bar</span> <span class="p">{}</span> <span class="c1"># method call</span>
<span class="n">bar</span><span class="p">()</span> <span class="p">{}</span> <span class="c1"># method call</span>
<span class="no">Bar</span><span class="p">()</span> <span class="p">{}</span> <span class="c1"># method call</span>
<span class="no">Foo</span><span class="o">::</span><span class="n">bar</span> <span class="c1"># method call</span>
<span class="no">Foo</span><span class="o">::</span><span class="no">Bar</span> <span class="c1"># constant</span>
<span class="no">Foo</span><span class="o">::</span><span class="n">bar</span><span class="p">()</span> <span class="c1"># method call</span>
<span class="no">Foo</span><span class="o">::</span><span class="no">Bar</span><span class="p">()</span> <span class="c1"># method call</span>
<span class="no">Foo</span><span class="o">::</span><span class="n">bar</span> <span class="p">{}</span> <span class="c1"># method call</span>
<span class="c1"># Foo::Bar {} # SyntaxError</span>
<span class="no">Foo</span><span class="o">::</span><span class="n">bar</span><span class="p">()</span> <span class="p">{}</span> <span class="c1"># method call</span>
<span class="no">Foo</span><span class="o">::</span><span class="no">Bar</span><span class="p">()</span> <span class="p">{}</span> <span class="c1"># method call</span>
</code></pre>
<p>Especially considering <code>Bar {}</code>, this looks like a missing implementation rather than an intentional behavior.</p>
Ruby master - Bug #18804 (Open): Invalid line number for putnil instruction
https://redmine.ruby-lang.org/issues/18804
2022-05-25T09:22:32Z
hurricup (Alexandr Evstigneev)
hurricup@gmail.com
<p>Looks like this is a pretty old bug. Consider example:</p>
<pre><code>def foo1
if true
nil
else
1
end
end
def foo2
if true
42
else
1
end
end
foo1_method = method(:foo1)
puts RubyVM::InstructionSequence.of(foo1_method).disasm
foo2_method = method(:foo2)
puts RubyVM::InstructionSequence.of(foo2_method).disasm
</code></pre>
<p>Gives us:</p>
<pre><code>== disasm: #<ISeq:foo1@/home/hurricup/RubymineProjects/untitled28/test.rb:1 (1,0)-(7,3)> (catch: FALSE)
0000 putnil ( 2)[LiCa]
0001 leave ( 7)[Re]
== disasm: #<ISeq:foo2@/home/hurricup/RubymineProjects/untitled28/test.rb:9 (9,0)-(15,3)> (catch: FALSE)
0000 putobject 42 ( 11)[LiCa]
0002 leave ( 15)[Re]
</code></pre>
<p><code>putnil</code> has line set to 2 (and it should be 3)<br>
<code>putobject 42</code> has line set to 11 and this is correct one.</p>
<p>User unable to put a breakpoint to the nil in debugger because of this.</p>
Ruby master - Bug #18661 (Open): Net::HTTP behavior changed between 2.6 and 3.1 on windows.
https://redmine.ruby-lang.org/issues/18661
2022-03-25T13:57:07Z
jleblanc (Joshua LeBlanc)
<p>We are upgrading a rails application from Ruby 2.6 to Ruby 3.1 on Windows.</p>
<p>Running rails systems tests hang on Ruby 3.1, while they succeed on Ruby 2.6.</p>
<p>I tracked this down to Ruby 3.1's Net::HTTP using Socket.tcp rather than the old TCPSocket.</p>
<p>Specifically, in <code>socket.rb</code>, <code>connect_internal</code> calls <code>connect_nonblock(self, exception: false)</code>, which ultimately hangs until timing out on windows.<br>
Modifying the <code>socket.rb</code> source to use <code>connect(self)</code> instead results in a successful operation.</p>
<p>To be clear, the hanging operation is <code>socket.rb#connect_nonblock</code>, which is on line 1214</p>
<p>Reproduction:</p>
<ol>
<li>Install Ruby 3.1 on Windows - I used RubyInstaller: <a href="https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.1-1/rubyinstaller-devkit-3.1.1-1-x64.exe" class="external">https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.1-1/rubyinstaller-devkit-3.1.1-1-x64.exe</a>
</li>
<li>Clone the reproduction project: <a href="https://github.com/joshleblanc/windows_net_http_problem" class="external">https://github.com/joshleblanc/windows_net_http_problem</a>
</li>
<li>Run <code>bundle install</code>
</li>
<li>Run <code>rails test:system</code>
</li>
</ol>
<p>Chrome will open, however a connection will never be made, ultimately timing out.</p>
<p>To test this same process in earlier versions of ruby, simply create a new rails project with <code>rails new -O -J -S <name></code>, add the <code>ffi</code> and <code>tzinfo-data</code> gems to the gemfile, and scaffold a new resource. Running <code>rails test:system</code> from this point should succeed.</p>
Ruby master - Bug #18622 (Open): const_get still looks in Object, while lexical constant lookup n...
https://redmine.ruby-lang.org/issues/18622
2022-03-10T16:12:55Z
Eregon (Benoit Daloze)
<p>There is some inconsistency here between literal constant lookup and the meta API (const_get).</p>
<p>Lexical constant lookup no longer uses a special case for Object, and this is good as it avoids surprises: <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: remove top-level constant lookup (Closed)" href="https://redmine.ruby-lang.org/issues/11547">#11547</a></p>
<p>However, <code>const_get</code> still looks in Object, even though that's confusing, inconsistent and IMHO shouldn't really happen.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">module</span> <span class="nn">ConstantSpecsTwo</span>
<span class="no">Foo</span> <span class="o">=</span> <span class="ss">:cs_two_foo</span>
<span class="k">end</span>
<span class="k">module</span> <span class="nn">ConstantSpecs</span>
<span class="k">end</span>
<span class="nb">p</span> <span class="no">ConstantSpecs</span><span class="p">.</span><span class="nf">const_get</span><span class="p">(</span><span class="s2">"ConstantSpecsTwo::Foo"</span><span class="p">)</span> <span class="c1"># => :cs_two_foo</span>
<span class="nb">p</span> <span class="no">ConstantSpecs</span><span class="o">::</span><span class="no">ConstantSpecsTwo</span><span class="o">::</span><span class="no">Foo</span> <span class="c1"># => const_get.rb:9:in `<main>': uninitialized constant ConstantSpecs::ConstantSpecsTwo (NameError)</span>
</code></pre>
<p>I think we should change it so both behave the same (i.e., NameError).<br>
It's like if <code>cd /foo/bar</code> would go to <code>/bar</code> if <code>/foo/bar</code> does not exist and <code>/bar</code> does.</p>
<p><code>const_get</code> is a meta API so it cannot know the surrounding <code>Module.nesting</code>, but so I think it should consider the receiver of <code>const_get</code> as the only nesting (so just <code>ConstantSpecs</code> in this case, not <code>Object</code>).</p>
<p>Note this does not affect nested constants inside the <code>const_get</code> like <code>Foo</code> above (another way to look at the inconsistency that the first component is treated differently).</p>
<p>From <a href="https://bugs.ruby-lang.org/issues/11547#note-19" class="external">https://bugs.ruby-lang.org/issues/11547#note-19</a></p>
Ruby master - Bug #18605 (Open): Fails to run on (newer) 32bit Windows with ucrt
https://redmine.ruby-lang.org/issues/18605
2022-03-03T07:31:55Z
lazka (Christoph Reiter)
<p>32bit ruby using ucrt has started to fail on newer Windows with "unexpected ucrtbase.dll" -> <a href="https://github.com/ruby/ruby/blob/3fb7d2cadc18472ec107b14234933b017a33c14d/win32/win32.c#L2591" class="external">https://github.com/ruby/ruby/blob/3fb7d2cadc18472ec107b14234933b017a33c14d/win32/win32.c#L2591</a></p>
<p>The problem is that ruby depends on ucrt internals and those have apparently changed with newer versions.</p>
<p>See <a href="https://github.com/msys2/MINGW-packages/pull/10878" class="external">https://github.com/msys2/MINGW-packages/pull/10878</a> and <a href="https://github.com/msys2/MINGW-packages/issues/10896" class="external">https://github.com/msys2/MINGW-packages/issues/10896</a> for some background and a potential fix. But ideally ruby wouldn't depend on Windows internals like this.</p>
<p>thanks!</p>
Ruby master - Bug #18507 (Open): Incorrect target_os detection in configure script
https://redmine.ruby-lang.org/issues/18507
2022-01-21T15:19:23Z
rcl (Andrew Kosteltsev)
<p>configure.ac incorrectly detect target_os by target triplet such as arm-unknown-linux-gnueabihf. In case arm-unknown-linux-gnueabihf suffix we have incorrect ruby arch = 'arm-linux-eabihf' instead of 'arm-linux'.</p>
<p>configure.ac: 246:<br>
target_os=<code>echo $target_os | sed 's/linux-gnu$/linux/;s/linux-gnu/linux-/'</code></p>
<p>should be changed to:<br>
target_os=<code>echo $target_os | sed 's/linux-gnu[[^ ]]*$/linux/;s/linux-gnu/linux-/'</code></p>
<p>and correspondently configure: 7619:<br>
target_os=<code>echo $target_os | sed 's/linux-gnu$/linux/;s/linux-gnu/linux-/'</code></p>
<p>should be changed to:<br>
target_os=<code>echo $target_os | sed 's/linux-gnu[^ ]*$/linux/;s/linux-gnu/linux-/'</code></p>
Ruby master - Bug #18506 (Open): make and make install rebuild items every time unnecessarily - s...
https://redmine.ruby-lang.org/issues/18506
2022-01-21T13:28:24Z
alex.kanavin@gmail.com (Alexander Kanavin)
<p>The makefiles are written in a way that a few items are regenerated on every invocation of make, even if nothing changes, including, actually libruby.so. This would've been ok, but from ruby 3.1 onwards it started to cause races in parallel make installs, where items in capi/ext/ and libruby are re-linked at the same time, causing capi/ext ones to fail the linking step. This is how it looks like:</p>
<pre><code>| building spec/ruby/optional/capi/ext/integer_spec.so
| ../ruby-3.1.0/revision.h unchanged
| generating enc.mk
| building spec/ruby/optional/capi/ext/proc_spec.so
| compiling enc/encinit.c
| linking shared-library libruby.so.3.1.0
| ./libruby.so: file not recognized: file format not recognized
| collect2: error: ld returned 1 exit status
| ../ruby-3.1.0/defs/gmake.mk:413: recipe for target 'spec/ruby/optional/capi/ext/proc_spec.so' failed
| make: *** [spec/ruby/optional/capi/ext/proc_spec.so] Error 1
| make: *** Waiting for unfinished jobs....
| linking ruby
</code></pre>
<p><a href="https://autobuilder.yoctoproject.org/typhoon/api/v2/logs/4328780/raw" class="external">https://autobuilder.yoctoproject.org/typhoon/api/v2/logs/4328780/raw</a></p>
<p>To reproduce, configure with --enable-shared, and run 'make' several times.</p>
Ruby master - Bug #18476 (Open): Call to require stuck forever after receiving EAGAIN on writev w...
https://redmine.ruby-lang.org/issues/18476
2022-01-11T18:30:15Z
JelteF (Jelte Fennema)
<a name="Environment"></a>
<h1 >Environment<a href="#Environment" class="wiki-anchor">¶</a></h1>
<p>I'm using Ubuntu 18.04 running on Windows using WSL2:</p>
<pre><code>$ uname -a
Linux myhostname 5.10.60.1-microsoft-standard-WSL2 #1 SMP Wed Aug 25 23:20:18 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.6 LTS
Release: 18.04
Codename: bionic
</code></pre>
<a name="Problem-description"></a>
<h1 >Problem description<a href="#Problem-description" class="wiki-anchor">¶</a></h1>
<p>When using <code>zeus</code> to run a ruby project in an effort to cache dependency loading it gets stuck when calling <code>require 'rubocop'</code> on Ruby 3.0 and 3.1. Everything works fine on Ruby 2.6.</p>
<p>When looking at strace output of the stuck process it shows a <code>writev</code> call that receives an <code>EAGAIN</code> right before the process gets to its stuck state:</p>
<pre><code>[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/number_conversion.rb", iov_len=115}, {iov_base="\n", iov_len=1}], 2) = 116
[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/numbered_parameter_assignment.rb", iov_len=127}, {iov_base="\n", iov_len=1}], 2) = 128
[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/or_assignment_to_constant.rb", iov_len=123}, {iov_base="\n", iov_len=1}], 2) = 124
[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/ordered_magic_comments.rb", iov_len=120}, {iov_base="\n", iov_len=1}], 2) = 121
[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb", iov_len=121}, {iov_base="\n", iov_len=1}], 2) = 122
[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/parentheses_as_grouped_expression"..., iov_len=131}, {iov_base="\n", iov_len=1}], 2) = 132
[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/percent_string_array.rb", iov_len=118}, {iov_base="\n", iov_len=1}], 2) = 119
[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/percent_symbol_array.rb", iov_len=118}, {iov_base="\n", iov_len=1}], 2) = 119
[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/raise_exception.rb", iov_len=113}, {iov_base="\n", iov_len=1}], 2) = -1 EAGAIN (Resource temporarily unavailable)
[pid 24872] getpid() = 24872
[pid 24872] ppoll([{fd=14, events=POLLOUT}, {fd=7, events=POLLIN}], 2, NULL, NULL, 8 <unfinished ...>
[pid 24859] <... futex resumed> ) = -1 ETIMEDOUT (Connection timed out)
[pid 24859] select(0, NULL, NULL, NULL, {tv_sec=0, tv_usec=20}) = 0 (Timeout)
[pid 24859] futex(0x605f38, FUTEX_WAIT, 0, {tv_sec=60, tv_nsec=0}
</code></pre>
<p>The exact file at which the process receives the EAGAIN and is stuck is consistent across runs with the same Ruby version (at least on my machine). For 3.1.0 it's <code>raise_exception.rb</code> and for 3.0.3 it's <code>redundant_dir_glob_sort.rb</code></p>
<p>For reference this is the link to the repo of <code>zeus</code>: <a href="https://github.com/burke/zeus" class="external">https://github.com/burke/zeus</a></p>
<a name="How-to-reproduce"></a>
<h1 >How to reproduce<a href="#How-to-reproduce" class="wiki-anchor">¶</a></h1>
<p>See this example repo for minimal steps on how to reproduce this: <a href="https://github.com/JelteF/ruby-zeus-bug" class="external">https://github.com/JelteF/ruby-zeus-bug</a></p>
<a name="Expectation"></a>
<h1 >Expectation<a href="#Expectation" class="wiki-anchor">¶</a></h1>
<p>For Ruby to not get stuck after receiving <code>EAGAIN</code> on the <code>writev</code> call.</p>
Ruby master - Bug #18455 (Open): `IO#close` has poor performance and difficult to understand sema...
https://redmine.ruby-lang.org/issues/18455
2022-01-01T07:13:08Z
ioquatix (Samuel Williams)
samuel@oriontransfer.net
<p><code>IO#close</code> should be responsible for closing the file descriptor referred to by the IO instance. When dealing with buffered IO, one can also expect this to flush the internal buffers if possible.</p>
<p>Currently, all blocking IO operations release the GVL and perform the blocking system call using <code>rb_thread_io_blocking_region</code>. The current implementation takes a file descriptor and adds an entry to the VM global <code>waiting_fds</code> list. When the operation is completed, the entry is removed from <code>waiting_fds</code>.</p>
<p>When calling <code>IO#close</code>, this list is traversed and any threads performing blocking operations with a matching file descriptor are interrupted. The performance of this is O(number of blocking IO operations) which in practice the performance of <code>IO#close</code> can take milliseconds with 10,000 threads performing blocking IO. This performance is unacceptable.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1">#!/usr/bin/env ruby</span>
<span class="nb">require</span> <span class="s1">'benchmark'</span>
<span class="k">class</span> <span class="nc">Reading</span>
<span class="k">def</span> <span class="nf">initialize</span>
<span class="vi">@r</span><span class="p">,</span> <span class="vi">@w</span> <span class="o">=</span> <span class="no">IO</span><span class="p">.</span><span class="nf">pipe</span>
<span class="vi">@thread</span> <span class="o">=</span> <span class="no">Thread</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="vi">@r</span><span class="p">.</span><span class="nf">read</span>
<span class="k">rescue</span> <span class="no">IOError</span>
<span class="c1"># Ignore.</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="kp">attr</span> <span class="ss">:r</span>
<span class="kp">attr</span> <span class="ss">:w</span>
<span class="kp">attr</span> <span class="ss">:thread</span>
<span class="k">def</span> <span class="nf">join</span>
<span class="vi">@thread</span><span class="p">.</span><span class="nf">join</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">measure</span><span class="p">(</span><span class="n">count</span> <span class="o">=</span> <span class="mi">10</span><span class="p">)</span>
<span class="n">readings</span> <span class="o">=</span> <span class="n">count</span><span class="p">.</span><span class="nf">times</span><span class="p">.</span><span class="nf">map</span> <span class="k">do</span>
<span class="no">Reading</span><span class="p">.</span><span class="nf">new</span>
<span class="k">end</span>
<span class="nb">sleep</span> <span class="mi">10</span>
<span class="n">duration</span> <span class="o">=</span> <span class="no">Benchmark</span><span class="p">.</span><span class="nf">measure</span> <span class="k">do</span>
<span class="n">readings</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">reading</span><span class="o">|</span>
<span class="n">reading</span><span class="p">.</span><span class="nf">r</span><span class="p">.</span><span class="nf">close</span>
<span class="n">reading</span><span class="p">.</span><span class="nf">w</span><span class="p">.</span><span class="nf">close</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">average</span> <span class="o">=</span> <span class="p">(</span><span class="n">duration</span><span class="p">.</span><span class="nf">total</span> <span class="o">/</span> <span class="n">count</span><span class="p">)</span> <span class="o">*</span> <span class="mf">1000.0</span>
<span class="n">pp</span> <span class="ss">count: </span><span class="n">count</span><span class="p">,</span> <span class="ss">average: </span><span class="nb">sprintf</span><span class="p">(</span><span class="s2">"%0.2fms"</span><span class="p">,</span> <span class="n">average</span><span class="p">)</span>
<span class="n">readings</span><span class="p">.</span><span class="nf">each</span><span class="p">(</span><span class="o">&</span><span class="ss">:join</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">measure</span><span class="p">(</span> <span class="mi">10</span><span class="p">)</span>
<span class="n">measure</span><span class="p">(</span> <span class="mi">100</span><span class="p">)</span>
<span class="n">measure</span><span class="p">(</span> <span class="mi">1000</span><span class="p">)</span>
<span class="n">measure</span><span class="p">(</span><span class="mi">10000</span><span class="p">)</span>
</code></pre>
<p>In addition, the semantics of this operation are confusing at best. While Ruby programs are dealing with IO instances, the VM is dealing with file descriptors, in effect performing some internal de-duplication of IO state. In practice, this leads to strange behaviour:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1">#!/usr/bin/env ruby</span>
<span class="n">r</span><span class="p">,</span> <span class="n">w</span> <span class="o">=</span> <span class="no">IO</span><span class="p">.</span><span class="nf">pipe</span>
<span class="n">r2</span> <span class="o">=</span> <span class="no">IO</span><span class="p">.</span><span class="nf">for_fd</span><span class="p">(</span><span class="n">r</span><span class="p">.</span><span class="nf">to_i</span><span class="p">)</span>
<span class="n">pp</span> <span class="ss">r: </span><span class="n">r</span><span class="p">,</span> <span class="ss">r2: </span><span class="n">r2</span>
<span class="n">t</span> <span class="o">=</span> <span class="no">Thread</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="n">r2</span><span class="p">.</span><span class="nf">read</span> <span class="k">rescue</span> <span class="kp">nil</span>
<span class="n">r2</span><span class="p">.</span><span class="nf">read</span> <span class="c1"># EBADF</span>
<span class="k">end</span>
<span class="nb">sleep</span> <span class="mf">0.5</span>
<span class="n">r</span><span class="p">.</span><span class="nf">close</span>
<span class="n">t</span><span class="p">.</span><span class="nf">join</span> <span class="k">rescue</span> <span class="kp">nil</span>
<span class="n">pp</span> <span class="ss">r: </span><span class="n">r</span><span class="p">,</span> <span class="ss">r2: </span><span class="n">r2</span>
<span class="c1"># r is closed, r2 is valid but will raise EBADF on any operation.</span>
</code></pre>
<p>In addition, this confusing behaviour extends to Ractor and state is leaked between the two:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">r</span><span class="p">,</span> <span class="n">w</span> <span class="o">=</span> <span class="no">IO</span><span class="p">.</span><span class="nf">pipe</span>
<span class="n">ractor</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">r</span><span class="p">.</span><span class="nf">to_i</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">fd</span><span class="o">|</span>
<span class="n">r2</span> <span class="o">=</span> <span class="no">IO</span><span class="p">.</span><span class="nf">for_fd</span><span class="p">(</span><span class="n">fd</span><span class="p">)</span>
<span class="n">r2</span><span class="p">.</span><span class="nf">read</span>
<span class="c1"># r2.read # EBADF</span>
<span class="k">end</span>
<span class="nb">sleep</span> <span class="mf">0.5</span>
<span class="n">r</span><span class="p">.</span><span class="nf">close</span>
<span class="n">pp</span> <span class="ss">take: </span><span class="n">ractor</span><span class="p">.</span><span class="nf">take</span>
</code></pre>
<p>I propose the following changes to simplify the semantics and improve performance:</p>
<ul>
<li>Move the semantics of <code>waiting_fds</code> from per-fd to per-IO. This means that <code>IO#close</code> only interrupts blocking operations performed on the same IO instance rather than ANY IO which refers to the same file descriptor. I think this behaviour is easier to understand and still protects against the vast majority of incorrect usage.</li>
<li>Move the details of <code>struct rb_io_t</code> to <code>internal/io.h</code> so that the implementation details are not part of the public interface.</li>
</ul>
<a name="Benchmarks"></a>
<h2 >Benchmarks<a href="#Benchmarks" class="wiki-anchor">¶</a></h2>
<p>Before:</p>
<pre><code>{:count=>10, :average=>"0.19ms"}
{:count=>100, :average=>"0.11ms"}
{:count=>1000, :average=>"0.18ms"}
{:count=>10000, :average=>"1.16ms"}
</code></pre>
<p>After:</p>
<pre><code>{:count=>10, :average=>"0.20ms"}
{:count=>100, :average=>"0.11ms"}
{:count=>1000, :average=>"0.15ms"}
{:count=>10000, :average=>"0.68ms"}
</code></pre>
<p>After investigating this further I found that the <code>rb_thread_io_blocking_region</code> using <code>ubf_select</code> can be incredibly slow, proportional to the number of threads. I don't know whether it's advisable but:</p>
<pre><code class="c syntaxhl" data-language="c"> <span class="n">BLOCKING_REGION</span><span class="p">(</span><span class="n">blocking_node</span><span class="p">.</span><span class="kr">thread</span><span class="p">,</span> <span class="p">{</span>
<span class="n">val</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">data1</span><span class="p">);</span>
<span class="n">saved_errno</span> <span class="o">=</span> <span class="n">errno</span><span class="p">;</span>
<span class="p">},</span> <span class="nb">NULL</span> <span class="cm">/* ubf_select */</span><span class="p">,</span> <span class="n">blocking_node</span><span class="p">.</span><span class="kr">thread</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span>
</code></pre>
<p>Disabling the UBF function and relying on <code>read(fd, ...)</code>/<code>write(fd, ...)</code> blocking operations to fail when <code>close(fd)</code> is invoked might be sufficient? This needs more investigation but after making this change, we have constant-time IO#close.</p>
<pre><code>{:count=>10, :average=>"0.13ms"}
{:count=>100, :average=>"0.06ms"}
{:count=>1000, :average=>"0.04ms"}
{:count=>10000, :average=>"0.09ms"}
</code></pre>
<p>Which is ideally what we want.</p>
Ruby master - Bug #18396 (Open): An unexpected "hash value omission" syntax error when without pa...
https://redmine.ruby-lang.org/issues/18396
2021-12-08T03:25:13Z
koic (Koichi ITO)
koic.ito@gmail.com
<a name="Summary"></a>
<h2 >Summary<a href="#Summary" class="wiki-anchor">¶</a></h2>
<p>I encountered an unexpected "hash value omission" syntax error when parentheses call expression follows:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="sx">% cat </span><span class="n">example</span><span class="p">.</span><span class="nf">rb</span>
<span class="n">foo</span> <span class="ss">key:
</span><span class="n">foo</span> <span class="n">arg</span>
</code></pre>
<pre><code class="console syntaxhl" data-language="console"><span class="go">% ruby -cv /tmp/b.rb
ruby 3.1.0dev (2021-12-07T23:18:11Z master 4a3e7984bf) [x86_64-darwin19]
example.rb:2: syntax error, unexpected local variable or method, expecting `do' or '{' or '('
foo arg
</span></code></pre>
<a name="Additional-Information"></a>
<h2 >Additional Information<a href="#Additional-Information" class="wiki-anchor">¶</a></h2>
<p>The following is a traditional usage.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># No errors.</span>
<span class="n">foo</span> <span class="ss">key: </span><span class="n">key</span>
<span class="n">foo</span> <span class="n">arg</span>
</code></pre>
<p>A syntax error is unexpectedly raised when hash value omission argument without parentheses is followed by a method call without parentheses.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># No errors is expected, but syntax error is raised.</span>
<span class="n">foo</span> <span class="ss">key:
</span><span class="n">foo</span> <span class="n">arg</span>
</code></pre>
<p>No error occurs if any of the calls have parentheses.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># No errors.</span>
<span class="n">foo</span><span class="p">(</span><span class="n">key</span><span class="p">:)</span>
<span class="n">foo</span> <span class="n">arg</span>
</code></pre>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># Also no errors.</span>
<span class="n">foo</span> <span class="ss">key:
</span><span class="n">foo</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
</code></pre>
<p>No error occurs when calling alone.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># No errors.</span>
<span class="n">foo</span> <span class="ss">key:
</span></code></pre>
<p>I encountered this error while trying to apply hash value omission to RSpec code of a real-world application (proprietary) .<br>
But this is a new Ruby 3.1 syntax and may not be supported yet. Thank you.</p>
Ruby master - Bug #18338 (Open): Encoding.default_external = Encoding::UTF_16BE may add a wrongly...
https://redmine.ruby-lang.org/issues/18338
2021-11-15T07:26:56Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<pre><code># coding: US-ASCII
Encoding.default_external = Encoding::UTF_16BE
"abc".encode(Encoding.default_external)
p $LOADED_FEATURES.last.encoding #=> #<Encoding:UTF-16BE>
p $LOADED_FEATURES.last
#=> "\u2F68\u6F6D\u652F\u6D61\u6D65\u2F77\u6F72\u6B2F\u7275\u6279\u2F6C\u6F63\u616C\u2F6C\u6962\u2F72\u7562\u792F\u332E\u312E\u302F\u7838\u365F\u3634\u2D6C\u696E\u7578\u2F65\u6E63\u2F74\u7261\u6E73\u2F75\u7466\u5F31\u365F\u3332\u2E73\x6F"
</code></pre>
<p>This weird string seems <code>"/home/mame/work/ruby/local/lib/ruby/3.1.0/x86_64-linux/enc/trans/utf_16_32.s\u0000o".force_encoding("UTF-16BE")</code>.</p>
<p>Note that the code may raise a "code converter not found" error depending on the length of install path (or build path?). Maybe it works if it is even due to UTF-16.</p>
<pre><code># works
mame$ /Users/mame/ruby2/exe/ruby --disable-gems test.rb
#<Encoding:UTF-16BE>
"\u2F55\u7365\u7273\u2F6D\u616D\u652F\u7275\u6279\u322F\u2E65\u7874\u2F78\u3836\u5F36\u342D\u6461\u7277\u696E\u3139\u2F65\u6E63\u2F74\u7261\u6E73\u2F73\u696E\u676C\u655F\u6279\u7465\u2E62\u756E\u646C\x65"
</code></pre>
<pre><code># raises an exception
mame$ /Users/mame/ruby22/exe/ruby --disable-gems test.rb
0ec: 0x0
test.rb:4:in `encode': code converter not found (US-ASCII to UTF-16BE) (Encoding::ConverterNotFoundError)
from test.rb:4:in `<main>'
test.rb:4:in `encode': No such file or directory @ rb_check_realpath_internal - ⽕獥牳⽭慭支牵批㈲⼮數琯砸㙟㘴ⵤ慲睩渱㤯敮振瑲慮猯獩湧汥形祴攮扵湤汥 (Errno::ENOENT)
from test.rb:4:in `<main>'
</code></pre>
Ruby master - Bug #18255 (Open): ioctl zeroes the last buffer byte
https://redmine.ruby-lang.org/issues/18255
2021-10-18T21:47:28Z
vihai (Daniele Orlandi)
daniele@orlandi.com
<p>Hello,</p>
<p>I'm running ruby 2.7.4p191 on an armv7 linux and experimenting with GPIO_GET_LINEHANDLE_IOCTL ioctl.</p>
<p>The ioctl sanity check is triggered as if the buffer was too small however the size of the buffer passed to ioctl is correct.</p>
<pre><code>io.rb:116:in `ioctl': return value overflowed string (ArgumentError)
</code></pre>
<p>If I append at least one byte to the buffer the ioctl does not raise an exception.</p>
<p>It seems that the last byte of the buffer is zeroed:</p>
<pre><code>puts "SIZE=#{req.bytesize}"
req = req + "XXXXXXXXXX".b
puts req.unpack("H*")
fd.ioctl(GPIO_GET_LINEHANDLE_IOCTL, req)
puts req.unpack("H*")
</code></pre>
<pre><code>SIZE=364
[...]0000000000000058585858585858585858
[...]0000000600000058585858585858585800
</code></pre>
<p>I checked with a C program and the ioctl does not actually touch the buffer beyond the expected 364 bytes.<br>
The ioctl number does encode 364 as size:</p>
<pre><code>#include <stdio.h>
#include <linux/gpio.h>
void main()
{
printf("SIZE=%d", _IOC_SIZE(GPIO_GET_LINEHANDLE_IOCTL));
}
</code></pre>
<pre><code>SIZE=364
</code></pre>
Ruby master - Bug #18152 (Open): Fix theoretical bug with signals + qsort
https://redmine.ruby-lang.org/issues/18152
2021-09-07T00:02:40Z
eggert (Paul Eggert)
eggert@cs.ucla.edu
<p>Ruby assumes that qsort is async-signal-safe, but POSIX does not guarantee this and it's not true of some qsort implementations, notably glibc. This is not a practical problem with glibc, since glibc qsort is async-signal-safe with small sorts and in practice Ruby's use of qsort is invariably small enough. However, it's better to be absolutely async-signal-safe, if only to pacify static checkers and the like.</p>
<p>I am attaching two alternative patches for the problem. Either will suffice. The first is simple and easier to audit, but does not scale well (though that is not important here). The second patch should scale, but is harder to audit.</p>
<p>It would be difficult to write test cases illustrating the bug that these patches fix, as they'd be timing dependent.</p>
Ruby master - Bug #18131 (Open): addr2line.c: Some inlined functions mistakenly shown
https://redmine.ruby-lang.org/issues/18131
2021-08-24T19:59:25Z
xtkoba (Tee KOBAYASHI)
<p>What is observed in ppc64le CI (pathnames edited for readability):</p>
<pre><code>-- C level backtrace information -------------------------------------------
/home/xxx/ruby/ruby(rb_vm_bugreport+0x198) [0x6430d199028] vm_dump.c:759
/home/xxx/ruby/ruby(ibf_load_small_value+0x78) [0x6430cf011c8] error.c:815
/home/xxx/ruby/ruby(ibf_load_iseq_each) compile.c:11650
/home/xxx/ruby/ruby(vm_respond_to) compile.c:12594
/home/xxx/ruby/ruby(rb_ec_obj_respond_to) vm_method.c:2576
/home/xxx/ruby/ruby(rb_obj_respond_to) vm_method.c:2569
/home/xxx/ruby/ruby(rb_bug_for_fatal_signal) vm_method.c:2584
/home/xxx/ruby/ruby(sigsegv+0x64) [0x6430d0bb954] signal.c:961
linux-vdso64.so.1(__kernel_sigtramp_rt64+0x0) [0x795f1d6304c8]
/home/xxx/ruby/ruby(rb_ary_push+0x2c) [0x6430d1b31cc] array.c:1313
(...)
</code></pre>
<p>Here, 6 functions are shown for address <code>0x6430cf011c8</code>, of which only <code>rb_bug_for_fatal_signal</code> is valid.</p>
<p>I have not yet come up with how to fix this, but I suspect this is partially due to <code>ranges_include</code> in <code>addr2line.c</code> not handling <code>DW_AT_entry_pc</code> at all.</p>
Ruby master - Bug #18061 (Open): Execshield test: libruby.so.N.N.N: FAIL: property-note test bec...
https://redmine.ruby-lang.org/issues/18061
2021-08-04T13:37:35Z
jaruga (Jun Aruga)
<p>I found an issue in our company's internal test called "execshield" by a security tool annobin - annocheck command [1][2].</p>
<pre><code>Hardened: libruby.so.2.7.4: FAIL: property-note test because no .note.gnu.property section found
</code></pre>
<p>Here is the reproducer on the upstream latest master, commit is 5f2987d6c2ae9ace3178ac3e1bbb4ac7079101eb,</p>
<pre><code>$ autoconf
$ ./configure --enable-shared
$ make
$ ls libruby.so.3.1.0
libruby.so.3.1.0*
</code></pre>
<p>If you are using Red Hat based Linux distro, it's easy to install by the RPM package like this.</p>
<pre><code>$ sudo dnf -y install annobin-annocheck
</code></pre>
<pre><code>$ sudo yum -y install annobin-annocheck
</code></pre>
<p>Then</p>
<pre><code>$ annocheck libruby.so.3.1.0
</code></pre>
<p>If you are using other Linux distros such as Ubuntu, you can use it by a container I prepared.</p>
<p>Prepare the following <code>Dockerfile</code>.</p>
<pre><code>$ cat Dockerfile
FROM docker.io/fedora:34
RUN cat /etc/fedora-release
RUN dnf -y install annobin-annocheck
WORKDIR /work
</code></pre>
<p>Then build the container image with the <code>Dockerfile</code> and run the annocheck command for the <code>libruby.so.3.1.0</code> on your host environment. The <code>-v</code> is an option for bind mount between host and container environment.</p>
<pre><code>$ docker build --rm -t fedora-annocheck .
$ docker run --rm -t -v $(pwd):/work fedora-annocheck annocheck /work/libruby.so.3.1.0
annocheck: Version 9.79.
Hardened: libruby.so.3.1.0: FAIL: bind-now test because not linked with -Wl,-z,now
Hardened: libruby.so.3.1.0: FAIL: notes test because gaps were detected in the annobin coverage
Hardened: libruby.so.3.1.0: FAIL: cf-protection test because no .note.gnu.property section = no control flow information
Hardened: libruby.so.3.1.0: FAIL: property-note test because no .note.gnu.property section found
Hardened: Rerun annocheck with --verbose to see more information on the tests.
</code></pre>
<p>The message <code>Hardened: libruby.so.3.1.0: FAIL: property-note test because no .note.gnu.property section found</code> is what I found in our internal test. For other FAIL messages, maybe it can be fixed by changing how to build.</p>
<p>Asking a colleague, I was told that the <code>coroutine/*/Context.S</code> files such as <a href="https://github.com/ruby/ruby/blob/master/coroutine/x86/Context.S" class="external">coroutine/x86/Context.S</a> cause the failure. Do you have any idea how to fix this? Thanks.</p>
<ul>
<li>[1] <a href="https://sourceware.org/annobin/" class="external">https://sourceware.org/annobin/</a>
</li>
<li>[2] You can see <code>man annocheck</code> or <a href="https://www.mankier.com/1/annocheck" class="external">https://www.mankier.com/1/annocheck</a> .</li>
</ul>
Ruby master - Bug #18012 (Open): Case-insensitive character classes can only match multiple code ...
https://redmine.ruby-lang.org/issues/18012
2021-06-29T08:35:05Z
jirkamarsik (Jirka Marsik)
<p>Some Unicode characters case-fold to strings of multiple code points, e.g. the ligature <code>\ufb00</code> can match the string <code>ff</code>.</p>
<pre><code>irb(main):001:0> /\A[\ufb00]\z/i.match("\ufb00")
=> #<MatchData "ff">
irb(main):002:0> /\A[\ufb00]\z/i.match("ff")
=> #<MatchData "ff">
</code></pre>
<p>As expected, when we negate this character class, we can no longer match neither the ligature character <code>\ufb00</code> nor the string <code>ff</code>.</p>
<pre><code>irb(main):003:0> /\A[^\ufb00]\z/i.match("\ufb00")
=> nil
irb(main):004:0> /\A[^\ufb00]\z/i.match("ff")
=> nil
</code></pre>
<p>Then, when we add a second negation, the <code>\ufb00</code> ligature reappears in the character set but the string <code>ff</code> is no longer accepted.</p>
<pre><code>irb(main):005:0> /\A[^[^\ufb00]]\z/i.match("\ufb00")
=> #<MatchData "ff">
irb(main):006:0> /\A[^[^\ufb00]]\z/i.match("ff")
=> nil
</code></pre>
<p>This reveals that the multi-code-point matches in character classes are blocked by negation. However, this is implemented only by checking whether the topmost character class is negated. If we wrap the character class in another set of brackets, the semantics change.</p>
<pre><code>irb(main):007:0> /\A[[^[^\ufb00]]]\z/i.match("\ufb00")
=> #<MatchData "ff">
irb(main):008:0> /\A[[^[^\ufb00]]]\z/i.match("ff")
=> #<MatchData "ff">
</code></pre>
<p>The cause behind this discrepancy (the fact that <code>[^[^\ufb00]]</code> and <code>[[^[^\ufb00]]]</code> match different strings) is the extra <code>IS_NCCLASS_NOT</code> check in <code>i_apply_case_fold</code> (<a href="https://github.com/ruby/ruby/blob/9eae8cdefba61e9e51feb30a4b98525593169666/regparse.c#L5568" class="external">https://github.com/ruby/ruby/blob/9eae8cdefba61e9e51feb30a4b98525593169666/regparse.c#L5568</a>).</p>
Ruby master - Bug #18010 (Open): Character class with single character gets case-folded with foll...
https://redmine.ruby-lang.org/issues/18010
2021-06-28T09:30:01Z
jirkamarsik (Jirka Marsik)
<pre><code>irb(main):001:0> /ff/i.match("\ufb00")
=> #<MatchData "ff">
irb(main):002:0> /[f]f/i.match("\ufb00")
=> #<MatchData "ff">
irb(main):003:0> /f[f]/i.match("\ufb00")
=> nil
irb(main):004:0> /[f][f]/i.match("\ufb00")
=> nil
irb(main):005:0> /(?:f)f/i.match("\ufb00")
=> nil
irb(main):006:0> /f(?:f)/i.match("\ufb00")
=> nil
irb(main):007:0> /(?:f)(?:f)/i.match("\ufb00")
=> nil
</code></pre>
<p>In the above, singleton character classes (<code>[...]</code>) and even parentheses (<code>(?:...)</code>) break up string literals, forcing each separate substring to be matched against separately. However, in the one case when a singleton character class precedes a string, it is joined with it as an optimization. However, this optimization ends up changing the semantics of the Regexp.</p>
Ruby master - Bug #17990 (Open): Inconsistent behavior of Regexp quantifiers over characters with...
https://redmine.ruby-lang.org/issues/17990
2021-06-15T11:59:27Z
jirkamarsik (Jirka Marsik)
<p>With case insensitive Regexps, the string <code>"ff"</code> is considered equal to the string <code>"\ufb00"</code> with a single ligature character.</p>
<pre><code>irb(main):001:0> /ff/i.match("\ufb00")
=> #<MatchData "ff">
</code></pre>
<p>This behavior also persists when the string <code>"ff"</code> doesn't appear literally in the Regexp source but is expressed using a fixed-length quantifier, as in the following:</p>
<pre><code>irb(main):002:0> /f{2}/i.match("\ufb00")
=> #<MatchData "ff">
irb(main):003:0> /f{2,2}/i.match("\ufb00")
=> #<MatchData "ff">
</code></pre>
<p>However, this doesn't hold in general. When using other quantifiers, the ligature character <code>"\ufb00"</code> is not recognized a sequence of two <code>"f"</code> characters.</p>
<pre><code>irb(main):004:0> /f*/i.match("\ufb00")
=> #<MatchData "">
irb(main):005:0> /f+/i.match("\ufb00")
=> nil
irb(main):006:0> /f{1,}/i.match("\ufb00")
=> nil
irb(main):007:0> /f{1,2}/i.match("\ufb00")
=> nil
irb(main):008:0> /f{,2}/i.match("\ufb00")
=> #<MatchData "">
irb(main):009:0> /ff?/i.match("\ufb00")
=> nil
</code></pre>
<p>This leads to inconsistent behavior where a Regexp like <code>/f{1,2}/i</code> matches <em>fewer</em> strings than the more strict Regexp <code>/f{2,2}/i</code>.</p>
<p>I suspect that this is caused by the pattern analyzer directly expanding <code>/f{2}/i</code> and <code>/f{2,2}/i</code> into <code>/ff/i</code>. However, this optimization then changes the semantics of the Regexp, as it is otherwise impossible to match a single ligature character via multiple repetitions of a quantified expression.</p>
<p>While experimenting with this case, I have also discovered a related issue (caused by the problematic expansions of <code>/f{n}/i</code> and the issue reported here: <a href="https://bugs.ruby-lang.org/issues/17989" class="external">https://bugs.ruby-lang.org/issues/17989</a>).</p>
<p>These match:</p>
<pre><code>/f{100}/i.match("f" * 100)
/f{100}/i.match("\ufb00" * 50)
/f{100}/i.match("\ufb00" * 49 + "ff")
/f{100}/i.match("ff" + "\ufb00" * 49)
</code></pre>
<p>However, this doesn't match:</p>
<pre><code>/f{100}/i.match("f" + "\ufb00" * 49 + "f")
</code></pre>
Ruby master - Bug #17989 (Open): Case insensitive Regexps do not handle characters with overlappi...
https://redmine.ruby-lang.org/issues/17989
2021-06-15T11:43:14Z
jirkamarsik (Jirka Marsik)
<p>When a Regexp uses the case-insensitive flag, strings are compared by first case folding them and then comparing the case foldings for equality. When a literal string is encountered in a Regexp source, the pattern analyzer tries to enumerate all possible strings that would case fold to the same string as the string in the pattern. In this way, case folding can be avoided when the Regexp is used to match. However, the algorithm used to enumerate all the possible strings which case fold to the same string is not complete. It assumes that the case foldings of different characters do not overlap (i.e. the multi-character case folding of some character cannot be a prefix or suffix of the multi-character case folding of some other character). However, this is not the case for several Unicode characters.</p>
<p>In the code below, many of the equalities <code>A == B</code>, tested via <code>/A/i.match("B")</code>, do not hold. Those that do hold hold only because the number of case-equivalent strings detected by the analyzer crosses a threshold at which point the analyzer abandons this optimization.</p>
<pre><code>/\ufb00/i.match("ff") # LATIN SMALL LIGATURE FF
/\ufb01/i.match("fi") # LATIN SMALL LIGATURE FI
/\ufb02/i.match("fl") # LATIN SMALL LIGATURE FL
/\ufb03/i.match("ffi") # LATIN SMALL LIGATURE FFI
/\ufb04/i.match("ffl") # LATIN SMALL LIGATURE FFL
# (ff)i == (ffi)
/\ufb00i/i.match("\ufb03")
# (ffi) == (ff)i
/\ufb03/i.match("\ufb00i")
# f(fi) == (ffi)
/f\ufb01/i.match("\ufb03")
# (ffi) == f(fi)
/\ufb03/i.match("f\ufb01")
# (ff)l == (ffl)
/\ufb00l/i.match("\ufb04")
# (ffl) == (ff)l
/\ufb04/i.match("\ufb00l")
# f(fl) == (ffl)
/f\ufb02/i.match("\ufb04")
# (ffl) == f(fl)
/\ufb04/i.match("f\ufb02")
/\u1f50/i.match("\u03c5\u0313") # GREEK SMALL LETTER UPSILON WITH PSILI
/\u1f52/i.match("\u03c5\u0313\u0300") # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
/\u1f54/i.match("\u03c5\u0313\u0301") # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
/\u1f56/i.match("\u03c5\u0313\u0342") # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
# (upsilon psili) varia == (upsilon psili varia)
/\u1f50\u0300/i.match("\u1f52")
# (upsilon psili varia) == (upsilon psili) varia
/\u1f52/i.match("\u1f50\u0300")
# (upsilon psili) oxia == (upsilon psili oxia)
/\u1f50\u0301/i.match("\u1f54")
# (upsilon psili oxia) == (upsilon psili) oxia
/\u1f54/i.match("\u1f50\u0301")
# (upsilon psili) perispomeni == (upsilon psili perispomeni)
/\u1f50\u0342/i.match("\u1f56")
# (upsilon psili perispomeni) == (upsilon psili) perispomeni
/\u1f56/i.match("\u1f50\u0342")
/\u1fb6/i.match("\u03b1\u0342") # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
/\u1fb7/i.match("\u03b1\u0342\u03b9") # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
# (alpha perispomeni) ypogegrammeni == (alpha perispomeni ypogegrammeni)
/\u1fb6\u03b9/i.match("\u1fb7")
# (alpha perispomeni ypogegrammeni) == (alpha perispomeni) ypogegrammeni
/\u1fb7/i.match("\u1fb6\u03b9")
/\u1fc6/i.match("\u03b7\u0342") # GREEK SMALL LETTER ETA WITH PERISPOMENI
/\u1fc7/i.match("\u03b7\u0342\u03b9") # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
# (eta perispomeni) ypogegrammeni == (eta perispomeni ypogegrammeni)
/\u1fc6\u03b9/i.match("\u1fc7")
# (eta perispomeni ypogegrammeni) == (eta perispomeni) ypogegrammeni
/\u1fc7/i.match("\u1fc6\u03b9")
/\u1ff6/i.match("\u03c9\u0342") # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
/\u1ff7/i.match("\u03c9\u0342\u03b9") # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
# (omega perispomeni) ypogegrammeni == (omega perispomeni ypogegrammeni)
/\u1ff6\u03b9/i.match("\u1ff7")
# (omega perispomeni ypogegrammeni) == (omega perispomeni) ypogegrammeni
/\u1ff7/i.match("\u1ff6\u03b9")
</code></pre>
Ruby master - Bug #17931 (Open): Compile fails setup option nodynamic
https://redmine.ruby-lang.org/issues/17931
2021-05-31T11:21:13Z
Terabin (Allyson Souza Bacon)
<p>I can compile the ruby normally without deselecting the #option nodinamyc and some other extension, but when deselecting I get the following error</p>
<pre><code class="shell syntaxhl" data-language="shell">rbconfig.rb updated
generating enc.mk
making srcs under enc
generating transdb.h
transdb.h updated
compiling C:/ruby-3.0.1/dln.c
dln.c
compiling C:/ruby-3.0.1/localeinit.c
localeinit.c
creating verconf.h
verconf.h updated
compiling C:/ruby-3.0.1/loadpath.c
loadpath.c
builtin_binary.inc updated
compiling C:/ruby-3.0.1/builtin.c
builtin.c
linking static-library x64-vcruntime140-ruby300-static.lib
generating x64-vcruntime140-ruby300.def
linking import-library x64-vcruntime140-ruby300.lib
Criando biblioteca x64-vcruntime140-ruby300.lib e objeto x64-vcruntime140-ruby300.exp
generating makefiles ext/configure-ext.mk
ext/configure-ext.mk updated
configuring fiddle
libffi_version: 3.2.1
generating makefile exts.mk
exts.mk updated
The system cannot find the path specified.
NMAKE : fatal error U1077: <span class="s1">'cd'</span> : código de retorno <span class="s1">'0x1'</span>
Stop.
NMAKE : fatal error U1077: <span class="s1">'"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64\nmake.EXE"'</span> : código de retorno <span class="s1">'0x2'</span>
Stop.
C:<span class="se">\r</span>build2>
</code></pre>
<p>I tested at visual studio 2017 and 2019.</p>
<p><strong>How to reproduce</strong></p>
<pre><code class="shell syntaxhl" data-language="shell"><span class="nb">set </span><span class="nv">PATH</span><span class="o">=</span>C:<span class="se">\P</span>rogram Files <span class="o">(</span>x86<span class="o">)</span><span class="se">\M</span>icrosoft Visual Studio<span class="se">\2</span>019<span class="se">\C</span>ommunity<span class="se">\V</span>C<span class="se">\T</span>ools<span class="se">\M</span>SVC<span class="se">\1</span>4.28.29910<span class="se">\b</span><span class="k">in</span><span class="se">\H</span>ostx64<span class="se">\x</span>64<span class="p">;</span>%PATH%
<span class="nb">cd </span>C:<span class="se">\r</span>build_x64
<span class="nb">cd </span>C:<span class="se">\r</span>build2
C:<span class="se">\r</span>uby-3.0.1<span class="se">\w</span>in32<span class="se">\c</span>onfigure.bat <span class="nt">--disable-dln</span> <span class="nt">--with-static-link-ext</span> <span class="nt">--enable-shared</span><span class="o">=</span>no
</code></pre>
Ruby master - Bug #17925 (Open): Pattern matching syntax using semicolon one-line
https://redmine.ruby-lang.org/issues/17925
2021-05-29T15:26:37Z
koic (Koichi ITO)
koic.ito@gmail.com
<a name="Summary"></a>
<h2 >Summary<a href="#Summary" class="wiki-anchor">¶</a></h2>
<p>There are the following differences between <code>case ... when</code> and<code> case ... in</code>. Is this an expected behavior?</p>
<pre><code class="console syntaxhl" data-language="console"><span class="go">% ruby -v
ruby 3.1.0dev (2021-05-28T16:34:27Z master e56ba6231f) [x86_64-darwin19]
</span><span class="gp">% ruby -ce 'case expression when 42;</span><span class="w"> </span>end<span class="s1">'
</span><span class="go">Syntax OK
</span><span class="gp">% ruby -ce 'case expression in 42;</span><span class="w"> </span>end<span class="s1">'
</span><span class="go">-e:1: warning: One-line pattern matching is experimental, and the behavior may change in future versions of Ruby!
-e:1: syntax error, unexpected `end', expecting `when'
</span><span class="gp">case expression in 42;</span><span class="w"> </span>end
</code></pre>
<p>So, I have two concerns.</p>
<ul>
<li>Since the pattern matching syntax is different from <code>case ... when</code>, can't user write semicolon one-line <code>case ... in</code> in the same semicolon one-line as <code>case ... when</code>?</li>
<li>Does <code>case expression in 42; end</code> display an experimental warning of one-line pattern matching. Right?</li>
</ul>
<p>This is reproduced in Ruby 3.1.0-dev and Ruby 3.0.1.</p>
<a name="Additional-Information"></a>
<h2 >Additional Information<a href="#Additional-Information" class="wiki-anchor">¶</a></h2>
<p>NOTE 1: I understand that only syntax that doesn't use <code>case</code> and <code>end</code> is experimental one-line pattern matching syntax.</p>
<pre><code>% ruby -ce 'expression in 42'
-e:1: warning: One-line pattern matching is experimental, and the behavior may change in future versions of Ruby!
Syntax OK
</code></pre>
<p>NOTE 2: The syntax is OK if a semicolon is used between <code>expression</code> and <code>in</code>. But <code>case ... when</code> is a valid syntax to omit.</p>
<pre><code>% ruby -e ruby -ce 'case expression; in 42; end'
Syntax OK
</code></pre>
Ruby master - Bug #17878 (Open): bootstraptest/test_ractor.rb:224 a random failing test with "The...
https://redmine.ruby-lang.org/issues/17878
2021-05-21T14:25:41Z
jaruga (Jun Aruga)
<p>I was running Travis several times I am trying to revive based on the master commit: <code>50a534a1526e2b9f4ea41e44b802bd73f9cebbeb</code>.<br>
Then I got the following failure on Travis arm64 Ubuntu focal environment. The failure happened for the first time in around 5 times.</p>
<p>Here is the Travis log.<br>
<a href="https://travis-ci.com/github/junaruga/ruby/jobs/506885939#L2227" class="external">https://travis-ci.com/github/junaruga/ruby/jobs/506885939#L2227</a></p>
<pre><code>$ $SETARCH make -s test -o showflags TESTOPTS="${TESTOPTS=-j33 -q --tty=no}"
...
test_ractor.rb ....................Fstderr output is not empty
<internal:ractor>:345:in `select': The outgoing-port is already closed (Ractor::ClosedError)
from bootstraptest.tmp.rb:12:in `block in test'
from bootstraptest.tmp.rb:11:in `times'
from bootstraptest.tmp.rb:11:in `test'
from bootstraptest.tmp.rb:26:in `block in <main>'
from bootstraptest.tmp.rb:25:in `times'
from bootstraptest.tmp.rb:25:in `each'
from bootstraptest.tmp.rb:25:in `map'
from bootstraptest.tmp.rb:25:in `<main>'
</code></pre>
<pre><code>Fiber count: 10000 (skipping)
#1213 test_ractor.rb:224:in `<top (required)>':
def test n
rs = (1..n).map do |i|
Ractor.new(i) do |i|
"r#{i}"
end
end
as = []
all_rs = rs.dup
n.times{
r, obj = Ractor.select(*rs)
as << [r, obj]
rs.delete(r)
}
if as.map{|r, o| r.object_id}.sort == all_rs.map{|r| r.object_id}.sort &&
as.map{|r, o| o}.sort == (1..n).map{|i| "r#{i}"}.sort
'ok'
else
'ng'
end
end
30.times.map{|i|
test i
}
#=> "" (expected "[\"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\"]")
FAIL 1/1488 tests failed
make: *** [uncommon.mk:768: yes-btest-ruby] Error 1
The command "$SETARCH make -s test -o showflags TESTOPTS="${TESTOPTS=$JOBS -q --tty=no}"" exited with 2.
</code></pre>
Ruby master - Bug #17792 (Open): make notes and make test fail with Ruby3.0.1p64 RaspberryPI 4B U...
https://redmine.ruby-lang.org/issues/17792
2021-04-10T04:41:08Z
hanlyusarang (Hanlyu Sarang)
<p>I am building Ruby 3.01 from sources on a RaspberryPI 4B running Ubuntu 20.10 ARM64.</p>
<p>This is my first day using this PI4B + Ubuntu 20.10 ARM64, and this is the first time I have attempted to build Ruby on it.<br>
I received a few notes during compilation and one failure during testing.</p>
<p>Note that on the previous day, I built the same Ruby sources on the same machine running RaspberryPI OS (32-bit Debian), no problems. FYI, you can use either a 32-bit or a 64-bit OS on the RasberryPI 4B.</p>
<p>Anyway, here are the details of what I experienced on the PI4B using Ubuntu 20.10 ARM64:</p>
<p>During the make, I get a few notes:</p>
<p>compiling parse.c<br>
parse.y: In function ‘node_assign’:<br>
parse.y:11265:1: note: parameter passing for argument of type ‘struct lex_context’ changed in GCC 9.1<br>
11265 | node_assign(struct parser_params *p, NODE *lhs, NODE *rhs, struct lex_context ctxt, const YYLTYPE *loc)<br>
| ^~~~~~~~~~~<br>
parse.y: In function ‘new_const_op_assign’:<br>
parse.y:12283:1: note: parameter passing for argument of type ‘struct lex_context’ changed in GCC 9.1<br>
12283 | new_const_op_assign(struct parser_params *p, NODE *lhs, ID op, NODE *rhs, struct lex_context ctxt, const YYLTYPE *loc)<br>
| ^~~~~~~~~~~~~~~~~~~<br>
parse.y: In function ‘new_op_assign’:<br>
parse.y:12196:1: note: parameter passing for argument of type ‘struct lex_context’ changed in GCC 9.1<br>
12196 | new_op_assign(struct parser_params *p, NODE *lhs, ID op, NODE *rhs, struct lex_context ctxt, const YYLTYPE *loc)<br>
| ^~~~~~~~~~~~~<br>
compiling proc.c</p>
<p>The build is successful, but when I run make test, I get one failure</p>
<p>/home/pi/builds/ruby-3.0.1# make test<br>
BASERUBY = /usr/bin/ruby --disable=gems<br>
CC = gcc<br>
LD = ld<br>
LDSHARED = gcc -shared<br>
CFLAGS = -O3 -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -std=gnu99<br>
XCFLAGS = -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-overflow -fvisibility=hidden -fexcess-precision=standard -DRUBY_EXPORT -fPIE -I. -I.ext/include/aarch64-linux -I./include -I. -I./enc/unicode/12.1.0<br>
CPPFLAGS =<br>
DLDFLAGS = -Wl,--compress-debug-sections=zlib -fstack-protector-strong -pie<br>
SOLIBS = -lz -lpthread -lrt -lrt -lgmp -ldl -lcrypt -lm<br>
LANG = en_US.UTF-8<br>
LC_ALL =<br>
LC_CTYPE =<br>
MFLAGS =<br>
gcc (Ubuntu 10.2.0-13ubuntu1) 10.2.0<br>
Copyright (C) 2020 Free Software Foundation, Inc.<br>
This is free software; see the source for copying conditions. There is NO<br>
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</p>
<p>./revision.h unchanged<br>
<a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: Query part lost when using Net::HTTP.post_form function (Closed)" href="https://redmine.ruby-lang.org/issues/655">#655</a> test_io.rb:87:in `block in <top (required)>':<br>
at_exit { p :foo }</p>
<pre><code> megacontent = "abc" * 12345678
#File.open("megasrc", "w") {|f| f << megacontent }
t0 = Thread.main
Thread.new { sleep 0.001 until t0.stop?; Process.kill(:INT, $$) }
r1, w1 = IO.pipe
r2, w2 = IO.pipe
t1 = Thread.new { w1 << megacontent; w1.close }
t2 = Thread.new { r2.read; r2.close }
IO.copy_stream(r1, w2) rescue nil
w2.close
r1.close
t1.join
t2.join
</code></pre>
<p>#=> killed by SIGKILL (signal 9) (timeout) megacontent-copy_stream<br>
test_io.rb FAIL 1/9<br>
Fiber count: 10000 (skipping)<br>
FAIL 1/1486 tests failed<br>
make: *** [uncommon.mk:766: yes-btest-ruby] Error 1</p>
<p>I went ahead and did the make install, which succeeded.<br>
I now have an installation of Ruby which I will be working with over the next few months to see if it works OK.</p>
<p>If you need more info, please let me know.</p>
Ruby master - Bug #17774 (Open): Quantified empty group causes regex to fail
https://redmine.ruby-lang.org/issues/17774
2021-04-04T08:08:53Z
Davidebyzero (David Ellsworth)
<p>The regex <code>^((x*)(?=\2$))*x$</code> matches powers of 2 in unary, expressed as strings of <code>x</code> characters whose length is the number.</p>
<p>Adding an empty group <code>()</code> in the middle of it should have no effect on its operation, and indeed it does not. <code>^((x*)()(?=\2$))*x$</code> still matches powers of 2 just fine.<br>
Quantifying that empty group, <code>(){4}</code>, should still have no effect. And indeed, <code>^((x*)(){4}(?=\2$))*x$</code> still matches powers of 2. But quantify that to <code>(){5}</code>, and suddenly it fails.</p>
<p>The following command line should print <code>1</code>, but instead prints nothing:</p>
<pre><code>ruby -e 'print 1 if "x"*32 =~ /^((x*)(){5}(?=\2$))*x$/'
</code></pre>
<p>However this one does print <code>1</code>:</p>
<pre><code>ruby -e 'print 1 if "x"*32 =~ /^((x*)(){4}(?=\2$))*x$/'
</code></pre>
<p>Bug found to occur on <a href="https://tio.run/" class="external">Try It Online</a>: <code>ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-linux]</code><br>
Bug confirmed to happen on my own machine: <code>ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-msys]</code></p>
<p>Solving the challenge <a href="https://codegolf.stackexchange.com/questions/211840/is-that-number-a-two-bit-number%ef%b8%8f/222792#222792" class="external">Is that number a Two Bit Number™️?</a> on Code Golf Stack Exchange is what led me to discover this bug.</p>
Ruby master - Bug #16997 (Open): IO#gets converts some \r\n to \n with universal_newline: false
https://redmine.ruby-lang.org/issues/16997
2020-06-27T21:26:48Z
scivola20 (sciv ola)
<p>Reproduction code:</p>
<pre><code>IO.binwrite "t.csv", ("a" * 100 + "\r\n") * 100
File.open("t.csv", encoding: "BOM|UTF-8", universal_newline: false) do |input|
p input.gets(nil, 32 * 1024) # => "a...a\n...\na...a\r\n...\r\n"
end
</code></pre>
<p>It causes MalformedCSVError at opening CSV file with `encoding: "BOM|UTF-8":<br>
<a href="https://github.com/ruby/csv/issues/147" class="external">https://github.com/ruby/csv/issues/147</a></p>
Ruby master - Bug #16829 (Open): Exceptions raised from within an enumerated method lose part of ...
https://redmine.ruby-lang.org/issues/16829
2020-05-04T21:15:14Z
doliveirakn (Kyle d'Oliveira)
<p>Consider the following code:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Test</span>
<span class="kp">include</span> <span class="no">Enumerable</span>
<span class="k">def</span> <span class="nf">each</span><span class="p">(</span><span class="o">&</span><span class="n">block</span><span class="p">)</span>
<span class="k">raise</span> <span class="s2">"Boom"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">execution_method_a</span>
<span class="no">Test</span><span class="p">.</span><span class="nf">new</span><span class="p">.</span><span class="nf">to_enum</span><span class="p">(</span><span class="ss">:each</span><span class="p">).</span><span class="nf">next</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">execution_method_b</span>
<span class="no">Test</span><span class="p">.</span><span class="nf">new</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span>
<span class="c1"># Never gets run</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">begin</span>
<span class="n">execution_method_a</span>
<span class="k">rescue</span> <span class="no">RuntimeError</span> <span class="o">=></span> <span class="n">e</span>
<span class="nb">puts</span> <span class="s2">"Using to_enum and next"</span>
<span class="nb">puts</span> <span class="n">e</span><span class="p">.</span><span class="nf">message</span>
<span class="nb">puts</span> <span class="n">e</span><span class="p">.</span><span class="nf">backtrace</span>
<span class="k">end</span>
<span class="k">begin</span>
<span class="n">execution_method_b</span>
<span class="k">rescue</span> <span class="no">RuntimeError</span> <span class="o">=></span> <span class="n">e</span>
<span class="nb">puts</span> <span class="s2">"Calling a block directly"</span>
<span class="nb">puts</span> <span class="n">e</span><span class="p">.</span><span class="nf">message</span>
<span class="nb">puts</span> <span class="n">e</span><span class="p">.</span><span class="nf">backtrace</span>
<span class="k">end</span>
</code></pre>
<p>When this file (located at lib/script.rb) is run the result is:</p>
<pre><code>Using to_enum and next
Boom
lib/script.rb:5:in `each'
lib/script.rb:1:in `each'
Calling a block directly
Boom
lib/script.rb:5:in `each'
lib/script.rb:14:in `execution_method_b'
lib/script.rb:29:in `<main>'
</code></pre>
<p>This is a little unusual. Effectively, if we create an enumerator and use <code>next</code> to iterate through the results, the backtrace is modified to the point where the calling method(s) are entirely lose. Notice when the <code>each</code> method is used directly and an exception is thrown, we see <code>execution_method_b</code> present in the stacktrace, but if we use <code>next</code> we do not see <code>execution_method_a</code> present at all.</p>
<p>This means that if there is some code that uses the enumerator/next approach deep within a callstack, the exception that comes out does not have any crucial information of where the call originated from.</p>
Ruby master - Bug #15599 (Open): Mixing autoload and require causes deadlock and incomplete defin...
https://redmine.ruby-lang.org/issues/15599
2019-02-12T13:40:45Z
akr (Akira Tanaka)
akr@fsij.org
<p>I found that mixing autoload and require causes deadlock and incomplete definition.</p>
<pre><code>% cat a.rb
class A
def a1() end
end
% cat base.rb
autoload :A, './a'
t1 = Thread.new { p A.instance_methods(false) }
t2 = Thread.new { require './a' }
t1.join
t2.join
% ruby base.rb
Traceback (most recent call last):
1: from base.rb:6:in `<main>'
base.rb:6:in `join': No live threads left. Deadlock? (fatal)
3 threads, 3 sleeps current:0x000055cc6943fde0 main thread:0x000055cc6935f4b0
* #<Thread:0x000055cc6938f190 sleep_forever>
rb_thread_t:0x000055cc6935f4b0 native:0x00007f58d256eb40 int:0
base.rb:6:in `join'
base.rb:6:in `<main>'
* #<Thread:0x000055cc6968cfc8@base.rb:3 sleep_forever>
rb_thread_t:0x000055cc69736180 native:0x00007f58ce7b3700 int:0 mutex:0x000055cc6943fde0 cond:1
depended by: tb_thread_id:0x000055cc6935f4b0
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
base.rb:3:in `block in <main>'
* #<Thread:0x000055cc6968ccd0@base.rb:4 sleep_forever>
rb_thread_t:0x000055cc6943fde0 native:0x00007f58ce5b1700 int:0
/tmp/a/a.rb:1:in `<top (required)>'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
base.rb:4:in `block in <main>'
% ruby base.rb
[:a1]
% ruby base.rb
[]
</code></pre>
<p>The last run which prints [] means incomplete definition of A which a1 method is not defined.</p>
Ruby master - Bug #15598 (Open): Deadlock on mutual reference of autoloaded constants
https://redmine.ruby-lang.org/issues/15598
2019-02-11T12:39:41Z
akr (Akira Tanaka)
akr@fsij.org
<p>Mutual reference of autoloaded constants can cause deadlock sporadically.</p>
<p>Assume A is defined in a.rb and it uses B at loading time.<br>
Also, B is defined in b.rb and it uses A at loading time.</p>
<pre><code>% cat a.rb
class A
def a1() end
p [__FILE__, __LINE__, B.instance_methods(false)]
def a2() end
end
% cat b.rb
class B
def b1() end
p [__FILE__, __LINE__, A.instance_methods(false)]
def b2() end
end
</code></pre>
<p>If they are loaded via autoload and constants are referenced sequentially,<br>
it works (no error, at least).</p>
<p>However, incomplete A (which a2 is not defined) is appear in b.rb, though.</p>
<pre><code>% cat base_seq.rb
autoload :A, "./a"
autoload :B, "./b"
A
B
% ruby base_seq.rb
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, [:b1, :b2]]
</code></pre>
<p>However, the constants are referenced in multi threads,<br>
deadlock can occur, or works like sequential version, sporadically.</p>
<pre><code>% cat base_thread_const.rb
autoload :A, "./a"
autoload :B, "./b"
t1 = Thread.new { A }
t2 = Thread.new { B }
t1.join
t2.join
% ruby base_thread_const.rb
Traceback (most recent call last):
1: from base_thread_const.rb:5:in `<main>'
base_thread_const.rb:5:in `join': No live threads left. Deadlock? (fatal)
3 threads, 3 sleeps current:0x000055f9e2fa1b00 main thread:0x000055f9e2ec14b0
* #<Thread:0x000055f9e2eef188 sleep_forever>
rb_thread_t:0x000055f9e2ec14b0 native:0x00007f259bc54b40 int:0
base_thread_const.rb:5:in `join'
base_thread_const.rb:5:in `<main>'
* #<Thread:0x000055f9e31ece30@base_thread_const.rb:3 sleep_forever>
rb_thread_t:0x000055f9e31403c0 native:0x00007f2597e99700 int:0
depended by: tb_thread_id:0x000055f9e2ec14b0
/tmp/h/a.rb:3:in `<class:A>'
/tmp/h/a.rb:1:in `<top (required)>'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
base_thread_const.rb:3:in `block in <main>'
* #<Thread:0x000055f9e31ecbb0@base_thread_const.rb:4 sleep_forever>
rb_thread_t:0x000055f9e2fa1b00 native:0x00007f258ffff700 int:0
/tmp/h/b.rb:3:in `<class:B>'
/tmp/h/b.rb:1:in `<top (required)>'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
base_thread_const.rb:4:in `block in <main>'
% ruby base_thread_const.rb
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, [:b1, :b2]]
</code></pre>
<p>Also, if "require" is used instead of constant references in the threads,<br>
deadlock can occur (sporadically) too.</p>
<p>Note that incomplete A can appear in b.rb and<br>
incomplete B can appear in a.rb.<br>
The incompleteness vary.</p>
<pre><code>% cat base_thread_require.rb
autoload :A, "./a"
autoload :B, "./b"
t1 = Thread.new { require './a' }
t2 = Thread.new { require './b' }
t1.join
t2.join
% ruby base_thread_require.rb
Traceback (most recent call last):
1: from base_thread_require.rb:5:in `<main>'
base_thread_require.rb:5:in `join': No live threads left. Deadlock? (fatal)
3 threads, 3 sleeps current:0x00005591a27f5190 main thread:0x00005591a24264b0
* #<Thread:0x00005591a24531a0 sleep_forever>
rb_thread_t:0x00005591a24264b0 native:0x00007feced36ab40 int:0
base_thread_require.rb:5:in `join'
base_thread_require.rb:5:in `<main>'
* #<Thread:0x00005591a2754cc8@base_thread_require.rb:3 sleep_forever>
rb_thread_t:0x00005591a27f5190 native:0x00007fece95af700 int:0
depended by: tb_thread_id:0x00005591a24264b0
/tmp/h/a.rb:1:in `<top (required)>'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
base_thread_require.rb:3:in `block in <main>'
* #<Thread:0x00005591a2754a98@base_thread_require.rb:4 sleep_forever>
rb_thread_t:0x00005591a2506b00 native:0x00007fece13ad700 int:0 mutex:0x00005591a27f5190 cond:1
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/tmp/h/b.rb:3:in `<class:B>'
/tmp/h/b.rb:1:in `<top (required)>'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
base_thread_require.rb:4:in `block in <main>'
% ruby base_thread_require.rb
["/tmp/h/b.rb", 3, []]
["/tmp/h/a.rb", 3, [:b1]]
% repeat 100 (ruby base_thread_require.rb >& /tmp/z && cat /tmp/z)
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/b.rb", 3, []]
["/tmp/h/a.rb", 3, [:b1]]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, [:b1, :b2]]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, [:b1, :b2]]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, [:b1, :b2]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, [:b1, :b2]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, [:b1]]
["/tmp/h/b.rb", 3, [:a1, :a2]]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, [:b1, :b2]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
</code></pre>
<p>I think there are several ways to solve this issue.</p>
<ul>
<li>Prohibit mutual reference.<br>
I.e. raise an error at autoload constant reference currently loading.<br>
Since mutual reference causes incomplete definition, it is dangerous even with single thread.<br>
However, if real application uses such code, this is incompatible.</li>
<li>More coarse locking.<br>
Since the deadlock is caused because two threads lock the constants in different order:<br>
A to B and B to A.<br>
I think it is possible to fix this issue by locking whole autoloading procedure by<br>
single lock, namely "global autoload lock".<br>
Note that it should also be locked by "require" method if it load a file for autoload.</li>
</ul>
Ruby master - Bug #15423 (Open): fork leapfrog leaks memory on FreeBSD 11.2
https://redmine.ruby-lang.org/issues/15423
2018-12-16T14:28:54Z
normalperson (Eric Wong)
normalperson@yhbt.net
<p>It happens on 2.4.5, too; so it's not a new problem.<br>
fork leap-frogging (without exec) is an uncommon case,<br>
so I'll let somebody else fix it.</p>
Ruby master - Bug #15386 (Open): [PATCH] io.c (rb_io_check_char_readable): do not io_fflush buffe...
https://redmine.ruby-lang.org/issues/15386
2018-12-06T11:38:00Z
normalperson (Eric Wong)
normalperson@yhbt.net
<pre><code>This is a rare corner-case probably nobody cares about. (because
socket has IO#sync=false by default). Not critical to fix
or change before 2.6 (I'm not sure if there's a compatibility risk).
Would much appreciate an extra set of eyes to review; but it can wait
for post-26.
[I tried taking a break from C and ruby-core to work on a different
project today; but hit this bug within an hour of doing that :<]
io.c (rb_io_check_char_readable): do not io_fflush buffered sockets
I enabled userspace buffering on sockets to reduce syscall
overhead while avoiding non-portable TCP_CORK/TCP_NOPUSH.
This deadlocked for me because I was using independent threads
for reading and writing simultaneously on the same socket.
I also experimented with making io_fflush optionally
non-blocking, but that caused stream corruption with the reader
thread doing some writes.
https://80x24.org/spew/20181206104008.29153-1-e@80x24.org/raw
Test script (hitting
news://news.public-inbox.org/inbox.comp.version-control.git
is fine)
require 'socket'
require 'uri'
require 'io/nonblock'
usage = "usage: #$0 news://news.public-inbox.org/inbox.comp.version-control.git"
uri = ARGV.shift or abort usage
uri = URI(uri)
uri.port ||= 119
group = uri.path.sub(%r{\A/+}, '') # String#delete_prefix requires Ruby 2.5+
s = Socket.tcp(uri.host, uri.port)
l = s.gets
l =~ /\A2\d\d / or abort "bad greeting: #{l}"
s.nonblock = true
s.puts "GROUP #{group}"
l = s.gets
code, _, min, max = l.chomp!.split.map!(&:to_i)
code == 211 or abort "bad GROUP response: #{l}"
rdr = Thread.new do
nres = 0
r = s.dup
while l = r.gets
l.start_with?('205 ') and break # cmd_quit
l.start_with?('224 ') or abort "bad OVER response: #{l}"
while l = r.gets
if l == ".\r\n"
nres += 1
break
end
end
end
nres
end
range = min..max
s.sync = false
range.each { |i| s.puts "XOVER #{i}" }
puts "requests=#{range.size} #{Time.now}"
s.puts "QUIT"
s.flush
puts "responses=#{rdr.value} #{Time.now}"
</code></pre>
Ruby master - Bug #15367 (Open): IO.select is not resumed when io-object gets closed
https://redmine.ruby-lang.org/issues/15367
2018-12-02T16:48:52Z
printercu (Max Melentiev)
melentievm@gmail.com
<p>Here is sample code:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">rp</span><span class="p">,</span> <span class="n">wp</span> <span class="o">=</span> <span class="no">IO</span><span class="p">.</span><span class="nf">pipe</span>
<span class="n">t2</span> <span class="o">=</span> <span class="no">Thread</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span> <span class="no">IO</span><span class="p">.</span><span class="nf">select</span><span class="p">([</span><span class="n">rp</span><span class="p">])</span> <span class="p">}</span>
<span class="c1"># This also does not work:</span>
<span class="c1"># t2 = Thread.new { IO.select([rp], nil, [rp]) }</span>
<span class="nb">sleep</span> <span class="mf">0.01</span>
<span class="n">rp</span><span class="p">.</span><span class="nf">close</span>
<span class="n">t2</span>
<span class="c1"># => #<Thread:0x00000000089b6ce0@(pry):51 sleep></span>
</code></pre>
<p>It happens only on linux, tested with 2.5.1, 2.6.0-preview2. On macOS it gives error, as expected:</p>
<pre><code>#<Thread:0x00007fab3aebce58@(pry):5 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
1: from (pry):5:in `block in <main>'
(pry):5:in `select': Bad file descriptor (Errno::EBADF)
> t2
=> #<Thread:0x00007fab3aebce58@(pry):5 dead>
</code></pre>
Ruby master - Bug #15310 (Open): [PATCH] thread_pthread.c: close race from UBF_TIMER and non-GVL-...
https://redmine.ruby-lang.org/issues/15310
2018-11-16T02:30:10Z
normalperson (Eric Wong)
normalperson@yhbt.net
<p>thread_pthread.c: close race from UBF_TIMER and non-GVL-releasing thread</p>
<p>A Ruby thread may run without releasing the GVL if there is no<br>
contention. And there may be no contention because another<br>
thread missed its wakeup and needs to rely on ubf_list for<br>
wakeups. So we need to ensure the Ruby thread can relinquish<br>
GVL and trigger ubf_list wakeups to target thread when the POSIX<br>
timer fires.</p>
<p>Thus, we trigger a timeslice on SIGVTALRM when triggered by<br>
UBF_TIMER (we do not want excessive switching overhead on every<br>
SIGVTALRM signal, either).</p>
<p>Note: I'm pretty sure this is necessary, correct and would introduce no<br>
portability problems or performance overhead if I'm wrong...<br>
I could definitely use an extra set of eyes on this, though.</p>
Ruby master - Bug #14480 (Open): miniruby crashing when compiled with -O2 or -O1 on aarch64
https://redmine.ruby-lang.org/issues/14480
2018-02-16T08:54:55Z
vo.x (Vit Ondruch)
v.ondruch@tiscali.cz
<p>Recently, it is not possible to build Ruby 2.5.0 on aarch64 on Fedora Rawhide, because miniruby fails during build:</p>
<pre><code>... snip ...
./miniruby -I./lib -I. -I.ext/common -n \
-e 'BEGIN{version=ARGV.shift;mis=ARGV.dup}' \
-e 'END{abort "UNICODE version mismatch: #{mis}" unless mis.empty?}' \
-e '(mis.delete(ARGF.path); ARGF.close) if /ONIG_UNICODE_VERSION_STRING +"#{Regexp.quote(version)}"/o' \
10.0.0 ./enc/unicode/10.0.0/casefold.h ./enc/unicode/10.0.0/name2ctype.h
generating encdb.h
./miniruby -I./lib -I. -I.ext/common ./tool/generic_erb.rb -c -o encdb.h ./template/encdb.h.tmpl ./enc enc
generating prelude.c
./miniruby -I./lib -I. -I.ext/common ./tool/generic_erb.rb -I. -c -o prelude.c \
./template/prelude.c.tmpl ./prelude.rb ./gem_prelude.rb ./abrt_prelude.rb
*** stack smashing detected ***: <unknown> terminated
encdb.h updated
... snip ...
</code></pre>
<p>This might by Ruby or gcc issue. Not sure yet. However, there is already lengthy analysis available in Fedora's Bugzilla <a href="https://bugzilla.redhat.com/show_bug.cgi?id=1545239" class="external">1</a>. Would be anybody able to help to resolve this issue?</p>
Ruby master - Bug #13164 (Open): A second `SystemStackError` exception results in `Segmentation ...
https://redmine.ruby-lang.org/issues/13164
2017-01-27T13:41:42Z
myst (Boaz Segev)
<p>This issue is was exposed by leveraging the fact that <code>Object#hash</code> is implemented recursively for core Ruby datatypes (i.e., Hash and Array). See the discussion here: <a href="https://github.com/boazsegev/combine_pdf/pull/91#issuecomment-275552131" class="external">https://github.com/boazsegev/combine_pdf/pull/91#issuecomment-275552131</a>.</p>
<p>TO reproduce the issue, explode the stack <strong>twice</strong>.</p>
<p>Expected results:</p>
<p>SystemStackError will be raised both times.</p>
<p>Actual results:</p>
<p>SystemStackError is raised once. The second time will cause a core dump.</p>
<p>Code to cause core dump:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">compute_nest_depth</span>
<span class="n">h</span> <span class="o">=</span> <span class="p">{</span><span class="ss">nest: </span><span class="p">{}}</span>
<span class="n">nest</span> <span class="o">=</span> <span class="n">h</span><span class="p">[</span><span class="ss">:nest</span><span class="p">]</span>
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kp">true</span>
<span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">puts</span> <span class="s2">"nested </span><span class="si">#{</span><span class="n">i</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="p">((</span><span class="n">i</span> <span class="o">&</span> <span class="mi">511</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">next_nest</span> <span class="o">=</span> <span class="p">{</span> <span class="ss">nest: </span><span class="p">{}</span> <span class="p">}</span>
<span class="n">nest</span><span class="p">[</span><span class="ss">:nest</span><span class="p">]</span> <span class="o">=</span> <span class="n">next_nest</span>
<span class="n">nest</span> <span class="o">=</span> <span class="n">next_nest</span><span class="p">[</span><span class="ss">:nest</span><span class="p">]</span>
<span class="n">h</span><span class="p">.</span><span class="nf">hash</span>
<span class="k">end</span>
<span class="k">rescue</span> <span class="no">SystemStackError</span>
<span class="nb">puts</span> <span class="s2">"Stack exploded at nesting </span><span class="si">#{</span><span class="n">i</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="n">counter</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">while</span><span class="p">(</span><span class="kp">true</span><span class="p">)</span>
<span class="k">begin</span>
<span class="n">counter</span> <span class="o">+=</span><span class="mi">1</span>
<span class="nb">puts</span> <span class="s2">"starting test </span><span class="si">#{</span><span class="n">counter</span><span class="si">}</span><span class="s2">"</span>
<span class="n">compute_nest_depth</span>
<span class="k">rescue</span> <span class="no">SystemStackError</span> <span class="o">=></span> <span class="n">e</span>
<span class="kp">nil</span>
<span class="k">ensure</span>
<span class="nb">puts</span> <span class="s2">"test </span><span class="si">#{</span><span class="n">counter</span><span class="si">}</span><span class="s2"> complete"</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<p>results:</p>
<pre><code>starting test 1
nested 512
nested 1024
nested 1536
nested 2048
nested 2560
Stack exploded at nesting 2783
test 1 complete
starting test 2
nested 512
nested 1024
nested 1536
nested 2048
nested 2560
Segmentation fault (core dumped)
</code></pre>
Ruby master - Bug #13151 (Open): File.writable? doesn't report correctly if a directory is writab...
https://redmine.ruby-lang.org/issues/13151
2017-01-23T17:46:49Z
tschoening (Thorsten Schöning)
<p>I've tried installing a gem per user using a 64 Bit version of Ruby for Windows and recognized that this failed because of permission errors. Ruby wanted to write the successfully downloaded gem to a system wide cache dir and failed because of missing permissions in that directly by default. I've reported the problem to rubygems and during investigation of the problem we recognized that File.writable? doesn't provide the correct information about if the target dir is writable or not under Windows. File.writable? ultimately checks using eaccess and access and Microsoft says the following about the latter:</p>
<blockquote>
<p>When used with directories, _access determines only whether the specified directory exists; in Windows 2000 and later operating systems, all directories have read and write access.</p>
</blockquote>
<p><a href="https://msdn.microsoft.com/en-us/library/1w06ktdy.aspx" class="external">https://msdn.microsoft.com/en-us/library/1w06ktdy.aspx</a></p>
<p>Because of the false return value, the downloaded gem is tried to be copied to the system wide cache dir and that fails. With win32-file there's a gem available which implements the correct check, because if that is required per user installation of a gem succeeds without even trying to copy anything system wide. The full story is on GitHub:</p>
<p><a href="https://github.com/rubygems/rubygems/issues/1784#issuecomment-274508768" class="external">https://github.com/rubygems/rubygems/issues/1784#issuecomment-274508768</a></p>
Ruby master - Bug #12179 (Open): Build failure due to VPATH expansion
https://redmine.ruby-lang.org/issues/12179
2016-03-15T17:19:40Z
rhenium (Kazuki Yamaguchi)
k@rhe.jp
<p>On my environment (GNU Make 4.1), I can reproduce in this way:</p>
<pre><code class="sh syntaxhl" data-language="sh"><span class="nb">cd</span> /tmp
svn co http://svn.ruby-lang.org/repos/ruby/trunk ruby-src
<span class="nb">cd </span>ruby-src
autoconf <span class="o">&&</span> ./configure
<span class="nb">mkdir</span> <span class="nt">-p</span> /tmp/.ext/.timestamp/
<span class="nb">touch</span> /tmp/.ext/.timestamp/.RUBYARCHDIR.-.-test-.-.fatal.time
make <span class="nv">V</span><span class="o">=</span>1
</code></pre>
<p>results in:</p>
<pre><code>...
make[2]: Entering directory '/tmp/ruby-src/ext/-test-/fatal'
rm -f ../../../.ext/x86_64-linux/-test-/fatal/rb_fatal.so
gcc -shared -o ../../../.ext/x86_64-linux/-test-/fatal/rb_fatal.so rb_fatal.o -L. -L../../.. -L. -fstack-protector -rdynamic -Wl,-export-dynamic -lpthread -lgmp -ldl -lcrypt -lm -lc
/usr/bin/ld: cannot open output file ../../../.ext/x86_64-linux/-test-/fatal/rb_fatal.so: No such file or directory
collect2: error: ld returned 1 exit status
Makefile:260: recipe for target '../../../.ext/x86_64-linux/-test-/fatal/rb_fatal.so' failed
make[2]: *** [../../../.ext/x86_64-linux/-test-/fatal/rb_fatal.so] Error 1
make[2]: Leaving directory '/tmp/ruby-src/ext/-test-/fatal'
exts.mk:88: recipe for target 'ext/-test-/fatal/all' failed
...
</code></pre>
<p>This error happens because <code>/tmp/ruby-src/.ext/x86_64-linux/-test-/fatal</code> is not properly created.</p>
<p>This is because of the VPATH set in <code>ext/-test-/fatal/Makefile</code>:</p>
<pre><code>srcdir = $(top_srcdir)/ext/-test-/fatal
topdir = ../../..
hdrdir = $(top_srcdir)/include
arch_hdrdir = $(extout)/include/$(arch)
VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
extout = $(topdir)/.ext
TIMESTAMP_DIR = $(extout)/.timestamp
$(TIMESTAMP_DIR)/.RUBYARCHDIR.-.-test-.-.fatal.time:
$(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR)
$(Q) $(TOUCH) $@
$(RUBYARCHDIR)/$(DLLIB): $(OBJS) Makefile $(TIMESTAMP_DIR)/.RUBYARCHDIR.-.-test-.-.fatal.time
$(ECHO) linking shared-object -test-/fatal/$(DLLIB)
...
</code></pre>
<p><code>$(TIMESTAMP_DIR)/.RUBYARCHDIR.-.-test-.-.fatal.time</code> target should create the directory prior to linking, but it doesn't work.<br>
Since the Makefile has VPATH, make wrongly finds <code>$(TIMESTAMP_DIR)/.RUBYARCHDIR.-.-test-.-.fatal.time</code> at <code>$(hdrdir)/ruby</code>, that is <code>/tmp/.ext/.timestamp/.RUBYARCHDIR.-.-test-.-.fatal.time</code>.</p>
Ruby master - Bug #9760 (Open): mkmf does not allow for linking against custom libraries when a s...
https://redmine.ruby-lang.org/issues/9760
2014-04-19T22:15:47Z
zanegray (Andrew DeMaria)
ademariad@gmail.com
<p>Hi,</p>
<p>Hopefully the title is not confusing, but the short story is that mkmf outputs a makefile that first searches the default lib path before searching any user provided lib paths. This is not an issue until one tries to link against an included library whose version is different than a preexisting system library.</p>
<p>The issue cropped up while trying to install the rugged gem (libgit2 wrapper) and a full dialog on the issue can be found on github <a href="https://github.com/libgit2/rugged/issues/351" class="external">https://github.com/libgit2/rugged/issues/351</a>.</p>
<p>I was able to fix the issue with the attached patch (<a href="https://github.com/muff1nman/ruby/commit/a0c8bc32cfc11e61c5b9703bff243934c6509210" class="external">https://github.com/muff1nman/ruby/commit/a0c8bc32cfc11e61c5b9703bff243934c6509210</a>)</p>
Ruby master - Bug #9189 (Assigned): Build failure on Windows in case of nonascii TEMP environment.
https://redmine.ruby-lang.org/issues/9189
2013-12-01T18:06:20Z
phasis68 (Heesob Park)
phasis@gmail.com
<p>I experienced a build failure during build extension library with trunk on Windows.</p>
<pre><code>make[2]: Entering directory `/c/work/ruby-2.1.0-r43936/ext/bigdecimal'
generating bigdecimal-i386-mingw32.def
compiling bigdecimal.c
In file included from bigdecimal.c:20:0:
bigdecimal.h:62:1: error: static declaration of 'labs' follows non-static declar
ation
make[2]: *** [bigdecimal.o] Error 1
make[2]: Leaving directory `/c/work/ruby-2.1.0-r43936/ext/bigdecimal'
make[1]: *** [ext/bigdecimal/all] Error 2
make[1]: Leaving directory `/c/work/ruby-2.1.0-r43936'
make: *** [build-ext] Error 2
</code></pre>
<p>I found the cause of this error is mkmk failure.<br>
Here is a part of mkmf.log</p>
<pre><code>have_func: checking for labs() in stdlib.h... -------------------- no
"i686-w64-mingw32-gcc -o conftest.exe -I../../.ext/include/i386-mingw32 -I../.././include -I../.././ext/bigdecimal -D_WIN32_WINNT=0x0501 -D_FILE_OFFSET_BITS=64 -O3 -fno-omit-frame-pointer -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c -L. -L../.. -L. -lmsvcrt-ruby210-static -lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi "
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Cannot create temporary file in C:\Users\??苑?AppData\Local\Temp\: Invalid argument
</code></pre>
<p>The TEMP environment varable is</p>
<pre><code>C:\work\ruby-2.1.0-r43936>set TEMP
TEMP=C:\Users\희섭\AppData\Local\Temp
</code></pre>
<p>It seems that miniruby cannot handle encoding properly.</p>
<pre><code>C:\work\ruby-2.1.0-r43936>miniruby -ve "p ENV['TEMP']"
ruby 2.1.0dev (2013-11-30 trunk 43936) [i386-mingw32]
"C:\\Users\\\xED\x9D\xAC\xEC\x84\xAD\\AppData\\Local\\Temp"
C:\work\ruby-2.1.0-r43936>miniruby.exe -ve "p ENV['TEMP'].encoding"
ruby 2.1.0dev (2013-11-30 trunk 43936) [i386-mingw32]
#<Encoding:ASCII-8BIT>
</code></pre>
<p>Whereas, the final ruby can handle encoding properly.</p>
<pre><code>C:\work>ruby -ve "p ENV['TEMP']"
ruby 2.1.0dev (2013-11-30 trunk 43923) [i386-mingw32]
"C:\\Users\\희섭\\AppData\\Local\\Temp"
C:\work>ruby -ve "p ENV['TEMP'].encoding"
ruby 2.1.0dev (2013-11-30 trunk 43923) [i386-mingw32]
#<Encoding:CP949>
</code></pre>