@@ -94,7 +94,7 @@ PyCField_FromDesc manages:
9494*/
9595
9696static void
97- PyCField_FromDesc_gcc (int bitsize , Py_ssize_t * pbitofs ,
97+ PyCField_FromDesc_gcc (Py_ssize_t bitsize , Py_ssize_t * pbitofs ,
9898 Py_ssize_t * psize , Py_ssize_t * poffset , Py_ssize_t * palign ,
9999 CFieldObject * self , StgDictObject * dict ,
100100 int is_bitfield
@@ -131,9 +131,9 @@ PyCField_FromDesc_gcc(int bitsize, Py_ssize_t *pbitofs,
131131
132132static void
133133PyCField_FromDesc_msvc (
134- Py_ssize_t * pfield_size , int bitsize , Py_ssize_t * pbitofs ,
135- Py_ssize_t * psize , Py_ssize_t * poffset , Py_ssize_t * palign ,
136- int pack ,
134+ Py_ssize_t * pfield_size , Py_ssize_t bitsize ,
135+ Py_ssize_t * pbitofs , Py_ssize_t * psize , Py_ssize_t * poffset ,
136+ Py_ssize_t * palign , int pack ,
137137 CFieldObject * self , StgDictObject * dict ,
138138 int is_bitfield
139139 )
@@ -180,8 +180,8 @@ PyCField_FromDesc_msvc(
180180
181181PyObject *
182182PyCField_FromDesc (PyObject * desc , Py_ssize_t index ,
183- Py_ssize_t * pfield_size , int bitsize , Py_ssize_t * pbitofs ,
184- Py_ssize_t * psize , Py_ssize_t * poffset , Py_ssize_t * palign ,
183+ Py_ssize_t * pfield_size , Py_ssize_t bitsize ,
184+ Py_ssize_t * pbitofs , Py_ssize_t * psize , Py_ssize_t * poffset , Py_ssize_t * palign ,
185185 int pack , int big_endian , int ms_struct )
186186{
187187 CFieldObject * self = (CFieldObject * )_PyObject_CallNoArgs ((PyObject * )& PyCField_Type );
@@ -235,6 +235,9 @@ PyCField_FromDesc(PyObject *desc, Py_ssize_t index,
235235
236236 int is_bitfield = !!bitsize ;
237237 if (!is_bitfield ) {
238+ assert (dict -> size >= 0 );
239+ // assert: no overflow;
240+ assert (dict -> size < (1ULL << (8 * sizeof (Py_ssize_t )- 1 )) / 8 );
238241 bitsize = 8 * dict -> size ;
239242 // Caution: bitsize might still be 0 now.
240243 }
0 commit comments