@@ -5600,21 +5600,79 @@ test_code_api(PyObject *self, PyObject *Py_UNUSED(args))
5600
5600
if (co == NULL ) {
5601
5601 return NULL ;
5602
5602
}
5603
- PyObject * co_code = PyCode_GetCode (co );
5604
- if (co_code == NULL ) {
5605
- Py_DECREF (co );
5606
- return NULL ;
5607
- }
5608
- assert (PyBytes_CheckExact (co_code ));
5609
- if (PyObject_Length (co_code ) == 0 ) {
5610
- PyErr_SetString (PyExc_ValueError , "empty co_code" );
5611
- Py_DECREF (co );
5603
+ /* co_code */
5604
+ {
5605
+ PyObject * co_code = PyCode_GetCode (co );
5606
+ if (co_code == NULL ) {
5607
+ goto fail ;
5608
+ }
5609
+ assert (PyBytes_CheckExact (co_code ));
5610
+ if (PyObject_Length (co_code ) == 0 ) {
5611
+ PyErr_SetString (PyExc_ValueError , "empty co_code" );
5612
+ Py_DECREF (co_code );
5613
+ goto fail ;
5614
+ }
5612
5615
Py_DECREF (co_code );
5613
- return NULL ;
5616
+ }
5617
+ /* co_varnames */
5618
+ {
5619
+ PyObject * co_varnames = PyCode_GetVarnames (co );
5620
+ if (co_varnames == NULL ) {
5621
+ goto fail ;
5622
+ }
5623
+ if (!PyTuple_CheckExact (co_varnames )) {
5624
+ PyErr_SetString (PyExc_TypeError , "co_varnames not tuple" );
5625
+ Py_DECREF (co_varnames );
5626
+ goto fail ;
5627
+ }
5628
+ if (PyTuple_GET_SIZE (co_varnames ) != 0 ) {
5629
+ PyErr_SetString (PyExc_ValueError , "non-empty co_varnames" );
5630
+ Py_DECREF (co_varnames );
5631
+ goto fail ;
5632
+ }
5633
+ Py_DECREF (co_varnames );
5634
+ }
5635
+ /* co_cellvars */
5636
+ {
5637
+ PyObject * co_cellvars = PyCode_GetCellvars (co );
5638
+ if (co_cellvars == NULL ) {
5639
+ goto fail ;
5640
+ }
5641
+ if (!PyTuple_CheckExact (co_cellvars )) {
5642
+ PyErr_SetString (PyExc_TypeError , "co_cellvars not tuple" );
5643
+ Py_DECREF (co_cellvars );
5644
+ goto fail ;
5645
+ }
5646
+ if (PyTuple_GET_SIZE (co_cellvars ) != 0 ) {
5647
+ PyErr_SetString (PyExc_ValueError , "non-empty co_cellvars" );
5648
+ Py_DECREF (co_cellvars );
5649
+ goto fail ;
5650
+ }
5651
+ Py_DECREF (co_cellvars );
5652
+ }
5653
+ /* co_freevars */
5654
+ {
5655
+ PyObject * co_freevars = PyCode_GetFreevars (co );
5656
+ if (co_freevars == NULL ) {
5657
+ goto fail ;
5658
+ }
5659
+ if (!PyTuple_CheckExact (co_freevars )) {
5660
+ PyErr_SetString (PyExc_TypeError , "co_freevars not tuple" );
5661
+ Py_DECREF (co_freevars );
5662
+ goto fail ;
5663
+ }
5664
+ if (PyTuple_GET_SIZE (co_freevars ) != 0 ) {
5665
+ PyErr_SetString (PyExc_ValueError , "non-empty co_freevars" );
5666
+ Py_DECREF (co_freevars );
5667
+ goto fail ;
5668
+ }
5669
+ Py_DECREF (co_freevars );
5614
5670
}
5615
5671
Py_DECREF (co );
5616
- Py_DECREF (co_code );
5617
5672
Py_RETURN_NONE ;
5673
+ fail :
5674
+ Py_DECREF (co );
5675
+ return NULL ;
5618
5676
}
5619
5677
5620
5678
static int
0 commit comments