[#120073] [Ruby master Feature#20925] Allow boolean operators at beginning of line to continue previous line — "Dan0042 (Daniel DeLorme) via ruby-core" <ruby-core@...>

Issue #20925 has been reported by Dan0042 (Daniel DeLorme).

12 messages 2024/12/01

[#120141] [Ruby master Bug#20937] "can't set length of shared string" error when using OpenSSL::Cipher#update with buffer — "akiellor (Andrew Kiellor) via ruby-core" <ruby-core@...>

Issue #20937 has been reported by akiellor (Andrew Kiellor).

9 messages 2024/12/09

[#120174] [Ruby master Bug#20943] Constant defined in `Data` block — "nobu (Nobuyoshi Nakada) via ruby-core" <ruby-core@...>

Issue #20943 has been reported by nobu (Nobuyoshi Nakada).

8 messages 2024/12/11

[#120183] [Ruby master Misc#20946] Proposing tomoya ishida (@tompng) as a Ruby committer — "matsuda (Akira Matsuda) via ruby-core" <ruby-core@...>

Issue #20946 has been reported by matsuda (Akira Matsuda).

10 messages 2024/12/12

[#120189] [Ruby master Misc#20947] Propose ydah (Yudai Takada) as a Ruby committer — "yui-knk (Kaneko Yuichiro) via ruby-core" <ruby-core@...>

SXNzdWUgIzIwOTQ3IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IHl1aS1rbmsgKEthbmVrbyBZdWljaGly

7 messages 2024/12/12

[#120232] [Ruby master Misc#20951] Confusing handling of timezone object's `#utc_to_local` results — "andrykonchin (Andrew Konchin) via ruby-core" <ruby-core@...>

Issue #20951 has been reported by andrykonchin (Andrew Konchin).

7 messages 2024/12/13

[#120250] [Ruby master Feature#20953] Array#fetch_values vs #values_at protocols — "zverok (Victor Shepelev) via ruby-core" <ruby-core@...>

Issue #20953 has been reported by zverok (Victor Shepelev).

11 messages 2024/12/15

[#120252] [Ruby master Bug#20955] Subtle differences with Proc#parameters for anonymous parameters — "zverok (Victor Shepelev) via ruby-core" <ruby-core@...>

SXNzdWUgIzIwOTU1IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IHp2ZXJvayAoVmljdG9yIFNoZXBlbGV2

9 messages 2024/12/15

[#120283] [Ruby master Bug#20961] MMTk build on macOS missing librubygc.mmtk.bundle — "shan (Shannon Skipper) via ruby-core" <ruby-core@...>

Issue #20961 has been reported by shan (Shannon Skipper).

8 messages 2024/12/17

[#120303] [Ruby master Bug#20965] `it` vs `binding.local_variables` — "zverok (Victor Shepelev) via ruby-core" <ruby-core@...>

Issue #20965 has been reported by zverok (Victor Shepelev).

10 messages 2024/12/18

[#120315] [Ruby master Bug#20968] `Array#fetch_values` unexpected method name in stack trace — "koic (Koichi ITO) via ruby-core" <ruby-core@...>

Issue #20968 has been reported by koic (Koichi ITO).

22 messages 2024/12/19

[#120325] [Ruby master Bug#20970] `it /1/i` raises undefined method 'it' for main (NoMethodError) even if binding.local_variables includes `it` — "tompng (tomoya ishida) via ruby-core" <ruby-core@...>

Issue #20970 has been reported by tompng (tomoya ishida).

11 messages 2024/12/19

[#120335] [Ruby master Feature#20971] Deprecate `rb_path_check` — "Earlopain (Earlopain _) via ruby-core" <ruby-core@...>

Issue #20971 has been reported by Earlopain (Earlopain _).

13 messages 2024/12/19

[#120458] [Ruby master Misc#20995] exception escapes block given to IO.popen("-") in child process — "martin.dorey@... (Martin Dorey) via ruby-core" <ruby-core@...>

Issue #20995 has been reported by martin.dorey@hds.com (Martin Dorey).

7 messages 2024/12/31

[ruby-core:120458] [Ruby master Misc#20995] exception escapes block given to IO.popen("-") in child process

From: "martin.dorey@... (Martin Dorey) via ruby-core" <ruby-core@...>
Date: 2024-12-31 23:55:40 UTC
List: ruby-core #120458
Issue #20995 has been reported by martin.dorey@hds.com (Martin Dorey).

----------------------------------------
Misc #20995: exception escapes block given to IO.popen("-") in child process
https://bugs.ruby-lang.org/issues/20995

* Author: martin.dorey@hds.com (Martin Dorey)
* Status: Open
----------------------------------------
I was surprised by the "ensure" being reached in the child process here:
``` ruby
martind@stormy:~/tmp/D161730$ cat repro.rb 
#!/usr/bin/ruby -w
parent = Process.pid()
[false, true].each() {
    |nauseous|
    $stderr.puts("#{nauseous ? "" : "not "}raising exception from child:")
    begin
        IO.popen("-") {
            |io|
            unless io
                if nauseous
                    raise("childish fit")
                end
            end
        }
    ensure
        $stderr.puts("in finalization block from #{Process.pid() == parent ? "parent" : "child"}")
        $stderr.puts()
    end
}
martind@stormy:~/tmp/D161730$ ~/download/ruby-3.3.4/ruby --version
ruby 3.3.4 (2024-07-09 revision be1089c8ec) [x86_64-linux]
martind@stormy:~/tmp/D161730$ ~/download/ruby-3.3.4/ruby -w repro.rb
not raising exception from child:
in finalization block from parent

raising exception from child:
in finalization block from child

repro.rb:11:in `block (2 levels) in <main>': childish fit (RuntimeError)
	from repro.rb:7:in `popen'
	from repro.rb:7:in `block in <main>'
	from repro.rb:3:in `each'
	from repro.rb:3:in `<main>'
in finalization block from parent

martind@stormy:~/tmp/D161730$ 
```
In the first iteration of the loop, we don't see the surprise - the child process exits when the block is completed.  Only when an exception is thrown, in the second iteration, does the control flow escape from the block.  It does so even for the SystemExit exception raised by exit(0) but not, as we see above, from just leaving the block (in which case perhaps we _exit(0) at https://github.com/ruby/ruby/blob/master/io.c#L8044).  My expectation was that the block would be executed in the child process much like the "main" part of a program, with the usual unhandled exception reporting, which we see demonstrated above, being invoked as soon as the exception propagated out the block, rather than first unwinding the callers.

I think the behavior is unchanged since the oldest version I was conveniently able to test, which was:

ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux]

... so I didn't file this report as a Bug in case users have (accidentally?) come to depend on the behavior.  I didn't find any mention of this at eg https://ruby-doc.org/3.4.1/IO.html#method-c-popen but I didn't file this report as a Feature request for the documentation in case the documentation deliberately leaves open such possibilities.  I didn't even find anyone else puzzling over this behavior on eg StackOverflow, but I felt that I should report it for the benefit of the next poor sap to run into it, especially in case that's Future Me.  Could it be a case where a warning would be worth more than the trouble it causes?



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/


In This Thread

Prev Next