Explorar o código

navmesh file load error-fix
don't try to read 0 length buffers

Azaezel %!s(int64=9) %!d(string=hai) anos
pai
achega
6a5820d3a2
Modificáronse 1 ficheiros con 9 adicións e 6 borrados
  1. 9 6
      Engine/source/navigation/navMesh.cpp

+ 9 - 6
Engine/source/navigation/navMesh.cpp

@@ -1593,12 +1593,15 @@ bool NavMesh::load()
    S32 s;
    S32 s;
    file.read(sizeof(S32), (char*)&s);
    file.read(sizeof(S32), (char*)&s);
    setLinkCount(s);
    setLinkCount(s);
-   file.read(sizeof(F32) * s * 6, (char*)const_cast<F32*>(mLinkVerts.address()));
-   file.read(sizeof(F32) * s,     (char*)const_cast<F32*>(mLinkRads.address()));
-   file.read(sizeof(U8) * s,      (char*)const_cast<U8*>(mLinkDirs.address()));
-   file.read(sizeof(U8) * s,      (char*)const_cast<U8*>(mLinkAreas.address()));
-   file.read(sizeof(U16) * s,     (char*)const_cast<U16*>(mLinkFlags.address()));
-   file.read(sizeof(F32) * s,     (char*)const_cast<U32*>(mLinkIDs.address()));
+   if (s > 0)
+   {
+      file.read(sizeof(F32) * s * 6, (char*)const_cast<F32*>(mLinkVerts.address()));
+      file.read(sizeof(F32) * s, (char*)const_cast<F32*>(mLinkRads.address()));
+      file.read(sizeof(U8) * s, (char*)const_cast<U8*>(mLinkDirs.address()));
+      file.read(sizeof(U8) * s, (char*)const_cast<U8*>(mLinkAreas.address()));
+      file.read(sizeof(U16) * s, (char*)const_cast<U16*>(mLinkFlags.address()));
+      file.read(sizeof(F32) * s, (char*)const_cast<U32*>(mLinkIDs.address()));
+   }
    mLinksUnsynced.fill(false);
    mLinksUnsynced.fill(false);
    mLinkSelectStates.fill(Unselected);
    mLinkSelectStates.fill(Unselected);
    mDeleteLinks.fill(false);
    mDeleteLinks.fill(false);