mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-25 09:26:16 +03:00
Merge pull request #2131 from wiredfool/imagecms-segfault
Fix for ImageCms Segfault
This commit is contained in:
commit
9440764863
|
@ -162,8 +162,11 @@ class ImageCmsProfile(object):
|
||||||
self._set(core.profile_open(profile), profile)
|
self._set(core.profile_open(profile), profile)
|
||||||
elif hasattr(profile, "read"):
|
elif hasattr(profile, "read"):
|
||||||
self._set(core.profile_frombytes(profile.read()))
|
self._set(core.profile_frombytes(profile.read()))
|
||||||
|
elif isinstance(profile, _imagingcms.CmsProfile):
|
||||||
|
self._set(profile)
|
||||||
else:
|
else:
|
||||||
self._set(profile) # assume it's already a profile
|
raise TypeError("Invalid type for Profile")
|
||||||
|
|
||||||
|
|
||||||
def _set(self, profile, filename=None):
|
def _set(self, profile, filename=None):
|
||||||
self.profile = profile
|
self.profile = profile
|
||||||
|
|
|
@ -321,5 +321,17 @@ class TestImageCms(PillowTestCase):
|
||||||
self.assertEqual(p.viewing_condition, 'Reference Viewing Condition in IEC 61966-2-1')
|
self.assertEqual(p.viewing_condition, 'Reference Viewing Condition in IEC 61966-2-1')
|
||||||
self.assertEqual(p.xcolor_space, 'RGB ')
|
self.assertEqual(p.xcolor_space, 'RGB ')
|
||||||
|
|
||||||
|
def test_profile_typesafety(self):
|
||||||
|
""" Profile init type safety
|
||||||
|
|
||||||
|
prepatch, these would segfault, postpatch they should emit a typeerror
|
||||||
|
"""
|
||||||
|
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
ImageCms.ImageCmsProfile(0).tobytes()
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
ImageCms.ImageCmsProfile(1).tobytes()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -1378,7 +1378,8 @@ static struct PyGetSetDef cms_profile_getsetters[] = {
|
||||||
|
|
||||||
static PyTypeObject CmsProfile_Type = {
|
static PyTypeObject CmsProfile_Type = {
|
||||||
PyVarObject_HEAD_INIT(NULL, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
"CmsProfile", sizeof(CmsProfileObject), 0,
|
"PIL._imagingcms.CmsProfile", /*tp_name */
|
||||||
|
sizeof(CmsProfileObject), 0,/*tp_basicsize, tp_itemsize */
|
||||||
/* methods */
|
/* methods */
|
||||||
(destructor) cms_profile_dealloc, /*tp_dealloc*/
|
(destructor) cms_profile_dealloc, /*tp_dealloc*/
|
||||||
0, /*tp_print*/
|
0, /*tp_print*/
|
||||||
|
@ -1470,10 +1471,15 @@ setup_module(PyObject* m) {
|
||||||
|
|
||||||
d = PyModule_GetDict(m);
|
d = PyModule_GetDict(m);
|
||||||
|
|
||||||
|
CmsProfile_Type.tp_new = PyType_GenericNew;
|
||||||
|
|
||||||
/* Ready object types */
|
/* Ready object types */
|
||||||
PyType_Ready(&CmsProfile_Type);
|
PyType_Ready(&CmsProfile_Type);
|
||||||
PyType_Ready(&CmsTransform_Type);
|
PyType_Ready(&CmsTransform_Type);
|
||||||
|
|
||||||
|
Py_INCREF(&CmsProfile_Type);
|
||||||
|
PyModule_AddObject(m, "CmsProfile", (PyObject *)&CmsProfile_Type);
|
||||||
|
|
||||||
d = PyModule_GetDict(m);
|
d = PyModule_GetDict(m);
|
||||||
|
|
||||||
v = PyUnicode_FromFormat("%d.%d", LCMS_VERSION / 100, LCMS_VERSION % 100);
|
v = PyUnicode_FromFormat("%d.%d", LCMS_VERSION / 100, LCMS_VERSION % 100);
|
||||||
|
@ -1499,7 +1505,7 @@ PyInit__imagingcms(void) {
|
||||||
|
|
||||||
if (setup_module(m) < 0)
|
if (setup_module(m) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
PyDateTime_IMPORT;
|
PyDateTime_IMPORT;
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user