summaryrefslogtreecommitdiff
path: root/io_buffer.c
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2026-03-29 18:57:51 +1300
committerGitHub <noreply@github.com>2026-03-29 18:57:51 +1300
commitf9175a9e5f55400ab536a64764f141564674c7ad (patch)
treee3fa58e852dc4bd998bf0e986793c1300031bd13 /io_buffer.c
parent843bb9b7f6e8b0179edaca50ed7cf2216f83759c (diff)
Ensure safe handling of `IO::Buffer#hexdump` width. (#16593)
Diffstat (limited to 'io_buffer.c')
-rw-r--r--io_buffer.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/io_buffer.c b/io_buffer.c
index cb35141f47..3c7b3eb16a 100644
--- a/io_buffer.c
+++ b/io_buffer.c
@@ -39,6 +39,7 @@ size_t RUBY_IO_BUFFER_DEFAULT_SIZE;
enum {
RB_IO_BUFFER_HEXDUMP_DEFAULT_WIDTH = 16,
+ RB_IO_BUFFER_HEXDUMP_MAXIMUM_WIDTH = 1024,
RB_IO_BUFFER_INSPECT_HEXDUMP_MAXIMUM_SIZE = 256,
RB_IO_BUFFER_INSPECT_HEXDUMP_WIDTH = 16,
@@ -384,7 +385,7 @@ io_buffer_extract_size(VALUE argument)
}
// Extract a width argument, which must be a non-negative integer, and must be
-// at least the given minimum.
+// at least the given minimum and at most RB_IO_BUFFER_HEXDUMP_MAXIMUM_WIDTH.
static inline size_t
io_buffer_extract_width(VALUE argument, size_t minimum)
{
@@ -398,6 +399,10 @@ io_buffer_extract_width(VALUE argument, size_t minimum)
rb_raise(rb_eArgError, "Width must be at least %" PRIuSIZE "!", minimum);
}
+ if (width > RB_IO_BUFFER_HEXDUMP_MAXIMUM_WIDTH) {
+ rb_raise(rb_eArgError, "Width must be at most %" PRIuSIZE "!", (size_t)RB_IO_BUFFER_HEXDUMP_MAXIMUM_WIDTH);
+ }
+
return width;
}