@@ -94,10 +94,12 @@ static PyObject *
9494dbm_subscript (dbmobject * dp , register PyObject * key )
9595{
9696 datum drec , krec ;
97+ int tmp_size ;
9798
98- if (!PyArg_Parse (key , "s#" , & krec .dptr , & krec . dsize ) )
99+ if (!PyArg_Parse (key , "s#" , & krec .dptr , & tmp_size ) )
99100 return NULL ;
100101
102+ krec .dsize = tmp_size ;
101103 check_dbmobject_open (dp );
102104 drec = dbm_fetch (dp -> di_dbm , krec );
103105 if ( drec .dptr == 0 ) {
@@ -117,12 +119,14 @@ static int
117119dbm_ass_sub (dbmobject * dp , PyObject * v , PyObject * w )
118120{
119121 datum krec , drec ;
122+ int tmp_size ;
120123
121- if ( !PyArg_Parse (v , "s#" , & krec .dptr , & krec . dsize ) ) {
124+ if ( !PyArg_Parse (v , "s#" , & krec .dptr , & tmp_size ) ) {
122125 PyErr_SetString (PyExc_TypeError ,
123126 "dbm mappings have string indices only" );
124127 return -1 ;
125128 }
129+ krec .dsize = tmp_size ;
126130 if (dp -> di_dbm == NULL ) {
127131 PyErr_SetString (DbmError , "DBM object has already been closed" );
128132 return -1 ;
@@ -136,11 +140,12 @@ dbm_ass_sub(dbmobject *dp, PyObject *v, PyObject *w)
136140 return -1 ;
137141 }
138142 } else {
139- if ( !PyArg_Parse (w , "s#" , & drec .dptr , & drec . dsize ) ) {
143+ if ( !PyArg_Parse (w , "s#" , & drec .dptr , & tmp_size ) ) {
140144 PyErr_SetString (PyExc_TypeError ,
141145 "dbm mappings have string elements only" );
142146 return -1 ;
143147 }
148+ drec .dsize = tmp_size ;
144149 if ( dbm_store (dp -> di_dbm , krec , drec , DBM_REPLACE ) < 0 ) {
145150 dbm_clearerr (dp -> di_dbm );
146151 PyErr_SetString (DbmError ,
@@ -208,9 +213,11 @@ static PyObject *
208213dbm_has_key (register dbmobject * dp , PyObject * args )
209214{
210215 datum key , val ;
216+ int tmp_size ;
211217
212- if (!PyArg_ParseTuple (args , "s#:has_key" , & key .dptr , & key . dsize ))
218+ if (!PyArg_ParseTuple (args , "s#:has_key" , & key .dptr , & tmp_size ))
213219 return NULL ;
220+ key .dsize = tmp_size ;
214221 check_dbmobject_open (dp );
215222 val = dbm_fetch (dp -> di_dbm , key );
216223 return PyInt_FromLong (val .dptr != NULL );
@@ -221,10 +228,12 @@ dbm_get(register dbmobject *dp, PyObject *args)
221228{
222229 datum key , val ;
223230 PyObject * defvalue = Py_None ;
231+ int tmp_size ;
224232
225233 if (!PyArg_ParseTuple (args , "s#|O:get" ,
226- & key .dptr , & key . dsize , & defvalue ))
234+ & key .dptr , & tmp_size , & defvalue ))
227235 return NULL ;
236+ key .dsize = tmp_size ;
228237 check_dbmobject_open (dp );
229238 val = dbm_fetch (dp -> di_dbm , key );
230239 if (val .dptr != NULL )
@@ -240,10 +249,12 @@ dbm_setdefault(register dbmobject *dp, PyObject *args)
240249{
241250 datum key , val ;
242251 PyObject * defvalue = NULL ;
252+ int tmp_size ;
243253
244254 if (!PyArg_ParseTuple (args , "s#|S:setdefault" ,
245- & key .dptr , & key . dsize , & defvalue ))
255+ & key .dptr , & tmp_size , & defvalue ))
246256 return NULL ;
257+ key .dsize = tmp_size ;
247258 check_dbmobject_open (dp );
248259 val = dbm_fetch (dp -> di_dbm , key );
249260 if (val .dptr != NULL )
0 commit comments