Opublikowano 20 Sierpnia 20232 l Cześć wszystkim,😊 Podczas przeglądania kodu znalazłem problem w funkcji 'do_shutdown'. W oryginalnym kodzie nie było sprawdzania, czy wskaźnik postaci (ch) jest nullem, a jednak próbował korzystać z metod związanych z postacią, co mogło prowadzić do niezdefiniowanego zachowania. Co więcej, funkcja nie sprawdzała, czy dana postać posiada uprawnienia GM przed próbą wyłączenia serwera, co stanowiło potencjalne ryzyko związane z bezpieczeństwem. 🧩 Rozwiązanie: 📂 Lokalizacja pliku: 'game -> cmd_general.cpp' 🔍 Szukamy funkcji: 🔐 Ukryta Treść 🔐 Zaloguj się lub Zarejestruj się 🔄 Zmieniamy na poprawioną wersję: 🔐 Ukryta Treść 🔐 Zaloguj się lub Zarejestruj się W powyższej wersji dokonałem następujących zmian: Zabezpieczyłem kod przed niebezpiecznym dostępem do metody GetName(), jeśli wskaźnik ch jest nullem. Dodałem kontrolę uprawnień GM, aby upewnić się, że tylko postacie z odpowiednimi uprawnieniami mają możliwość wywołania tej funkcji.
Opublikowano 13 Stycznia13 Sty Sorry za odkopanie, ale nie ma tego nigdzie a mega irytujew void Shutdown(int iSec) pod SendNotice(buf); dodajesz; if (g_shutdownEvent) { event_cancel(&g_shutdownEvent); g_shutdownEvent = nullptr; } event_create(shutdown_event, info, 1); zmieniasz na g_shutdownEvent = event_create(shutdown_event, info, 1); --- nizej masz TPacketGGShutdown p; dodajesz nad tym // Funkcja od anulowania odliczania if (g_shutdownEvent) { event_cancel(&g_shutdownEvent); g_shutdownEvent = nullptr; g_bNoMoreClient = false; // cofamy blokadę nowych klientów, jeśli była ustawiona SendNotice(LC_TEXT("Shutdown anulowany.")); sys_log(0, "Shutdown anulowan przez %s", ch->GetName()); return; }no i wsio a to sprawdza po prostu czy jest odliczanie jak jest nie nakłada tego jak wcześniej, następna anuluje funkcje.A i macie LPEVENT g_shutdownEvent = nullptr; jak ktoś tego w ogóle używa xd
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto