* pack.c (pack_pack): escape unprintable characters and preserve
  the encoding of warning message.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48307 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2014-11-06 14:58:43 +00:00
Родитель fa892d27af
Коммит 1f53145dd4
3 изменённых файлов: 25 добавлений и 3 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Thu Nov 6 23:58:40 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
* pack.c (pack_pack): escape unprintable characters and preserve
the encoding of warning message.
Thu Nov 6 23:55:18 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
* string.c (sym_printable): QUOTE() should not raise an exception

15
pack.c
Просмотреть файл

@ -912,10 +912,19 @@ pack_pack(VALUE ary, VALUE fmt)
}
break;
default:
rb_warning("unknown pack directive '%c' in '%s'",
type, RSTRING_PTR(fmt));
default: {
char unknown[5];
if (ISPRINT(type)) {
unknown[0] = type;
unknown[1] = '\0';
}
else {
snprintf(unknown, sizeof(unknown), "\\x%.2x", type & 0xff);
}
rb_warning("unknown pack directive '%s' in '% "PRIsVALUE"'",
unknown, fmt);
break;
}
}
}

Просмотреть файл

@ -718,5 +718,13 @@ EXPECTED
assert_warning(/unknown pack directive ',' in ','/) {
[].pack(",")
}
assert_warning(/\A[ -~]+\Z/) {
[].pack("\x7f")
}
assert_warning(/\A(.* in '\u{3042}'\n)+\z/) {
EnvUtil.with_default_external(Encoding::UTF_8) {
[].pack("\u{3042}")
}
}
end
end