Funkcja 'SendScript' zawiera lukę bezpieczeństwa związaną z niewłaściwym zarządzaniem wskaźnikami. W oryginalnej wersji funkcji nie sprawdzano, czy wskaźniki 'GetCurrentCharacterPtr()' i 'GetCurrentCharacterPtr()->GetDesc()' są prawidłowo zainicjowane. Jeśli wskaźniki były nieprawidłowo zainicjowane lub równe 'nullptr', próba dostępu do nich mogła spowodować awarię rdzenia gry.
Aby rozwiązać ten problem, zmieniłem funkcję 'SendScript' tak, aby sprawdzała wskaźniki przed ich użyciem. Teraz wskaźniki są prawidłowo zainicjowane i funkcja działa stabilnie.
Wprowadzone zmiany w funkcji 'SendScript':
Rozszerzyłem warunek początkowy o sprawdzenie, czy 'm_strScript' jest pusty, oraz czy istnieje 'currentCharacterPtr' i jego deskryptor (currentCharacterPtr->GetDesc()).
Uprościłem warunki dla skryptów '[DONE]' i '[NEXT]' poprzez wprowadzenie zmiennych 'isDoneScript' i 'isNextScript'.
Zastosowałem zmienne lokalne, 'currentCharacterPtr' i 'characterDesc', aby poprawić czytelności i uniknąć wielokrotnego odwoływania się do tych samych obiektów.
Poprawiłem komunikat sys_log, dodając więcej szczegółów, w tym nazwę postaci, skrypt oraz jego rozmiar.
Cześć,
Funkcja 'SendScript' zawiera lukę bezpieczeństwa związaną z niewłaściwym zarządzaniem wskaźnikami. W oryginalnej wersji funkcji nie sprawdzano, czy wskaźniki 'GetCurrentCharacterPtr()' i 'GetCurrentCharacterPtr()->GetDesc()' są prawidłowo zainicjowane. Jeśli wskaźniki były nieprawidłowo zainicjowane lub równe 'nullptr', próba dostępu do nich mogła spowodować awarię rdzenia gry.
Aby rozwiązać ten problem, zmieniłem funkcję 'SendScript' tak, aby sprawdzała wskaźniki przed ich użyciem. Teraz wskaźniki są prawidłowo zainicjowane i funkcja działa stabilnie.
Wprowadzone zmiany w funkcji 'SendScript':
Implementacja:
📂 Lokalizacja pliku: 'game -> questmanager.cpp'
🔍 Szukaj
♻️ Zamień
🔍 Szukaj
♻️ Zamień
🔍 Szukaj
♻️ Zamień
🔍 Szukaj
♻️ Zamień
🔍 Szukaj
♻️ Zamień