@@ -117,8 +117,8 @@ nis_foreach (int instatus, char *inkey, int inkeylen, char *inval,
117117 if (invallen > 0 && inval [invallen - 1 ] == '\0' )
118118 invallen -- ;
119119 }
120- key = PyUnicode_FromStringAndSize (inkey , inkeylen );
121- val = PyUnicode_FromStringAndSize (inval , invallen );
120+ key = PyUnicode_DecodeFSDefaultAndSize (inkey , inkeylen );
121+ val = PyUnicode_DecodeFSDefaultAndSize (inval , invallen );
122122 if (key == NULL || val == NULL ) {
123123 /* XXX error -- don't know how to handle */
124124 PyErr_Clear ();
@@ -159,30 +159,40 @@ nis_match (PyObject *self, PyObject *args, PyObject *kwdict)
159159{
160160 char * match ;
161161 char * domain = NULL ;
162- int keylen , len ;
162+ Py_ssize_t keylen ;
163+ int len ;
163164 char * key , * map ;
164165 int err ;
165- PyObject * res ;
166+ PyObject * ukey , * bkey , * res ;
166167 int fix ;
167168 static char * kwlist [] = {"key" , "map" , "domain" , NULL };
168169
169170 if (!PyArg_ParseTupleAndKeywords (args , kwdict ,
170- "s#s |s:match" , kwlist ,
171- & key , & keylen , & map , & domain ))
171+ "Us |s:match" , kwlist ,
172+ & ukey , & map , & domain ))
172173 return NULL ;
173- if (!domain && ((err = yp_get_default_domain (& domain )) != 0 ))
174+ if ((bkey = PyUnicode_EncodeFSDefault (ukey )) == NULL )
175+ return NULL ;
176+ if (PyBytes_AsStringAndSize (bkey , & key , & keylen ) == -1 ) {
177+ Py_DECREF (bkey );
178+ return NULL ;
179+ }
180+ if (!domain && ((err = yp_get_default_domain (& domain )) != 0 )) {
181+ Py_DECREF (bkey );
174182 return nis_error (err );
183+ }
175184 map = nis_mapname (map , & fix );
176185 if (fix )
177186 keylen ++ ;
178187 Py_BEGIN_ALLOW_THREADS
179188 err = yp_match (domain , map , key , keylen , & match , & len );
180189 Py_END_ALLOW_THREADS
190+ Py_DECREF (bkey );
181191 if (fix )
182192 len -- ;
183193 if (err != 0 )
184194 return nis_error (err );
185- res = PyUnicode_FromStringAndSize (match , len );
195+ res = PyUnicode_DecodeFSDefaultAndSize (match , len );
186196 free (match );
187197 return res ;
188198}
0 commit comments