[FIX] Işınlanınca clientin çökmesine sebep olan ve Syserr vermeyen bir bug.

Kaptan Yosun

Moderatör
Moderatör
Geliştirici
Yardımsever Üye
Mesaj
1.428
Çözümler
53
Beğeni
2.216
Puan
1.839
Ticaret Puanı
0
Zamanında çok çektirdi bana. Hiçbir hata vermeden ışınlanınca bazen clienti çökertiyor bazense çökertmiyor. Hatanın kaynağı fog.tga adlı sis grafik dosyası. Düzeltmeye geçelim.

EterImageLib/DXTCImage.cpp
aratın:
Genişlet Daralt Kopyala
bool CDXTCImage::LoadHeaderFromMemory(const BYTE * c_pbMap)
değiştirin:
Genişlet Daralt Kopyala
bool CDXTCImage::LoadHeaderFromMemory(const BYTE * c_pbMap, int iSize)

aratın:
Genişlet Daralt Kopyala
DWORD dwMagic;
altına ekleyin:
Genişlet Daralt Kopyala
if (iSize < sizeof(DWORD))
        return false;

aratın:
Genişlet Daralt Kopyala
    dwMagic = *(DWORD *) c_pbMap;
    c_pbMap += sizeof(DWORD);
altına ekleyin:
Genişlet Daralt Kopyala
iSize -= sizeof(DWORD);

aratın:
Genişlet Daralt Kopyala
DDSURFACEDESC2 ddsd; // read from dds file
altına ekleyin:
Genişlet Daralt Kopyala
if (iSize < sizeof(DDSURFACEDESC2))
        return false;

aratın:
Genişlet Daralt Kopyala
    memcpy(&ddsd, c_pbMap, sizeof(DDSURFACEDESC2));
    c_pbMap += sizeof(DDSURFACEDESC2);
altına ekleyin:
Genişlet Daralt Kopyala
iSize -= sizeof(DDSURFACEDESC2);

aratın:
Genişlet Daralt Kopyala
return LoadFromMemory((const BYTE*) pvMap);
değiştirin:
Genişlet Daralt Kopyala
return LoadFromMemory((const BYTE*) pvMap, mappedFile.Size());

aratın:
Genişlet Daralt Kopyala
bool CDXTCImage::LoadFromMemory(const BYTE * c_pbMap)
değiştirin:
Genişlet Daralt Kopyala
bool CDXTCImage::LoadFromMemory(const BYTE * c_pbMap, int iSize)

aratın:
Genişlet Daralt Kopyala
if (!LoadHeaderFromMemory(c_pbMap))
değiştirin:
Genişlet Daralt Kopyala
if (!LoadHeaderFromMemory(c_pbMap, iSize))

EterImageLib/DXTCImage.h
aratın:
Genişlet Daralt Kopyala
        bool LoadHeaderFromMemory(const BYTE * c_pbMap);
değiştirin:
Genişlet Daralt Kopyala
        bool LoadHeaderFromMemory(const BYTE * c_pbMap, int iSize);

aratın:
Genişlet Daralt Kopyala
        bool LoadFromMemory(const BYTE * c_pbMap);
değiştirin:
Genişlet Daralt Kopyala
        bool LoadFromMemory(const BYTE * c_pbMap, int iSize);

EterLib/GrpImageTexture.cpp
aratın:
Genişlet Daralt Kopyala
if (image.LoadHeaderFromMemory((const BYTE *) c_pvBuf))
değiştirin:
Genişlet Daralt Kopyala
if (image.LoadHeaderFromMemory((const BYTE *) c_pvBuf, bufSize))
 
Son düzenleme:
bu çözümü bulmasaydım windows sf projesi iptal olacaktı delirecektim valla çok teşekkürler
 
Uyarı: Bu konu açıldığından bu yana baya zaman geçmiş.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.
Geri
Üst