Bounds checking on Grid point access, and correct the formula. Caused segfault on non-square grid size (and was transposing coordinates!)
This commit is contained in:
parent
aa7f2ba605
commit
8e1552eec5
10
src/UI.h
10
src/UI.h
|
@ -1776,10 +1776,18 @@ static PyObject* PyUIGrid_at(PyUIGridObject* self, PyObject* o)
|
||||||
PyErr_SetString(PyExc_TypeError, "UIGrid.at requires two integer arguments: (x, y)");
|
PyErr_SetString(PyExc_TypeError, "UIGrid.at requires two integer arguments: (x, y)");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
if (x < 0 || x >= self->data->grid_x) {
|
||||||
|
PyErr_SetString(PyExc_ValueError, "x value out of range (0, Grid.grid_y)");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (y < 0 || y >= self->data->grid_y) {
|
||||||
|
PyErr_SetString(PyExc_ValueError, "y value out of range (0, Grid.grid_y)");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
PyUIGridPointObject* obj = (PyUIGridPointObject*)((&PyUIGridPointType)->tp_alloc(&PyUIGridPointType, 0));
|
PyUIGridPointObject* obj = (PyUIGridPointObject*)((&PyUIGridPointType)->tp_alloc(&PyUIGridPointType, 0));
|
||||||
//auto target = std::static_pointer_cast<UIEntity>(target);
|
//auto target = std::static_pointer_cast<UIEntity>(target);
|
||||||
obj->data = &(self->data->points[y + self->data->grid_x * x]);
|
obj->data = &(self->data->points[x + self->data->grid_x * y]);
|
||||||
obj->grid = self->data;
|
obj->grid = self->data;
|
||||||
return (PyObject*)obj;
|
return (PyObject*)obj;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue