Don't use PyList_GetItemRef immediately after PyList_New

This commit is contained in:
Lysandros Nikolaou 2024-07-05 16:30:48 +02:00 committed by Hugo van Kemenade
parent 87596bd747
commit 40e7f511b3

View File

@ -1205,6 +1205,16 @@ 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);
int *list_names_filled = PyMem_Malloc(num_namedstyles * sizeof(int));
if (list_names_filled == NULL) {
return PyErr_NoMemory();
}
for (int i = 0; i < num_namedstyles; i++) {
list_names_filled[i] = 0;
}
if (list_names == NULL) { if (list_names == NULL) {
FT_Done_MM_Var(library, master); FT_Done_MM_Var(library, master);
return NULL; return NULL;
@ -1220,13 +1230,14 @@ font_getvarnames(FontObject *self) {
} }
for (j = 0; j < num_namedstyles; j++) { for (j = 0; j < num_namedstyles; j++) {
if (PyList_GetItemRef(list_names, j) != NULL) { if (list_names_filled[j]) {
continue; continue;
} }
if (master->namedstyle[j].strid == name.name_id) { if (master->namedstyle[j].strid == name.name_id) {
list_name = Py_BuildValue("y#", name.string, name.string_len); list_name = Py_BuildValue("y#", name.string, name.string_len);
PyList_SetItem(list_names, j, list_name); PyList_SetItem(list_names, j, list_name);
list_names_filled[j] = 1;
break; break;
} }
} }