diff --git a/kitty/line-buf.c b/kitty/line-buf.c index 854d00ccb..459a60e6b 100644 --- a/kitty/line-buf.c +++ b/kitty/line-buf.c @@ -292,6 +292,7 @@ copy_line_to(LineBuf *self, PyObject *args) { unsigned int y; Line src, *dest; if (!PyArg_ParseTuple(args, "IO!", &y, &Line_Type, &dest)) return NULL; + if (y >= self->ynum) { PyErr_SetString(PyExc_ValueError, "Out of bounds"); return NULL; } src.xnum = self->xnum; dest->xnum = self->xnum; dest->ynum = y; dest->attrs = self->line_attrs[y]; diff --git a/kitty_tests/datatypes.py b/kitty_tests/datatypes.py index cc462d647..d82495076 100644 --- a/kitty_tests/datatypes.py +++ b/kitty_tests/datatypes.py @@ -279,6 +279,8 @@ class TestDataTypes(BaseTest): l2 = lb.create_line_copy(2) lb.copy_line_to(1, l2) self.ae(l2, lb2.line(2)) + with self.assertRaises(ValueError): + lb.copy_line_to(lb.ynum, l2) lb.clear_line(0) self.ae(lb.line(0), LineBuf(1, lb.xnum).create_line_copy(0)) lb = filled_line_buf(5, 5, filled_cursor())