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.
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
♻️ Zamień
🔍 Szukaj
♻️ Zamień
🔍 Szukaj
➕Dodaj
🔍 Szukaj
♻️ Zamień
🔍 Szukaj
♻️ Zamień
🔍 Szukaj
➕Dodaj
🔍 Szukaj
➕Dodaj
🔍 Szukaj
♻️ Zamień
🔍 Szukaj
♻️ Zamień
📂 Lokalizacja pliku: 'EterImageLib -> DXTCImage.h'
🔍 Szukaj
♻️ Zamień
🔎Szukaj
♻️ Zamień
📂 Lokalizacja pliku: 'EterLib -> GrpImageTexture.cpp'
🔎Szukaj
♻️ Zamień