mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 08:33:58 +02:00
sprintf.c: nil value is valid
* sprintf.c (rb_str_format): look up the key, then get default value and raise KeyError if the returned value is nil. [ruby-dev:49338] [Ruby trunk - Bug #11677] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52537 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
9cf1136481
commit
56e3b49304
5 changed files with 30 additions and 10 deletions
20
sprintf.c
20
sprintf.c
|
@ -605,12 +605,20 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
|
|||
}
|
||||
CHECKNAMEARG(start, len, enc);
|
||||
get_hash(&hash, argc, argv);
|
||||
sym = rb_cstr_intern(start + 1,
|
||||
len - 2 /* without parenthesis */,
|
||||
enc);
|
||||
nextvalue = rb_hash_aref(hash, sym);
|
||||
if (NIL_P(nextvalue) && !FL_TEST(hash, HASH_PROC_DEFAULT)) {
|
||||
rb_enc_raise(enc, rb_eKeyError, "key%.*s not found", len, start);
|
||||
sym = rb_check_symbol_cstr(start + 1,
|
||||
len - 2 /* without parenthesis */,
|
||||
enc);
|
||||
if (!NIL_P(sym)) nextvalue = rb_hash_lookup2(hash, sym, Qundef);
|
||||
if (nextvalue == Qundef) {
|
||||
if (NIL_P(sym)) {
|
||||
sym = rb_cstr_intern(start + 1,
|
||||
len - 2 /* without parenthesis */,
|
||||
enc);
|
||||
}
|
||||
nextvalue = rb_hash_default_value(hash, sym);
|
||||
if (NIL_P(nextvalue)) {
|
||||
rb_enc_raise(enc, rb_eKeyError, "key%.*s not found", len, start);
|
||||
}
|
||||
}
|
||||
if (term == '}') goto format_s;
|
||||
p++;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue