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