Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 45e26ec

Browse files
Remove warning
1 parent e7e5ae9 commit 45e26ec

3 files changed

Lines changed: 13 additions & 9 deletions

File tree

Modules/_ctypes/cfield.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ PyCField_FromDesc manages:
9494
*/
9595

9696
static 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

132132
static void
133133
PyCField_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

181181
PyObject *
182182
PyCField_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
}

Modules/_ctypes/ctypes.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,9 @@ extern struct fielddesc *_ctypes_get_fielddesc(const char *fmt);
141141

142142
extern PyObject *
143143
PyCField_FromDesc(PyObject *desc, Py_ssize_t index,
144-
Py_ssize_t *pfield_size, int bitsize, Py_ssize_t *pbitofs,
145-
Py_ssize_t *psize, Py_ssize_t *poffset, Py_ssize_t *palign,
144+
Py_ssize_t *pfield_size, Py_ssize_t bitsize,
145+
Py_ssize_t *pbitofs, Py_ssize_t *psize, Py_ssize_t *poffset,
146+
Py_ssize_t *palign,
146147
int pack, int is_big_endian, int ms_struct);
147148

148149
extern PyObject *PyCData_AtAddress(PyObject *type, void *buf);

Modules/_ctypes/stgdict.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,7 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct
525525
PyObject *pair = PySequence_GetItem(fields, i);
526526
PyObject *prop;
527527
StgDictObject *dict;
528-
int bitsize = 0;
528+
Py_ssize_t bitsize = 0;
529529

530530
if (!pair || !PyArg_ParseTuple(pair, "UO|i", &name, &desc, &bitsize)) {
531531
PyErr_SetString(PyExc_TypeError,

0 commit comments

Comments
 (0)