Raise an ArgumentError for unknown pack/unpack directive
* [Bug #19150]
This commit is contained in:
parent
358f325bf8
commit
03dd37775a
10
NEWS.md
10
NEWS.md
@ -11,6 +11,14 @@ Note that each entry is kept to a minimum, see links for details.
|
||||
|
||||
Note: We're only listing outstanding class updates.
|
||||
|
||||
* Array
|
||||
|
||||
* `Array#pack` now raises ArgumentError for unknown directives. [[Bug #19150]]
|
||||
|
||||
* String
|
||||
|
||||
* `String#unpack` now raises ArgumentError for unknown directives. [[Bug #19150]]
|
||||
|
||||
## Stdlib updates
|
||||
|
||||
* The following default gems are updated.
|
||||
@ -41,3 +49,5 @@ See GitHub releases like [GitHub Releases of Logger](https://github.com/ruby/log
|
||||
## Implementation improvements
|
||||
|
||||
## JIT
|
||||
|
||||
[Bug #19150]: https://bugs.ruby-lang.org/issues/19150
|
||||
|
2
pack.c
2
pack.c
@ -167,7 +167,7 @@ unknown_directive(const char *mode, char type, VALUE fmt)
|
||||
snprintf(unknown, sizeof(unknown), "\\x%.2x", type & 0xff);
|
||||
}
|
||||
fmt = rb_str_quote_unprintable(fmt);
|
||||
rb_warn("unknown %s directive '%s' in '%"PRIsVALUE"'",
|
||||
rb_raise(rb_eArgError, "unknown %s directive '%s' in '%"PRIsVALUE"'",
|
||||
mode, unknown, fmt);
|
||||
}
|
||||
|
||||
|
@ -777,32 +777,32 @@ EXPECTED
|
||||
end
|
||||
|
||||
def test_pack_garbage
|
||||
assert_warn(%r%unknown pack directive '\*' in '\*U'$%) do
|
||||
assert_raise(ArgumentError, %r%unknown pack directive '\*' in '\*U'$%) do
|
||||
assert_equal "\000", [0].pack("*U")
|
||||
end
|
||||
end
|
||||
|
||||
def test_unpack_garbage
|
||||
assert_warn(%r%unknown unpack directive '\*' in '\*U'$%) do
|
||||
assert_raise(ArgumentError, %r%unknown unpack directive '\*' in '\*U'$%) do
|
||||
assert_equal [0], "\000".unpack("*U")
|
||||
end
|
||||
end
|
||||
|
||||
def test_invalid_warning
|
||||
assert_warning(/unknown pack directive ',' in ','/) {
|
||||
assert_raise(ArgumentError, /unknown pack directive ',' in ','/) {
|
||||
[].pack(",")
|
||||
}
|
||||
assert_warning(/\A[ -~]+\Z/) {
|
||||
assert_raise(ArgumentError, /\A[ -~]+\Z/) {
|
||||
[].pack("\x7f")
|
||||
}
|
||||
assert_warning(/\A(.* in '\u{3042}'\n)+\z/) {
|
||||
assert_raise(ArgumentError, /\A(.* in '\u{3042}'\n)+\z/) {
|
||||
[].pack("\u{3042}")
|
||||
}
|
||||
|
||||
assert_warning(/\A.* in '.*U'\Z/) {
|
||||
assert_raise(ArgumentError, /\A.* in '.*U'\Z/) {
|
||||
assert_equal "\000", [0].pack("\0U")
|
||||
}
|
||||
assert_warning(/\A.* in '.*U'\Z/) {
|
||||
assert_raise(ArgumentError, /\A.* in '.*U'\Z/) {
|
||||
"\000".unpack("\0U")
|
||||
}
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user