File: krb5module.c
Function: Context_recvauth
Error: ob_refcnt of '*ctx' is 1 too high
1251 static PyObject*
1252 Context_recvauth(PyObject *unself, PyObject *args, PyObject *kw)
1253 {
1254   krb5_context kctx = NULL;
1255   PyObject *ctx, *retval, *self, *fd_obj, *server = NULL, *keytab = NULL, *tmp, *options = NULL;
1256   krb5_auth_context ac_out = NULL;
1257   krb5_keytab kt;
1258   krb5_principal pserver;
1259   krb5_ticket *cticket;
1260   krb5_flags ap_req_options = 0;
1261   krb5_error_code rc = 0;
1262   int free_keytab = 0;
1263   int fd;
1264   char *appl_version;
1265   krb5_pointer fd_ptr = &fd;
1266 
1267   if(!PyArg_ParseTuple(args, "OOs:recvauth", &self, &fd_obj, &appl_version))
when PyArg_ParseTuple() succeeds
taking False path
1268     return NULL;
1269 
1270   fd = obj_to_fd(fd_obj);
1271   if(fd < 0)
when considering range: 0 <= value <= 0x7fffffff
taking False path
1272     return NULL;
1273 
1274   ctx = PyObject_GetAttrString(self, "_ctx");
when PyObject_GetAttrString() succeeds
new ref from call to PyObject_GetAttrString allocated at:   ctx = PyObject_GetAttrString(self, "_ctx");
ob_refcnt is now refs: 1 + N where N >= 0
1275   kctx = PyCObject_AsVoidPtr(ctx);
when PyCObject_AsVoidPtr() returns
1276 
1277   if(kw)
taking True path
1278     {
1279       options = PyDict_GetItemString(kw, "options");
when PyDict_GetItemString() succeeds
1280       server = PyDict_GetItemString(kw, "server");
when PyDict_GetItemString() succeeds
1281       keytab = PyDict_GetItemString(kw, "keytab");
when PyDict_GetItemString() succeeds
1282     }
1283 
1284   if(!keytab || keytab == Py_None)
taking False path
taking False path
1285     {
1286       PyObject *subargs;
1287       subargs = Py_BuildValue("(O)", self);
1288       keytab = Context_kt_default(unself, subargs, NULL);
1289       Py_DECREF(subargs);
1290       free_keytab = 1;
1291     }
1292   tmp = PyObject_GetAttrString(keytab, "_keytab");
when PyObject_GetAttrString() succeeds
1293   kt = PyCObject_AsVoidPtr(tmp);
when PyCObject_AsVoidPtr() returns
1294   if(free_keytab)
taking False path
1295     {
1296       Py_DECREF(keytab);
1297     }
1298 
1299   if(server)
taking True path
1300     {
1301       tmp = PyObject_GetAttrString(server, "_princ");
when PyObject_GetAttrString() succeeds
1302       pserver = PyCObject_AsVoidPtr(tmp);
when PyCObject_AsVoidPtr() returns
1303     }
1304   else
1305     {
1306       PyErr_Format(PyExc_TypeError, "A server keyword argument is required");
1307       return NULL;
1308     }
1309   if(options)
taking True path
1310     ap_req_options = PyInt_AsLong(options);
when PyInt_AsLong() succeeds
1311 
1312   Py_BEGIN_ALLOW_THREADS
releasing the GIL by calling PyEval_SaveThread()
1313   rc = krb5_recvauth(kctx, &ac_out, fd_ptr, appl_version, pserver, ap_req_options, kt, &cticket);
1314   Py_END_ALLOW_THREADS
reacquiring the GIL by calling PyEval_RestoreThread()
1315   if(rc)
when considering value == (krb5_error_code)0 from krb5module.c:1313
taking False path
1316     return pk_error(rc);
1317 
1318   retval = PyTuple_New(2);
when PyTuple_New() succeeds
1319 
1320   if (cticket->enc_part2)
when treating unknown struct krb5_ticket * * from krb5module.c:1313 as non-NULL
when treating unknown struct krb5_enc_tkt_part * from krb5module.c:1320 as non-NULL
taking True path
1321     {
1322       PyObject *cprinc;
1323 
1324       if (!(cprinc = make_principal(self, kctx, cticket->enc_part2->client)))
when treating unknown struct krb5_enc_tkt_part * from krb5module.c:1324 as non-NULL
when make_principal() succeeds
taking False path
1325 	{
1326 	  Py_DECREF(retval);
1327 	  krb5_free_ticket(kctx, cticket);
1328 	  return NULL;
1329 	}
1330       PyTuple_SetItem(retval, 1, cprinc);
when PyTuple_SetItem() succeeds
1331     }
1332   else
1333     {
1334       PyTuple_SetItem(retval, 1, Py_None);
1335       Py_INCREF(Py_None);
1336     }
1337   krb5_free_ticket(kctx, cticket);
1338 
1339 
1340   {
1341     PyObject *subargs, *mykw = NULL, *otmp, *auth_context;
1342 
1343     subargs = Py_BuildValue("()");
when Py_BuildValue() succeeds
1344     mykw = PyDict_New();
when PyDict_New() succeeds
1345     PyDict_SetItemString(mykw, "context", self);
when PyDict_SetItemString() succeeds
1346     otmp = PyCObject_FromVoidPtrAndDesc(ac_out, kctx, destroy_ac);
when PyCObject_FromVoidPtrAndDesc() succeeds
1347     PyDict_SetItemString(mykw, "ac", otmp);
when PyDict_SetItemString() succeeds
1348     auth_context = PyEval_CallObjectWithKeywords(auth_context_class, subargs, mykw);
when treating unknown struct PyObject * from krb5module.c:34 as non-NULL
when PyEval_CallObjectWithKeywords() fails
1349     PyTuple_SetItem(retval, 0, auth_context);
when PyTuple_SetItem() succeeds
1350     Py_DECREF(otmp);
when taking False path
calling tp_dealloc on PyCObject allocated at krb5module.c:1346
1351     Py_DECREF(subargs);
when taking True path
1352     Py_XDECREF(mykw);
taking False path
when taking True path
1353   }
1354 
1355   return retval;
1356 } /* KrbV.Context.recvauth() */
ob_refcnt of '*ctx' is 1 too high
was expecting final ob_refcnt to be N + 0 (for some unknown N)
but final ob_refcnt is N + 1
found 15 similar trace(s) to this

