Skocz do zawartości

Naprawa awarii klienta gry spowodowanej niepoprawnym odczytem nagłówka pliku 'fog.tga'

Opublikowano

image.png.a144663d4007d16872d3413c4a1a8bf3.png

 

Czołem! Po dłuższej przerwie wracam do publikacji. Trochę wyszedłem z wprawy, więc czas wrócić do systematyczności. 😉 Dziś przygotowałem dla was rozwiązanie problemu, o którym dowiedziałem się od użytkownika @ExoCarossa. Wspomniał o nim jakiś czas temu na czacie, więc postanowiłem przeanalizować, czy faktycznie istnieje.

 

Omówienie problemu:

Mogłeś doświadczyć sporadycznych awarii klienta gry z powodu problemu w funkcji 'CDXTCImage::LoadHeaderFromMemory'. Funkcja ta nie sprawdzała, czy plik ma odpowiedni rozmiar przed próbą odczytu nagłówka DDS. W rezultacie, jeśli plik miał mniej niż 125 bajtów (wymagany rozmiar nagłówka DDS), funkcja próbowała odczytać dane spoza dostępnej pamięci. To prowadziło do nieoczekiwanych zachowania i potencjalnych awarii klienta. Plik 'fog.tga' miał jedynie 76 bajtów. Funkcja 'LoadHeaderFromMemory' zakładała, że zawsze ma do czynienia z plikami DDS o odpowiedniej długości, więc próbowała odczytać z tego pliku 125 bajtów, co powodowało odczyt danych spoza jego zakresu. Gdy funkcja napotykała koniec pliku wcześniej niż się spodziewała, mogło to prowadzić do awarii klienta.

 

Implementacja

📂 Lokalizacja pliku: 'EterImageLib -> DXTCImage.cpp'

🔍 Szukaj

🔐 Ukryta Treść 🔐

 

🔐 Ukryta Treść 🔐

 

♻️ Zamień

🔐 Ukryta Treść 🔐

 

🔍 Szukaj

🔐 Ukryta Treść 🔐

 

♻️ Zamień

🔐 Ukryta Treść 🔐

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

Dodaj

🔐 Ukryta Treść 🔐

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 ♻️ Zamień

🔐 Ukryta Treść 🔐

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

  ♻️ Zamień

🔐 Ukryta Treść 🔐

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

Dodaj

🔐 Ukryta Treść 🔐

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

Dodaj

🔐 Ukryta Treść 🔐

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

   ♻️ Zamień

🔐 Ukryta Treść 🔐

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

    ♻️ Zamień

🔐 Ukryta Treść 🔐

 

 

📂 Lokalizacja pliku: 'EterImageLib -> DXTCImage.h'

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

♻️ Zamień

🔐 Ukryta Treść 🔐

 

🔎Szukaj

🔐 Ukryta Treść 🔐

 

 ♻️ Zamień

🔐 Ukryta Treść 🔐

 

 

 📂 Lokalizacja pliku: 'EterLib -> GrpImageTexture.cpp'

 

🔎Szukaj

🔐 Ukryta Treść 🔐

 

🔐 Ukryta Treść 🔐

 

 ♻️ Zamień

🔐 Ukryta Treść 🔐

Featured Replies

Opublikowano

Bajlandoo 😄

Opublikowano
  • Premium

fiu fiu fiu

Opublikowano

fajny poradnik

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...