diff --git a/src/terminal/Parser.zig b/src/terminal/Parser.zig index 0223545e5..92f405a23 100644 --- a/src/terminal/Parser.zig +++ b/src/terminal/Parser.zig @@ -206,7 +206,7 @@ const MAX_INTERMEDIATE = 4; /// number. I implore TUI authors to not use more than this number of CSI /// params, but I suspect we'll introduce a slow path with heap allocation /// one day. -const MAX_PARAMS = 24; +pub const MAX_PARAMS = 24; /// Current state of the state machine state: State, diff --git a/src/terminal/sgr.zig b/src/terminal/sgr.zig index e4b85fbdd..d589172ad 100644 --- a/src/terminal/sgr.zig +++ b/src/terminal/sgr.zig @@ -134,7 +134,7 @@ pub const Parser = struct { self.idx += 1; return .{ .unknown = .{ .full = self.params, - .partial = slice[0 .. self.idx - start + 1], + .partial = slice[0..@min(self.idx - start + 1, slice.len)], } }; }, }; diff --git a/src/terminal/stream.zig b/src/terminal/stream.zig index ce09cbda2..c9bb50158 100644 --- a/src/terminal/stream.zig +++ b/src/terminal/stream.zig @@ -249,7 +249,7 @@ pub fn Stream(comptime Handler: type) type { // the parser state to ground. 0x18, 0x1A => self.parser.state = .ground, // A parameter digit: - '0'...'9' => if (self.parser.params_idx < 16) { + '0'...'9' => if (self.parser.params_idx < Parser.MAX_PARAMS) { self.parser.param_acc *|= 10; self.parser.param_acc +|= c - '0'; // The parser's CSI param action uses param_acc_idx @@ -259,7 +259,7 @@ pub fn Stream(comptime Handler: type) type { self.parser.param_acc_idx |= 1; }, // A parameter separator: - ':', ';' => if (self.parser.params_idx < 16) { + ':', ';' => if (self.parser.params_idx < Parser.MAX_PARAMS) { self.parser.params[self.parser.params_idx] = self.parser.param_acc; if (c == ':') self.parser.params_sep.set(self.parser.params_idx); self.parser.params_idx += 1;