Removes memory leaks on the parse

- Parser location is now a custom class. It holds a shared pointer
  with the file name; If the parser fails, the resource is deleted.

 - To follow the parser change, the Rule class now holds the file
  name in a shared pointer instead of a unique pointer. As a shared
  pointer we avoid duplication of the file name in memory, plus,
  it frees itself when not in use anymore.

 - Operator init also accepting the filename as a shared pointer.

 - Driver is treating m_location was privative. Now it holds a
  std::list<std::shared_ptr<yy::seclang_parser::location_type>>
  instead of: std::list<yy::seclang_parser::location_type *>.

 - Fix: addSecRule on Driver() was changed from RuleWithAction to
  RuleWithOperator.

 - Minor changes on the regression and rules-check utility to force
  deletion of resources even when they fail.

 - Couple of virtual destructors were placed to force the shared
  pointer decrementing on shared variables.

 - Deleted constructors for copy were placed for the sake of
  readability.
This commit is contained in:
Felipe Zimmerle
2021-01-12 09:58:30 -03:00
parent 0bf36192a5
commit 9f47f1473c
54 changed files with 2134 additions and 2026 deletions

View File

@@ -41,7 +41,7 @@ int main(int argc, char **argv) {
if (*args == NULL) {
print_help(argv[0]);
return 0;
goto ret;
}
while (*args != NULL) {
@@ -90,19 +90,22 @@ int main(int argc, char **argv) {
std::cout << "Loaded " << std::to_string(r) << " rules." << std::endl;
if (err.empty() == false) {
std::cerr << " " << err << std::endl;
goto end;
}
rules->dump();
next:
args++;
}
delete rules;
end:
if (ret < 0) {
std::cout << "Test failed." << std::endl;
} else {
std::cout << "Test ok." << std::endl;
}
ret:
delete rules;
return ret;
}