File: krb5module.c
Function: Context_recvauth
Error: ob_refcnt of new ref from call to PyObject_GetAttrString is 1 too high
1251 static PyObject*
1252 Context_recvauth(PyObject *unself, PyObject *args, PyObject *kw)
1253 {
1254   krb5_context kctx = NULL;
1255   PyObject *ctx, *retval, *self, *fd_obj, *server = NULL, *keytab = NULL, *tmp, *options = NULL;
1256   krb5_auth_context ac_out = NULL;
1257   krb5_keytab kt;
1258   krb5_principal pserver;
1259   krb5_ticket *cticket;
1260   krb5_flags ap_req_options = 0;
1261   krb5_error_code rc = 0;
1262   int free_keytab = 0;
1263   int fd;
1264   char *appl_version;
1265   krb5_pointer fd_ptr = &fd;
1266 
1267   if(!PyArg_ParseTuple(args, "OOs:recvauth", &self, &fd_obj, &appl_version))
when PyArg_ParseTuple() succeeds
taking False path
1268     return NULL;
1269 
1270   fd = obj_to_fd(fd_obj);
1271   if(fd < 0)
when considering range: 0 <= value <= 0x7fffffff
taking False path
1272     return NULL;
1273 
1274   ctx = PyObject_GetAttrString(self, "_ctx");
when PyObject_GetAttrString() succeeds
1275   kctx = PyCObject_AsVoidPtr(ctx);
when PyCObject_AsVoidPtr() returns
1276 
1277   if(kw)
taking True path
1278     {
1279       options = PyDict_GetItemString(kw, "options");
when PyDict_GetItemString() succeeds
1280       server = PyDict_GetItemString(kw, "server");
when PyDict_GetItemString() succeeds
1281       keytab = PyDict_GetItemString(kw, "keytab");
when PyDict_GetItemString() succeeds
1282     }
1283 
1284   if(!keytab || keytab == Py_None)
taking False path
taking False path
1285     {
1286       PyObject *subargs;
1287       subargs = Py_BuildValue("(O)", self);
1288       keytab = Context_kt_default(unself, subargs, NULL);
1289       Py_DECREF(subargs);
1290       free_keytab = 1;
1291     }
1292   tmp = PyObject_GetAttrString(keytab, "_keytab");
when PyObject_GetAttrString() succeeds
new ref from call to PyObject_GetAttrString allocated at:   tmp = PyObject_GetAttrString(keytab, "_keytab");
ob_refcnt is now refs: 1 + N where N >= 0
1293   kt = PyCObject_AsVoidPtr(tmp);
when PyCObject_AsVoidPtr() returns
1294   if(free_keytab)
taking False path
1295     {
1296       Py_DECREF(keytab);
1297     }
1298 
1299   if(server)
taking True path
1300     {
1301       tmp = PyObject_GetAttrString(server, "_princ");
when PyObject_GetAttrString() succeeds
1302       pserver = PyCObject_AsVoidPtr(tmp);
when PyCObject_AsVoidPtr() returns
1303     }
1304   else
1305     {
1306       PyErr_Format(PyExc_TypeError, "A server keyword argument is required");
1307       return NULL;
1308     }
1309   if(options)
taking True path
1310     ap_req_options = PyInt_AsLong(options);
when PyInt_AsLong() succeeds
1311 
1312   Py_BEGIN_ALLOW_THREADS
releasing the GIL by calling PyEval_SaveThread()
1313   rc = krb5_recvauth(kctx, &ac_out, fd_ptr, appl_version, pserver, ap_req_options, kt, &cticket);
1314   Py_END_ALLOW_THREADS
reacquiring the GIL by calling PyEval_RestoreThread()
1315   if(rc)
when considering value == (krb5_error_code)0 from krb5module.c:1313
taking False path
1316     return pk_error(rc);
1317 
1318   retval = PyTuple_New(2);
when PyTuple_New() succeeds
1319 
1320   if (cticket->enc_part2)
when treating unknown struct krb5_ticket * * from krb5module.c:1313 as non-NULL
when treating unknown struct krb5_enc_tkt_part * from krb5module.c:1320 as non-NULL
taking True path
1321     {
1322       PyObject *cprinc;
1323 
1324       if (!(cprinc = make_principal(self, kctx, cticket->enc_part2->client)))
when treating unknown struct krb5_enc_tkt_part * from krb5module.c:1324 as non-NULL
when make_principal() succeeds
taking False path
1325 	{
1326 	  Py_DECREF(retval);
1327 	  krb5_free_ticket(kctx, cticket);
1328 	  return NULL;
1329 	}
1330       PyTuple_SetItem(retval, 1, cprinc);
when PyTuple_SetItem() succeeds
1331     }
1332   else
1333     {
1334       PyTuple_SetItem(retval, 1, Py_None);
1335       Py_INCREF(Py_None);
1336     }
1337   krb5_free_ticket(kctx, cticket);
1338 
1339 
1340   {
1341     PyObject *subargs, *mykw = NULL, *otmp, *auth_context;
1342 
1343     subargs = Py_BuildValue("()");
when Py_BuildValue() succeeds
1344     mykw = PyDict_New();
when PyDict_New() succeeds
1345     PyDict_SetItemString(mykw, "context", self);
when PyDict_SetItemString() succeeds
1346     otmp = PyCObject_FromVoidPtrAndDesc(ac_out, kctx, destroy_ac);
when PyCObject_FromVoidPtrAndDesc() succeeds
1347     PyDict_SetItemString(mykw, "ac", otmp);
when PyDict_SetItemString() succeeds
1348     auth_context = PyEval_CallObjectWithKeywords(auth_context_class, subargs, mykw);
when treating unknown struct PyObject * from krb5module.c:34 as non-NULL
when PyEval_CallObjectWithKeywords() fails
1349     PyTuple_SetItem(retval, 0, auth_context);
when PyTuple_SetItem() succeeds
1350     Py_DECREF(otmp);
when taking False path
calling tp_dealloc on PyCObject allocated at krb5module.c:1346
1351     Py_DECREF(subargs);
when taking True path
1352     Py_XDECREF(mykw);
taking False path
when taking True path
1353   }
1354 
1355   return retval;
1356 } /* KrbV.Context.recvauth() */
ob_refcnt of new ref from call to PyObject_GetAttrString is 1 too high
was expecting final ob_refcnt to be N + 0 (for some unknown N)
but final ob_refcnt is N + 1
found 31 similar trace(s) to this

