diff --git a/include/server/auth.h b/include/server/auth.h index 17d7ade..8fcafd8 100644 --- a/include/server/auth.h +++ b/include/server/auth.h @@ -12,7 +12,8 @@ int user_permission_handler(mg_connection* conn, void* cbdata); int admin_handler(mg_connection* conn, void* cbdata); extern char* secret; - extern char* admin_session; +void auth_cleanup(); + #endif // SERVER_AUTH_H \ No newline at end of file diff --git a/src/db/problems.cpp b/src/db/problems.cpp index 0e20775..e19bd41 100644 --- a/src/db/problems.cpp +++ b/src/db/problems.cpp @@ -176,7 +176,7 @@ extern "C" { auto problems = std::vector{}; - leveldb::Iterator* it = problems_db->NewIterator(leveldb::ReadOptions()); + auto it = problems_db->NewIterator(leveldb::ReadOptions()); for (it->SeekToFirst(); it->Valid(); it->Next()) { if (!it->key().compare("@")) continue; problems.emplace_back(std::stoi(it->key().ToString())); @@ -184,8 +184,10 @@ extern "C" if (!it->status().ok()) { std::println(stderr, "Failed to get all problems: {}", it->status().ToString()); + delete it; return 0; } + delete it; auto json = nlohmann::json(problems); *result = strdup(json.dump().c_str()); diff --git a/src/server/auth/auth.c b/src/server/auth/auth.c index efcf777..87b65a5 100644 --- a/src/server/auth/auth.c +++ b/src/server/auth/auth.c @@ -1,7 +1,14 @@ #include "server/auth.h" #include +#include char* secret = NULL; char* admin_session = NULL; + +void auth_cleanup() +{ + if (secret) free(secret); + if (admin_session) free(admin_session); +} diff --git a/src/server/study/problems.c b/src/server/study/problems.c index ac7b2fe..a180284 100644 --- a/src/server/study/problems.c +++ b/src/server/study/problems.c @@ -141,9 +141,12 @@ static void impl_query(mg_connection* conn, problem_form_t* form, int permission } if (pr2) { res_query_problem2(conn, result1, result2, result3); + free(result2); } else { res_query_problem(conn, result1, result3); } + free(result1); + free(result3); } static void impl_modify(mg_connection* conn, problem_form_t* form) @@ -210,6 +213,7 @@ static void impl_all(mg_connection* conn, problem_form_t* form) return; } res_all_problems(conn, result); + free(result); } int problems_handler(mg_connection* conn, void* cbdata)