mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-27 17:54:32 +03:00
Merge pull request #6999 from radarhere/null
Handle failure from PyDict_New or PyList_New
This commit is contained in:
commit
f191666a91
|
@ -1285,6 +1285,10 @@ _histogram(ImagingObject *self, PyObject *args) {
|
||||||
|
|
||||||
/* Build an integer list containing the histogram */
|
/* Build an integer list containing the histogram */
|
||||||
list = PyList_New(h->bands * 256);
|
list = PyList_New(h->bands * 256);
|
||||||
|
if (list == NULL) {
|
||||||
|
ImagingHistogramDelete(h);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
for (i = 0; i < h->bands * 256; i++) {
|
for (i = 0; i < h->bands * 256; i++) {
|
||||||
PyObject *item;
|
PyObject *item;
|
||||||
item = PyLong_FromLong(h->histogram[i]);
|
item = PyLong_FromLong(h->histogram[i]);
|
||||||
|
@ -2190,6 +2194,10 @@ _getcolors(ImagingObject *self, PyObject *args) {
|
||||||
Py_INCREF(out);
|
Py_INCREF(out);
|
||||||
} else {
|
} else {
|
||||||
out = PyList_New(colors);
|
out = PyList_New(colors);
|
||||||
|
if (out == NULL) {
|
||||||
|
free(items);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
for (i = 0; i < colors; i++) {
|
for (i = 0; i < colors; i++) {
|
||||||
ImagingColorItem *v = &items[i];
|
ImagingColorItem *v = &items[i];
|
||||||
PyObject *item = Py_BuildValue(
|
PyObject *item = Py_BuildValue(
|
||||||
|
@ -4361,6 +4369,7 @@ PyInit__imaging(void) {
|
||||||
m = PyModule_Create(&module_def);
|
m = PyModule_Create(&module_def);
|
||||||
|
|
||||||
if (setup_module(m) < 0) {
|
if (setup_module(m) < 0) {
|
||||||
|
Py_DECREF(m);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1082,11 +1082,17 @@ font_getvarnames(FontObject *self) {
|
||||||
|
|
||||||
num_namedstyles = master->num_namedstyles;
|
num_namedstyles = master->num_namedstyles;
|
||||||
list_names = PyList_New(num_namedstyles);
|
list_names = PyList_New(num_namedstyles);
|
||||||
|
if (list_names == NULL) {
|
||||||
|
FT_Done_MM_Var(library, master);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
name_count = FT_Get_Sfnt_Name_Count(self->face);
|
name_count = FT_Get_Sfnt_Name_Count(self->face);
|
||||||
for (i = 0; i < name_count; i++) {
|
for (i = 0; i < name_count; i++) {
|
||||||
error = FT_Get_Sfnt_Name(self->face, i, &name);
|
error = FT_Get_Sfnt_Name(self->face, i, &name);
|
||||||
if (error) {
|
if (error) {
|
||||||
|
Py_DECREF(list_names);
|
||||||
|
FT_Done_MM_Var(library, master);
|
||||||
return geterror(error);
|
return geterror(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1125,10 +1131,19 @@ font_getvaraxes(FontObject *self) {
|
||||||
name_count = FT_Get_Sfnt_Name_Count(self->face);
|
name_count = FT_Get_Sfnt_Name_Count(self->face);
|
||||||
|
|
||||||
list_axes = PyList_New(num_axis);
|
list_axes = PyList_New(num_axis);
|
||||||
|
if (list_axes == NULL) {
|
||||||
|
FT_Done_MM_Var(library, master);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
for (i = 0; i < num_axis; i++) {
|
for (i = 0; i < num_axis; i++) {
|
||||||
axis = master->axis[i];
|
axis = master->axis[i];
|
||||||
|
|
||||||
list_axis = PyDict_New();
|
list_axis = PyDict_New();
|
||||||
|
if (list_axis == NULL) {
|
||||||
|
Py_DECREF(list_axes);
|
||||||
|
FT_Done_MM_Var(library, master);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
PyObject *minimum = PyLong_FromLong(axis.minimum / 65536);
|
PyObject *minimum = PyLong_FromLong(axis.minimum / 65536);
|
||||||
PyDict_SetItemString(list_axis, "minimum", minimum ? minimum : Py_None);
|
PyDict_SetItemString(list_axis, "minimum", minimum ? minimum : Py_None);
|
||||||
Py_XDECREF(minimum);
|
Py_XDECREF(minimum);
|
||||||
|
@ -1144,6 +1159,9 @@ font_getvaraxes(FontObject *self) {
|
||||||
for (j = 0; j < name_count; j++) {
|
for (j = 0; j < name_count; j++) {
|
||||||
error = FT_Get_Sfnt_Name(self->face, j, &name);
|
error = FT_Get_Sfnt_Name(self->face, j, &name);
|
||||||
if (error) {
|
if (error) {
|
||||||
|
Py_DECREF(list_axis);
|
||||||
|
Py_DECREF(list_axes);
|
||||||
|
FT_Done_MM_Var(library, master);
|
||||||
return geterror(error);
|
return geterror(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -136,13 +136,18 @@ match(PyObject *self, PyObject *args) {
|
||||||
int row_idx, col_idx;
|
int row_idx, col_idx;
|
||||||
UINT8 **inrows;
|
UINT8 **inrows;
|
||||||
PyObject *ret = PyList_New(0);
|
PyObject *ret = PyList_New(0);
|
||||||
|
if (ret == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "On", &py_lut, &i0)) {
|
if (!PyArg_ParseTuple(args, "On", &py_lut, &i0)) {
|
||||||
|
Py_DECREF(ret);
|
||||||
PyErr_SetString(PyExc_RuntimeError, "Argument parsing problem");
|
PyErr_SetString(PyExc_RuntimeError, "Argument parsing problem");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!PyBytes_Check(py_lut)) {
|
if (!PyBytes_Check(py_lut)) {
|
||||||
|
Py_DECREF(ret);
|
||||||
PyErr_SetString(PyExc_RuntimeError, "The morphology LUT is not a bytes object");
|
PyErr_SetString(PyExc_RuntimeError, "The morphology LUT is not a bytes object");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -150,6 +155,7 @@ match(PyObject *self, PyObject *args) {
|
||||||
lut_len = PyBytes_Size(py_lut);
|
lut_len = PyBytes_Size(py_lut);
|
||||||
|
|
||||||
if (lut_len < LUT_SIZE) {
|
if (lut_len < LUT_SIZE) {
|
||||||
|
Py_DECREF(ret);
|
||||||
PyErr_SetString(PyExc_RuntimeError, "The morphology LUT has the wrong size");
|
PyErr_SetString(PyExc_RuntimeError, "The morphology LUT has the wrong size");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -158,6 +164,7 @@ match(PyObject *self, PyObject *args) {
|
||||||
imgin = (Imaging)i0;
|
imgin = (Imaging)i0;
|
||||||
|
|
||||||
if (imgin->type != IMAGING_TYPE_UINT8 || imgin->bands != 1) {
|
if (imgin->type != IMAGING_TYPE_UINT8 || imgin->bands != 1) {
|
||||||
|
Py_DECREF(ret);
|
||||||
PyErr_SetString(PyExc_RuntimeError, "Unsupported image type");
|
PyErr_SetString(PyExc_RuntimeError, "Unsupported image type");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -214,10 +221,13 @@ get_on_pixels(PyObject *self, PyObject *args) {
|
||||||
int row_idx, col_idx;
|
int row_idx, col_idx;
|
||||||
int width, height;
|
int width, height;
|
||||||
PyObject *ret = PyList_New(0);
|
PyObject *ret = PyList_New(0);
|
||||||
|
if (ret == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "n", &i0)) {
|
if (!PyArg_ParseTuple(args, "n", &i0)) {
|
||||||
|
Py_DECREF(ret);
|
||||||
PyErr_SetString(PyExc_RuntimeError, "Argument parsing problem");
|
PyErr_SetString(PyExc_RuntimeError, "Argument parsing problem");
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
img = (Imaging)i0;
|
img = (Imaging)i0;
|
||||||
|
|
|
@ -58,5 +58,9 @@ PyInit__imagingtk(void) {
|
||||||
};
|
};
|
||||||
PyObject *m;
|
PyObject *m;
|
||||||
m = PyModule_Create(&module_def);
|
m = PyModule_Create(&module_def);
|
||||||
return (load_tkinter_funcs() == 0) ? m : NULL;
|
if (load_tkinter_funcs() != 0) {
|
||||||
|
Py_DECREF(m);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return m;
|
||||||
}
|
}
|
||||||
|
|
|
@ -990,6 +990,7 @@ PyInit__webp(void) {
|
||||||
|
|
||||||
m = PyModule_Create(&module_def);
|
m = PyModule_Create(&module_def);
|
||||||
if (setup_module(m) < 0) {
|
if (setup_module(m) < 0) {
|
||||||
|
Py_DECREF(m);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -439,6 +439,9 @@ path_tolist(PyPathObject *self, PyObject *args) {
|
||||||
|
|
||||||
if (flat) {
|
if (flat) {
|
||||||
list = PyList_New(self->count * 2);
|
list = PyList_New(self->count * 2);
|
||||||
|
if (list == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
for (i = 0; i < self->count * 2; i++) {
|
for (i = 0; i < self->count * 2; i++) {
|
||||||
PyObject *item;
|
PyObject *item;
|
||||||
item = PyFloat_FromDouble(self->xy[i]);
|
item = PyFloat_FromDouble(self->xy[i]);
|
||||||
|
@ -449,6 +452,9 @@ path_tolist(PyPathObject *self, PyObject *args) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
list = PyList_New(self->count);
|
list = PyList_New(self->count);
|
||||||
|
if (list == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
for (i = 0; i < self->count; i++) {
|
for (i = 0; i < self->count; i++) {
|
||||||
PyObject *item;
|
PyObject *item;
|
||||||
item = Py_BuildValue("dd", self->xy[i + i], self->xy[i + i + 1]);
|
item = Py_BuildValue("dd", self->xy[i + i], self->xy[i + i + 1]);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user