[#65451] [ruby-trunk - Feature #10333] [PATCH 3/1] optimize: "yoda literal" == string — ko1@...
Issue #10333 has been updated by Koichi Sasada.
ko1@atdot.net wrote:
Eric Wong <normalperson@yhbt.net> wrote:
Eric Wong <normalperson@yhbt.net> wrote:
On 2014/10/09 11:04, Eric Wong wrote:
SASADA Koichi <ko1@atdot.net> wrote:
[#65453] [ruby-trunk - Feature #10328] [PATCH] make OPT_SUPPORT_JOKE a proper VM option — ko1@...
Issue #10328 has been updated by Koichi Sasada.
[#65559] is there a name for this? — Xavier Noria <fxn@...>
When describing stuff about constants (working in their guide), you often
On 2014/10/09 20:41, Xavier Noria wrote:
On Thu, Oct 9, 2014 at 1:59 PM, Nobuyoshi Nakada <nobu@ruby-lang.org> wrote:
[#65566] [ruby-trunk - Feature #10351] [Open] [PATCH] prevent CVE-2014-6277 — shyouhei@...
Issue #10351 has been reported by Shyouhei Urabe.
[#65741] Re: [ruby-cvs:55121] normal:r47971 (trunk): test/ruby/test_rubyoptions.rb: fix race — Nobuyoshi Nakada <nobu@...>
On 2014/10/16 10:10, normal@ruby-lang.org wrote:
Nobuyoshi Nakada <nobu@ruby-lang.org> wrote:
2014-10-16 12:48 GMT+09:00 Eric Wong <normalperson@yhbt.net>:
[#65753] [ruby-trunk - Feature #10333] [PATCH 3/1] optimize: "yoda literal" == string — ko1@...
Issue #10333 has been updated by Koichi Sasada.
[#65818] [ruby-trunk - Feature #10351] [PATCH] prevent CVE-2014-6277 — shyouhei@...
Issue #10351 has been updated by Shyouhei Urabe.
[ruby-core:65861] [ruby-trunk - Bug #10413] [Open] Unexpected block invocation with unknown keywords
Issue #10413 has been updated by Koichi Sasada.
Status changed from Closed to Open
How about to change rb_hash_delete()?
Nobody expect rb_hash_delete() invoke a passed block.
```
Index: hash.c
===================================================================
--- hash.c (revision 48083)
+++ hash.c (working copy)
@@ -972,8 +972,8 @@ rb_hash_index(VALUE hash, VALUE value)
return rb_hash_key(hash, value);
}
-static VALUE
-rb_hash_delete_key(VALUE hash, VALUE key)
+VALUE
+rb_hash_delete(VALUE hash, VALUE key)
{
st_data_t ktmp = (st_data_t)key, val;
@@ -1008,13 +1008,13 @@ rb_hash_delete_key(VALUE hash, VALUE key
*
*/
-VALUE
-rb_hash_delete(VALUE hash, VALUE key)
+static VALUE
+rb_hash_delete_m(VALUE hash, VALUE key)
{
VALUE val;
rb_hash_modify_check(hash);
- val = rb_hash_delete_key(hash, key);
+ val = rb_hash_delete(hash, key);
if (val != Qundef) return val;
if (rb_block_given_p()) {
return rb_yield(key);
@@ -1066,7 +1066,7 @@ rb_hash_shift(VALUE hash)
else {
rb_hash_foreach(hash, shift_i_safe, (VALUE)&var);
if (var.key != Qundef) {
- rb_hash_delete_key(hash, var.key);
+ rb_hash_delete(hash, var.key);
return rb_assoc_new(var.key, var.val);
}
}
@@ -3881,7 +3881,7 @@ Init_Hash(void)
rb_define_method(rb_cHash,"values_at", rb_hash_values_at, -1);
rb_define_method(rb_cHash,"shift", rb_hash_shift, 0);
- rb_define_method(rb_cHash,"delete", rb_hash_delete, 1);
+ rb_define_method(rb_cHash,"delete", rb_hash_delete_m, 1);
rb_define_method(rb_cHash,"delete_if", rb_hash_delete_if, 0);
rb_define_method(rb_cHash,"keep_if", rb_hash_keep_if, 0);
rb_define_method(rb_cHash,"select", rb_hash_select, 0);
```
----------------------------------------
Bug #10413: Unexpected block invocation with unknown keywords
https://bugs.ruby-lang.org/issues/10413#change-49596
* Author: Koichi Sasada
* Status: Open
* Priority: Normal
* Assignee: Koichi Sasada
* Category: core
* Target version: current: 2.2.0
* ruby -v: 2.2dev
* Backport: 2.0.0: REQUIRED, 2.1: REQUIRED
----------------------------------------
When unknown keywords are passed, unexpected block is invoked.
```ruby
def bar(k2: 'v2')
end
def foo
bar(k1: 1)
end
foo(){
puts caller_locations
raise "unreachable"
}
```
current behavior:
```
ruby 2.2.0dev (2014-10-22 trunk 48083) [i386-mswin32_110]
test.rb:10:in `block in <main>': unreachable (RuntimeError)
from test.rb:5:in `foo'
from test.rb:8:in `<main>'
test.rb:5:in `foo'
test.rb:8:in `<main>'
```
expected:
```
../../gitruby/test.rb:5:in `foo': unknown keyword: k1 (ArgumentError)
from ../../gitruby/test.rb:8:in `<main>'
```
This strange behavior is because "unknown_keyword_error" in class.c calls rb_hash_delete() (Hash#delete) with :k1 and invoke passed block.
I'm now re-writing all of this part and my branch does not have this problem.
However, Ruby 2.0 and 2.1 have same problem.
--
https://bugs.ruby-lang.org/