Group decrementing reference counts for previous axes in font_getvaraxes

This commit is contained in:
Andrew Murray 2023-03-20 22:44:14 +11:00
parent c7d4d1f75a
commit dfeed0eb7e

View File

@ -1114,7 +1114,7 @@ font_getvarnames(FontObject *self) {
static PyObject * static PyObject *
font_getvaraxes(FontObject *self) { font_getvaraxes(FontObject *self) {
int error; int error, failed = 0;
FT_UInt i, j, num_axis, name_count; FT_UInt i, j, num_axis, name_count;
FT_MM_Var *master; FT_MM_Var *master;
FT_Var_Axis axis; FT_Var_Axis axis;
@ -1137,13 +1137,8 @@ font_getvaraxes(FontObject *self) {
list_axis = PyDict_New(); list_axis = PyDict_New();
if (list_axis == NULL) { if (list_axis == NULL) {
for (j = 0; j < i; j++) { failed = 1;
list_axis = PyList_GetItem(list_axes, j); } else {
Py_DECREF(list_axis);
}
Py_DECREF(list_axes);
return NULL;
}
PyDict_SetItemString( PyDict_SetItemString(
list_axis, "minimum", PyLong_FromLong(axis.minimum / 65536)); list_axis, "minimum", PyLong_FromLong(axis.minimum / 65536));
PyDict_SetItemString(list_axis, "default", PyLong_FromLong(axis.def / 65536)); PyDict_SetItemString(list_axis, "default", PyLong_FromLong(axis.def / 65536));
@ -1154,12 +1149,8 @@ font_getvaraxes(FontObject *self) {
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_axis);
for (j = 0; j < i; j++) { failed = 1;
list_axis = PyList_GetItem(list_axes, j); break;
Py_DECREF(list_axis);
}
Py_DECREF(list_axes);
return geterror(error);
} }
if (name.name_id == axis.strid) { if (name.name_id == axis.strid) {
@ -1168,6 +1159,18 @@ font_getvaraxes(FontObject *self) {
break; break;
} }
} }
}
if (failed) {
for (j = 0; j < i; j++) {
list_axis = PyList_GetItem(list_axes, j);
Py_DECREF(list_axis);
}
Py_DECREF(list_axes);
if (error) {
return geterror(error);
}
return NULL;
}
PyList_SetItem(list_axes, i, list_axis); PyList_SetItem(list_axes, i, list_axis);
} }