File: sesearch.c
Function: print_av_results
Error: ob_refcnt of '*list' is 1 too high
199 static PyObject* print_av_results(const apol_policy_t * policy, const options_t * opt, const apol_vector_t * v)
200 {
201     PyObject *list = PyList_New(0);
202 	qpol_policy_t *q = apol_policy_get_qpol(policy);
when PyList_New() succeeds
PyListObject allocated at:     PyObject *list = PyList_New(0);
ob_refcnt is now refs: 1 + N where N >= 0
203 	size_t i, num_rules = 0;
204 	const qpol_avrule_t *rule = NULL;
205 	char *tmp = NULL, *rule_str = NULL, *expr = NULL;
206 	char enable_char = ' ', branch_char = ' ';
207 	qpol_iterator_t *iter = NULL;
208 	uint32_t enabled = 0;
209 
210 	if (!policy || !v)
211 		return 0;
taking True path
212 
213 	if (!(num_rules = apol_vector_get_size(v)))
214 		return 0;
215 
216 
217 
218 
219 	for (i = 0; i < num_rules; i++) {
220 		enable_char = branch_char = ' ';
221 		if (!(rule = apol_vector_get_element(v, i)))
222 			goto cleanup;
223 		
224         if (qpol_avrule_get_is_enabled(q, rule, &enabled))
225             goto cleanup;
226         if (!enabled)
227             continue;
228 		
229         
230         
231         const qpol_type_t *type;
232         const char *tmp_name;
233         uint32_t rule_type = 0;
234        
235 	    const qpol_class_t *obj_class = NULL;
236 
237         PyObject *dict = PyDict_New(); 
238 
239         qpol_avrule_get_rule_type(q, rule, &rule_type);
240         tmp_name = apol_rule_type_to_str(rule_type);
241         PyDict_SetItemString(dict, "type", PyString_FromString(tmp_name));
242         // source
243         qpol_avrule_get_source_type(q, rule, &type);
244         qpol_type_get_name(q, type, &tmp_name);
245         PyDict_SetItemString(dict, "scontext", PyString_FromString(tmp_name));
246         
247         qpol_avrule_get_target_type(q, rule, &type);
248         qpol_type_get_name(q, type, &tmp_name);
249         PyDict_SetItemString(dict, "tcontext", PyString_FromString(tmp_name));
250         
251         qpol_avrule_get_object_class(q, rule, &obj_class);
252         qpol_type_get_name(q, type, &tmp_name);
253         PyDict_SetItemString(dict, "class", PyString_FromString(tmp_name));
254         qpol_avrule_get_perm_iter(q, rule, &iter);
255         PyObject *permlist = PyList_New(0);
256         for (; !qpol_iterator_end(iter); qpol_iterator_next(iter)) {
257             const char *perm_name = NULL;
258             qpol_iterator_get_item(iter, (void **)&perm_name);
259             PyList_Append(permlist, PyString_FromString(perm_name));
260         }
261         PyDict_SetItemString(dict, "permlist", permlist);
262         PyList_Append(list, dict); 
263 
264 
265         free(rule_str);
266 		rule_str = NULL;
267 		free(expr);
268 		expr = NULL;
269 	}
270       cleanup:
271 	free(tmp);
272 	free(rule_str);
273 	free(expr);
274     return list;
275 }
276 
ob_refcnt of '*list' is 1 too high was expecting final ob_refcnt to be N + 0 (for some unknown N) but final ob_refcnt is N + 1

File: sesearch.c
Function: print_av_results
Error: returning (PyObject*)NULL without setting an exception
199 static PyObject* print_av_results(const apol_policy_t * policy, const options_t * opt, const apol_vector_t * v)
200 {
201     PyObject *list = PyList_New(0);
202 	qpol_policy_t *q = apol_policy_get_qpol(policy);
when PyList_New() succeeds
203 	size_t i, num_rules = 0;
204 	const qpol_avrule_t *rule = NULL;
205 	char *tmp = NULL, *rule_str = NULL, *expr = NULL;
206 	char enable_char = ' ', branch_char = ' ';
207 	qpol_iterator_t *iter = NULL;
208 	uint32_t enabled = 0;
209 
210 	if (!policy || !v)
211 		return 0;
taking True path
212 
213 	if (!(num_rules = apol_vector_get_size(v)))
214 		return 0;
215 
216 
217 
218 
219 	for (i = 0; i < num_rules; i++) {
220 		enable_char = branch_char = ' ';
221 		if (!(rule = apol_vector_get_element(v, i)))
222 			goto cleanup;
223 		
224         if (qpol_avrule_get_is_enabled(q, rule, &enabled))
225             goto cleanup;
226         if (!enabled)
227             continue;
228 		
229         
230         
231         const qpol_type_t *type;
232         const char *tmp_name;
233         uint32_t rule_type = 0;
234        
235 	    const qpol_class_t *obj_class = NULL;
236 
237         PyObject *dict = PyDict_New(); 
238 
239         qpol_avrule_get_rule_type(q, rule, &rule_type);
240         tmp_name = apol_rule_type_to_str(rule_type);
241         PyDict_SetItemString(dict, "type", PyString_FromString(tmp_name));
242         // source
243         qpol_avrule_get_source_type(q, rule, &type);
244         qpol_type_get_name(q, type, &tmp_name);
245         PyDict_SetItemString(dict, "scontext", PyString_FromString(tmp_name));
246         
247         qpol_avrule_get_target_type(q, rule, &type);
248         qpol_type_get_name(q, type, &tmp_name);
249         PyDict_SetItemString(dict, "tcontext", PyString_FromString(tmp_name));
250         
251         qpol_avrule_get_object_class(q, rule, &obj_class);
252         qpol_type_get_name(q, type, &tmp_name);
253         PyDict_SetItemString(dict, "class", PyString_FromString(tmp_name));
254         qpol_avrule_get_perm_iter(q, rule, &iter);
255         PyObject *permlist = PyList_New(0);
256         for (; !qpol_iterator_end(iter); qpol_iterator_next(iter)) {
257             const char *perm_name = NULL;
258             qpol_iterator_get_item(iter, (void **)&perm_name);
259             PyList_Append(permlist, PyString_FromString(perm_name));
260         }
261         PyDict_SetItemString(dict, "permlist", permlist);
262         PyList_Append(list, dict); 
263 
264 
265         free(rule_str);
266 		rule_str = NULL;
267 		free(expr);
268 		expr = NULL;
269 	}
270       cleanup:
271 	free(tmp);
272 	free(rule_str);
273 	free(expr);
274     return list;
275 }
276 
returning (PyObject*)NULL without setting an exception