File: krb5module.c
Function: Context_recvauth
Error: returning (PyObject*)NULL without setting an exception
1251 static PyObject*
1252 Context_recvauth(PyObject *unself, PyObject *args, PyObject *kw)
1253 {
1254   krb5_context kctx = NULL;
1255   PyObject *ctx, *retval, *self, *fd_obj, *server = NULL, *keytab = NULL, *tmp, *options = NULL;
1256   krb5_auth_context ac_out = NULL;
1257   krb5_keytab kt;
1258   krb5_principal pserver;
1259   krb5_ticket *cticket;
1260   krb5_flags ap_req_options = 0;
1261   krb5_error_code rc = 0;
1262   int free_keytab = 0;
1263   int fd;
1264   char *appl_version;
1265   krb5_pointer fd_ptr = &fd;
1266 
1267   if(!PyArg_ParseTuple(args, "OOs:recvauth", &self, &fd_obj, &appl_version))
when PyArg_ParseTuple() succeeds
taking False path
1268     return NULL;
1269 
1270   fd = obj_to_fd(fd_obj);
1271   if(fd < 0)
when considering range: -0x80000000 <= value <= -1
taking True path
1272     return NULL;
1273 
1274   ctx = PyObject_GetAttrString(self, "_ctx");
1275   kctx = PyCObject_AsVoidPtr(ctx);
1276 
1277   if(kw)
1278     {
1279       options = PyDict_GetItemString(kw, "options");
1280       server = PyDict_GetItemString(kw, "server");
1281       keytab = PyDict_GetItemString(kw, "keytab");
1282     }
1283 
1284   if(!keytab || keytab == Py_None)
1285     {
1286       PyObject *subargs;
1287       subargs = Py_BuildValue("(O)", self);
1288       keytab = Context_kt_default(unself, subargs, NULL);
1289       Py_DECREF(subargs);
1290       free_keytab = 1;
1291     }
1292   tmp = PyObject_GetAttrString(keytab, "_keytab");
1293   kt = PyCObject_AsVoidPtr(tmp);
1294   if(free_keytab)
1295     {
1296       Py_DECREF(keytab);
1297     }
1298 
1299   if(server)
1300     {
1301       tmp = PyObject_GetAttrString(server, "_princ");
1302       pserver = PyCObject_AsVoidPtr(tmp);
1303     }
1304   else
1305     {
1306       PyErr_Format(PyExc_TypeError, "A server keyword argument is required");
1307       return NULL;
1308     }
1309   if(options)
1310     ap_req_options = PyInt_AsLong(options);
1311 
1312   Py_BEGIN_ALLOW_THREADS
1313   rc = krb5_recvauth(kctx, &ac_out, fd_ptr, appl_version, pserver, ap_req_options, kt, &cticket);
1314   Py_END_ALLOW_THREADS
1315   if(rc)
1316     return pk_error(rc);
1317 
1318   retval = PyTuple_New(2);
1319 
1320   if (cticket->enc_part2)
1321     {
1322       PyObject *cprinc;
1323 
1324       if (!(cprinc = make_principal(self, kctx, cticket->enc_part2->client)))
1325 	{
1326 	  Py_DECREF(retval);
1327 	  krb5_free_ticket(kctx, cticket);
1328 	  return NULL;
1329 	}
1330       PyTuple_SetItem(retval, 1, cprinc);
1331     }
1332   else
1333     {
1334       PyTuple_SetItem(retval, 1, Py_None);
1335       Py_INCREF(Py_None);
1336     }
1337   krb5_free_ticket(kctx, cticket);
1338 
1339 
1340   {
1341     PyObject *subargs, *mykw = NULL, *otmp, *auth_context;
1342 
1343     subargs = Py_BuildValue("()");
1344     mykw = PyDict_New();
1345     PyDict_SetItemString(mykw, "context", self);
1346     otmp = PyCObject_FromVoidPtrAndDesc(ac_out, kctx, destroy_ac);
1347     PyDict_SetItemString(mykw, "ac", otmp);
1348     auth_context = PyEval_CallObjectWithKeywords(auth_context_class, subargs, mykw);
1349     PyTuple_SetItem(retval, 0, auth_context);
1350     Py_DECREF(otmp);
1351     Py_DECREF(subargs);
1352     Py_XDECREF(mykw);
1353   }
1354 
1355   return retval;
1356 } /* KrbV.Context.recvauth() */
returning (PyObject*)NULL without setting an exception