From 2e0f22a9398bad4230c0c6e655673929fec66509 Mon Sep 17 00:00:00 2001 From: keqingmoe Date: Mon, 30 Dec 2024 16:45:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=A4=E8=AF=81=E6=B8=85?= =?UTF-8?q?=E7=90=86=E5=87=BD=E6=95=B0=EF=BC=8C=E4=BC=98=E5=8C=96=E5=86=85?= =?UTF-8?q?=E5=AD=98=E7=AE=A1=E7=90=86=EF=BC=9B=E4=BF=AE=E5=A4=8D=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E6=9F=A5=E8=AF=A2=E5=92=8C=E5=A4=84=E7=90=86=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E5=86=85=E5=AD=98=E9=87=8A=E6=94=BE=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=BC=BA=E4=BB=A3=E7=A0=81=E7=A8=B3=E5=AE=9A=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/server/auth.h | 3 ++- src/db/problems.cpp | 4 +++- src/server/auth/auth.c | 7 +++++++ src/server/study/problems.c | 4 ++++ 4 files changed, 16 insertions(+), 2 deletions(-) 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)