@@ -1315,9 +1315,15 @@ list_extend_set(PyListObject *self, PySetObject *other)
1315
1315
{
1316
1316
Py_ssize_t m = Py_SIZE (self );
1317
1317
Py_ssize_t n = PySet_GET_SIZE (other );
1318
- if (list_resize (self , m + n ) < 0 ) {
1318
+ Py_ssize_t r = m + n ;
1319
+ if (r == 0 ) {
1320
+ return 0 ;
1321
+ }
1322
+ if (list_resize (self , r ) < 0 ) {
1319
1323
return -1 ;
1320
1324
}
1325
+
1326
+ assert (self -> ob_item != NULL );
1321
1327
/* populate the end of self with iterable's items */
1322
1328
Py_ssize_t setpos = 0 ;
1323
1329
Py_hash_t hash ;
@@ -1327,7 +1333,7 @@ list_extend_set(PyListObject *self, PySetObject *other)
1327
1333
FT_ATOMIC_STORE_PTR_RELEASE (* dest , key );
1328
1334
dest ++ ;
1329
1335
}
1330
- Py_SET_SIZE (self , m + n );
1336
+ Py_SET_SIZE (self , r );
1331
1337
return 0 ;
1332
1338
}
1333
1339
@@ -1337,10 +1343,15 @@ list_extend_dict(PyListObject *self, PyDictObject *dict, int which_item)
1337
1343
// which_item: 0 for keys and 1 for values
1338
1344
Py_ssize_t m = Py_SIZE (self );
1339
1345
Py_ssize_t n = PyDict_GET_SIZE (dict );
1340
- if (list_resize (self , m + n ) < 0 ) {
1346
+ Py_ssize_t r = m + n ;
1347
+ if (r == 0 ) {
1348
+ return 0 ;
1349
+ }
1350
+ if (list_resize (self , r ) < 0 ) {
1341
1351
return -1 ;
1342
1352
}
1343
1353
1354
+ assert (self -> ob_item != NULL );
1344
1355
PyObject * * dest = self -> ob_item + m ;
1345
1356
Py_ssize_t pos = 0 ;
1346
1357
PyObject * keyvalue [2 ];
@@ -1351,7 +1362,7 @@ list_extend_dict(PyListObject *self, PyDictObject *dict, int which_item)
1351
1362
dest ++ ;
1352
1363
}
1353
1364
1354
- Py_SET_SIZE (self , m + n );
1365
+ Py_SET_SIZE (self , r );
1355
1366
return 0 ;
1356
1367
}
1357
1368
@@ -1360,10 +1371,15 @@ list_extend_dictitems(PyListObject *self, PyDictObject *dict)
1360
1371
{
1361
1372
Py_ssize_t m = Py_SIZE (self );
1362
1373
Py_ssize_t n = PyDict_GET_SIZE (dict );
1363
- if (list_resize (self , m + n ) < 0 ) {
1374
+ Py_ssize_t r = m + n ;
1375
+ if (r == 0 ) {
1376
+ return 0 ;
1377
+ }
1378
+ if (list_resize (self , r ) < 0 ) {
1364
1379
return -1 ;
1365
1380
}
1366
1381
1382
+ assert (self -> ob_item != NULL );
1367
1383
PyObject * * dest = self -> ob_item + m ;
1368
1384
Py_ssize_t pos = 0 ;
1369
1385
Py_ssize_t i = 0 ;
@@ -1379,7 +1395,7 @@ list_extend_dictitems(PyListObject *self, PyDictObject *dict)
1379
1395
i ++ ;
1380
1396
}
1381
1397
1382
- Py_SET_SIZE (self , m + n );
1398
+ Py_SET_SIZE (self , r );
1383
1399
return 0 ;
1384
1400
}
1385
1401
0 commit comments