File: krb5module.c
Function: Keytab_setattr
Error: ob_refcnt of new ref from call to PyObject_GetAttrString is 1 too high
3621 static PyObject*
3622 Keytab_setattr(PyObject *unself __UNUSED, PyObject *args)
3623 {
3624   char *name;
3625   PyObject *self, *value, *nameo, *tmp;
3626   PyInstanceObject *inst;
3627   krb5_context ctx = NULL;
3628   krb5_keytab keytab = NULL;
3629 
3630   if(!PyArg_ParseTuple(args, "OO!O:__setattr__", &self, &PyString_Type, &nameo, &value))
when PyArg_ParseTuple() succeeds
taking False path
3631     return NULL;
3632   inst = (PyInstanceObject *)self;
3633 
3634   name = PyString_AsString(nameo);
when PyString_AsString() succeeds
3635 
3636   if(strcmp(name, "context") && strcmp(name, "_keytab"))
taking False path
when considering range: -0x80000000 <= value <= -1
taking True path
taking False path
when considering range: -0x80000000 <= value <= -1
taking True path
3637     {
3638       tmp = PyObject_GetAttrString(self, "context");
when PyObject_GetAttrString() succeeds
new ref from call to PyObject_GetAttrString allocated at:       tmp = PyObject_GetAttrString(self, "context");
ob_refcnt is now refs: 1 + N where N >= 0
3639       if(tmp)
taking True path
3640 	{
3641 	  tmp = PyObject_GetAttrString(tmp, "_ctx");
when PyObject_GetAttrString() succeeds
3642 	  if(tmp)
taking True path
3643 	    ctx = PyCObject_AsVoidPtr(tmp);
when PyCObject_AsVoidPtr() returns
3644 	}
3645       tmp = PyObject_GetAttrString(self, "_keytab");
when PyObject_GetAttrString() succeeds
3646       if(tmp)
taking True path
3647 	keytab = PyCObject_AsVoidPtr(tmp);
when PyCObject_AsVoidPtr() returns
3648     }
3649 
3650   if((!strcmp(name, "context") && ctx)
taking False path
when considering value == (int)0 from krb5module.c:3650
taking True path
when treating unknown void * from krb5module.c:3643 as NULL
taking False path
3651      || (!strcmp(name, "_keytab") && keytab)
taking False path
when considering range: -0x80000000 <= value <= -1
taking False path
3652      || !strcmp(name, "name")
taking False path
when considering range: -0x80000000 <= value <= -1
taking False path
3653      )
3654     {
3655       PyErr_Format(PyExc_AttributeError, "You cannot set attribute '%.400s'", name);
3656       return NULL;
3657     }
3658   else
3659     PyDict_SetItem(inst->in_dict, nameo, value);
when treating unknown struct PyObject * from krb5module.c:3659 as non-NULL
when PyDict_SetItem() succeeds
3660 
3661   Py_INCREF(Py_None);
3662   return Py_None;
3663 } /* KrbV.Keytab.__setattr__() */
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 59 similar trace(s) to this