@@ -1239,7 +1239,12 @@ insert_int(
12391239 return -1 ;
12401240 }
12411241 if (self -> table [table_pos ].hash != -1 ) {
1242- PyErr_SetObject (NonUniqueError , PyLong_FromSsize_t (key ));
1242+ PyObject * er = PyLong_FromLongLong (key ); // for error reporting
1243+ if (er == NULL ) {
1244+ return -1 ;
1245+ }
1246+ PyErr_SetObject (NonUniqueError , er );
1247+ Py_DECREF (er );
12431248 return -1 ;
12441249 }
12451250 self -> table [table_pos ].keys_pos = keys_pos ;
@@ -1264,7 +1269,12 @@ insert_uint(
12641269 return -1 ;
12651270 }
12661271 if (self -> table [table_pos ].hash != -1 ) {
1267- PyErr_SetObject (NonUniqueError , PyLong_FromSsize_t (key ));
1272+ PyObject * er = PyLong_FromUnsignedLongLong (key );
1273+ if (er == NULL ) {
1274+ return -1 ;
1275+ }
1276+ PyErr_SetObject (NonUniqueError , er );
1277+ Py_DECREF (er );
12681278 return -1 ;
12691279 }
12701280 self -> table [table_pos ].keys_pos = keys_pos ;
@@ -1290,7 +1300,12 @@ insert_double(
12901300 return -1 ;
12911301 }
12921302 if (self -> table [table_pos ].hash != -1 ) {
1293- PyErr_SetObject (NonUniqueError , PyFloat_FromDouble (key ));
1303+ PyObject * er = PyFloat_FromDouble (key );
1304+ if (er == NULL ) {
1305+ return -1 ;
1306+ }
1307+ PyErr_SetObject (NonUniqueError , er );
1308+ Py_DECREF (er );
12941309 return -1 ;
12951310 }
12961311 self -> table [table_pos ].keys_pos = keys_pos ;
@@ -1316,8 +1331,12 @@ insert_unicode(
13161331 return -1 ;
13171332 }
13181333 if (self -> table [table_pos ].hash != -1 ) {
1319- PyErr_SetObject (NonUniqueError ,
1320- PyUnicode_FromKindAndData (PyUnicode_4BYTE_KIND , key , key_size ));
1334+ PyObject * er = PyUnicode_FromKindAndData (PyUnicode_4BYTE_KIND , key , key_size );
1335+ if (er == NULL ) {
1336+ return -1 ;
1337+ }
1338+ PyErr_SetObject (NonUniqueError , er );
1339+ Py_DECREF (er );
13211340 return -1 ;
13221341 }
13231342 self -> table [table_pos ].keys_pos = keys_pos ;
@@ -1343,8 +1362,12 @@ insert_string(
13431362 return -1 ;
13441363 }
13451364 if (self -> table [table_pos ].hash != -1 ) {
1346- PyErr_SetObject (NonUniqueError ,
1347- PyBytes_FromStringAndSize (key , key_size ));
1365+ PyObject * er = PyBytes_FromStringAndSize (key , key_size );
1366+ if (er == NULL ) {
1367+ return -1 ;
1368+ }
1369+ PyErr_SetObject (NonUniqueError , er );
1370+ Py_DECREF (er );
13481371 return -1 ;
13491372 }
13501373 self -> table [table_pos ].keys_pos = keys_pos ;
@@ -1947,6 +1970,7 @@ fam_init(PyObject *self, PyObject *args, PyObject *kwargs)
19471970 }
19481971 return 0 ;
19491972error :
1973+ // assume all dynamic memory assigned to struct attrs that will be cleaned
19501974 return -1 ;
19511975}
19521976
0 commit comments