mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-25 17:36:18 +03:00
Merge pull request #7218 from radarhere/null
This commit is contained in:
commit
d64739f4d1
BIN
Tests/fonts/oom-4da0210eb7081b0bf15bf16cc4c52ce02c1e1bbc.ttf
Normal file
BIN
Tests/fonts/oom-4da0210eb7081b0bf15bf16cc4c52ce02c1e1bbc.ttf
Normal file
Binary file not shown.
|
@ -1042,6 +1042,7 @@ def test_render_mono_size():
|
||||||
"test_file",
|
"test_file",
|
||||||
[
|
[
|
||||||
"Tests/fonts/oom-e8e927ba6c0d38274a37c1567560eb33baf74627.ttf",
|
"Tests/fonts/oom-e8e927ba6c0d38274a37c1567560eb33baf74627.ttf",
|
||||||
|
"Tests/fonts/oom-4da0210eb7081b0bf15bf16cc4c52ce02c1e1bbc.ttf",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_oom(test_file):
|
def test_oom(test_file):
|
||||||
|
|
|
@ -880,13 +880,17 @@ font_render(FontObject *self, PyObject *args) {
|
||||||
width += stroke_width * 2 + ceil(x_start);
|
width += stroke_width * 2 + ceil(x_start);
|
||||||
height += stroke_width * 2 + ceil(y_start);
|
height += stroke_width * 2 + ceil(y_start);
|
||||||
if (max_image_pixels != Py_None) {
|
if (max_image_pixels != Py_None) {
|
||||||
if (width * height > PyLong_AsLong(max_image_pixels) * 2) {
|
if ((long long)width * height > PyLong_AsLongLong(max_image_pixels) * 2) {
|
||||||
PyMem_Del(glyph_info);
|
PyMem_Del(glyph_info);
|
||||||
return Py_BuildValue("O(ii)(ii)", Py_None, width, height, 0, 0);
|
return Py_BuildValue("O(ii)(ii)", Py_None, width, height, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
image = PyObject_CallFunction(fill, "s(ii)", strcmp(mode, "RGBA") == 0 ? "RGBA" : "L", width, height);
|
image = PyObject_CallFunction(fill, "s(ii)", strcmp(mode, "RGBA") == 0 ? "RGBA" : "L", width, height);
|
||||||
|
if (image == NULL) {
|
||||||
|
PyMem_Del(glyph_info);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
id = PyLong_AsSsize_t(PyObject_GetAttrString(image, "id"));
|
id = PyLong_AsSsize_t(PyObject_GetAttrString(image, "id"));
|
||||||
im = (Imaging)id;
|
im = (Imaging)id;
|
||||||
|
|
||||||
|
@ -900,7 +904,8 @@ font_render(FontObject *self, PyObject *args) {
|
||||||
if (stroke_width) {
|
if (stroke_width) {
|
||||||
error = FT_Stroker_New(library, &stroker);
|
error = FT_Stroker_New(library, &stroker);
|
||||||
if (error) {
|
if (error) {
|
||||||
return geterror(error);
|
geterror(error);
|
||||||
|
goto glyph_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
FT_Stroker_Set(
|
FT_Stroker_Set(
|
||||||
|
@ -923,7 +928,8 @@ font_render(FontObject *self, PyObject *args) {
|
||||||
error =
|
error =
|
||||||
FT_Load_Glyph(self->face, glyph_info[i].index, load_flags | FT_LOAD_RENDER);
|
FT_Load_Glyph(self->face, glyph_info[i].index, load_flags | FT_LOAD_RENDER);
|
||||||
if (error) {
|
if (error) {
|
||||||
return geterror(error);
|
geterror(error);
|
||||||
|
goto glyph_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
glyph_slot = self->face->glyph;
|
glyph_slot = self->face->glyph;
|
||||||
|
@ -954,7 +960,8 @@ font_render(FontObject *self, PyObject *args) {
|
||||||
|
|
||||||
error = FT_Load_Glyph(self->face, glyph_info[i].index, load_flags);
|
error = FT_Load_Glyph(self->face, glyph_info[i].index, load_flags);
|
||||||
if (error) {
|
if (error) {
|
||||||
return geterror(error);
|
geterror(error);
|
||||||
|
goto glyph_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
glyph_slot = self->face->glyph;
|
glyph_slot = self->face->glyph;
|
||||||
|
@ -968,7 +975,8 @@ font_render(FontObject *self, PyObject *args) {
|
||||||
error = FT_Glyph_To_Bitmap(&glyph, FT_RENDER_MODE_NORMAL, &origin, 1);
|
error = FT_Glyph_To_Bitmap(&glyph, FT_RENDER_MODE_NORMAL, &origin, 1);
|
||||||
}
|
}
|
||||||
if (error) {
|
if (error) {
|
||||||
return geterror(error);
|
geterror(error);
|
||||||
|
goto glyph_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
bitmap_glyph = (FT_BitmapGlyph)glyph;
|
bitmap_glyph = (FT_BitmapGlyph)glyph;
|
||||||
|
@ -1110,6 +1118,12 @@ font_render(FontObject *self, PyObject *args) {
|
||||||
return Py_BuildValue("O(ii)(ii)", image, width, height, x_offset, y_offset);
|
return Py_BuildValue("O(ii)(ii)", image, width, height, x_offset, y_offset);
|
||||||
|
|
||||||
glyph_error:
|
glyph_error:
|
||||||
|
if (im->destroy) {
|
||||||
|
im->destroy(im);
|
||||||
|
}
|
||||||
|
if (im->image) {
|
||||||
|
free(im->image);
|
||||||
|
}
|
||||||
if (stroker != NULL) {
|
if (stroker != NULL) {
|
||||||
FT_Done_Glyph(glyph);
|
FT_Done_Glyph(glyph);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user