mirror of
https://gitlab.com/apparmor/apparmor
synced 2025-08-22 10:07:12 +00:00
Merge parser: fix coverity issues
Fix issues introduced in coverity's snapshot 89167 in !1711 MR: https://gitlab.com/apparmor/apparmor/-/merge_requests/1740 Approved-by: John Johansen <john@jjmx.net> Merged-by: John Johansen <john@jjmx.net>
This commit is contained in:
commit
7fbbf791d3
@ -140,6 +140,7 @@ int process_profile_variables(Profile *prof)
|
||||
int error = 0;
|
||||
variable *saved_exec_path = NULL;
|
||||
variable *saved_attach_path = NULL;
|
||||
variable *tmp = NULL;
|
||||
|
||||
/* needs to be before PROFILE_NAME_VARIABLE so that variable will
|
||||
* have the correct name
|
||||
@ -185,18 +186,25 @@ cleanup:
|
||||
* don't support that yet.
|
||||
*/
|
||||
if (prof->attachment) {
|
||||
symtab::delete_var(PROFILE_EXEC_VAR);
|
||||
if (saved_exec_path)
|
||||
tmp = symtab::delete_var(PROFILE_EXEC_VAR);
|
||||
delete tmp;
|
||||
if (saved_exec_path) {
|
||||
symtab::add_var(*saved_exec_path);
|
||||
delete saved_exec_path;
|
||||
}
|
||||
}
|
||||
cleanup_attach:
|
||||
if (prof->attachment) {
|
||||
symtab::delete_var(PROFILE_ATTACH_VAR);
|
||||
if (saved_attach_path)
|
||||
tmp = symtab::delete_var(PROFILE_ATTACH_VAR);
|
||||
delete tmp;
|
||||
if (saved_attach_path) {
|
||||
symtab::add_var(*saved_attach_path);
|
||||
delete saved_attach_path;
|
||||
}
|
||||
}
|
||||
cleanup_name:
|
||||
symtab::delete_var(PROFILE_NAME_VARIABLE);
|
||||
tmp = symtab::delete_var(PROFILE_NAME_VARIABLE);
|
||||
delete tmp;
|
||||
|
||||
out:
|
||||
return error;
|
||||
|
@ -139,13 +139,16 @@ variable *symtab::get_set_var(const char *name)
|
||||
char *var_name = variable::process_var(name);
|
||||
variable *var = lookup_existing_symbol(var_name);
|
||||
if (!var) {
|
||||
return var;
|
||||
goto out;
|
||||
}
|
||||
if (var->type != sd_set) {
|
||||
PERROR("Variable %s is not a set variable\n", var_name);
|
||||
return nullptr;
|
||||
var = nullptr;
|
||||
goto out;
|
||||
}
|
||||
var->expand_variable();
|
||||
out:
|
||||
free(var_name);
|
||||
return var;
|
||||
}
|
||||
|
||||
@ -154,12 +157,14 @@ variable *symtab::get_boolean_var(const char *name)
|
||||
char *var_name = variable::process_var(name);
|
||||
variable *var = lookup_existing_symbol(var_name);
|
||||
if (!var) {
|
||||
return var;
|
||||
goto out;
|
||||
}
|
||||
if (var->type != sd_boolean) {
|
||||
PERROR("Variable %s is not a boolean variable\n", var_name);
|
||||
return nullptr;
|
||||
var = nullptr;
|
||||
goto out;
|
||||
}
|
||||
out:
|
||||
free(var_name);
|
||||
return var;
|
||||
}
|
||||
|
@ -24,7 +24,8 @@
|
||||
|
||||
variable::variable(const char *var_name, struct value_list *values):
|
||||
type(sd_set),
|
||||
var_name(var_name)
|
||||
var_name(var_name),
|
||||
boolean(false) /* not used */
|
||||
{
|
||||
struct value_list *entry = NULL;
|
||||
if (!values || !values->value) {
|
||||
@ -39,7 +40,8 @@ variable::variable(const char *var_name, struct value_list *values):
|
||||
|
||||
variable::variable(const char *var_name, const char *value):
|
||||
type(sd_set),
|
||||
var_name(var_name)
|
||||
var_name(var_name),
|
||||
boolean(false) /* not used */
|
||||
{
|
||||
PDEBUG("Matched: set assignment for (%s)\n", var_name);
|
||||
this->values.insert(value);
|
||||
@ -263,6 +265,7 @@ int variable::expand_by_alternation(char **name)
|
||||
|
||||
int variable::expand_variable()
|
||||
{
|
||||
char *name = NULL;
|
||||
int rc = 0;
|
||||
|
||||
if (type == sd_boolean) {
|
||||
@ -278,7 +281,7 @@ int variable::expand_variable()
|
||||
expanding = true;
|
||||
|
||||
std::list<std::string> work_set(values.begin(), values.end());
|
||||
for (auto value : work_set) {
|
||||
for (const auto &value : work_set) {
|
||||
auto result = extract_variable(value);
|
||||
std::string prefix = std::get<0>(result);
|
||||
std::string var = std::get<1>(result);
|
||||
@ -288,7 +291,7 @@ int variable::expand_variable()
|
||||
expanded.insert(value); /* no var left to expand */
|
||||
continue;
|
||||
}
|
||||
char *name = variable::process_var(var.c_str());
|
||||
name = variable::process_var(var.c_str());
|
||||
variable *ref = symtab::lookup_existing_symbol(name);
|
||||
if (!ref) {
|
||||
PERROR("Failed to find declaration for: %s\n", var.c_str());
|
||||
@ -311,7 +314,7 @@ int variable::expand_variable()
|
||||
ref->var_name.c_str());
|
||||
exit(1);
|
||||
}
|
||||
for (auto refvalue : ref->expanded) {
|
||||
for (const auto &refvalue : ref->expanded) {
|
||||
/* there could still be vars in suffix, so add
|
||||
* to work_set, not expanded */
|
||||
work_set.push_back(prefix + refvalue + suffix);
|
||||
@ -319,13 +322,14 @@ int variable::expand_variable()
|
||||
}
|
||||
|
||||
out:
|
||||
free(name);
|
||||
expanding = false;
|
||||
return rc;
|
||||
}
|
||||
|
||||
void variable::dump_set_values(std::set<std::string> values)
|
||||
{
|
||||
for (auto value : values)
|
||||
for (const auto &value : values)
|
||||
printf(" \"%s\"", value.c_str());
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user