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
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