{"record":{"id":"109193536790d56a","repo":"egametang/ET","slug":"invalid-version-header-version-109193","errorCode":null,"errorMessage":"Invalid version {header.version}","messagePattern":"Invalid version (.+?)","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"Packages/cn.etetet.recast/Scripts/Core/Share/Detour/Io/DtMeshSetReader.cs","lineNumber":93,"sourceCode":"        {\n            NavMeshSetHeader header = new NavMeshSetHeader();\n            header.magic = bb.GetInt();\n            if (header.magic != NavMeshSetHeader.NAVMESHSET_MAGIC)\n            {\n                header.magic = IOUtils.SwapEndianness(header.magic);\n                if (header.magic != NavMeshSetHeader.NAVMESHSET_MAGIC)\n                {\n                    throw new IOException(\"Invalid magic \" + header.magic);\n                }\n\n                bb.Order(bb.Order() == RcByteOrder.BIG_ENDIAN ? RcByteOrder.LITTLE_ENDIAN : RcByteOrder.BIG_ENDIAN);\n            }\n\n            header.version = bb.GetInt();\n            if (header.version != NavMeshSetHeader.NAVMESHSET_VERSION && header.version != NavMeshSetHeader.NAVMESHSET_VERSION_RECAST4J_1\n                                                                      && header.version != NavMeshSetHeader.NAVMESHSET_VERSION_RECAST4J)\n            {\n                throw new IOException(\"Invalid version \" + header.version);\n            }\n\n            header.numTiles = bb.GetInt();\n            header.option = paramReader.Read(bb);\n            header.maxVertsPerPoly = maxVertsPerPoly;\n            if (header.version == NavMeshSetHeader.NAVMESHSET_VERSION_RECAST4J)\n            {\n                header.maxVertsPerPoly = bb.GetInt();\n            }\n\n            return header;\n        }\n\n        private void ReadTiles(RcByteBuffer bb, bool is32Bit, NavMeshSetHeader header, bool cCompatibility, DtNavMesh mesh)\n        {\n            // Read tiles.\n            for (int i = 0; i < header.numTiles; ++i)\n            {","sourceCodeStart":75,"sourceCodeEnd":111,"githubUrl":"https://github.com/egametang/ET/blob/5cab01f7a8bee5f49f4781eebe9e2b1c6d7ebe0f/Packages/cn.etetet.recast/Scripts/Core/Share/Detour/Io/DtMeshSetReader.cs#L75-L111","documentation":"Thrown by DtMeshSetReader.ReadHeader when the set header version is none of the supported values (NAVMESHSET_VERSION, NAVMESHSET_VERSION_RECAST4J_1, NAVMESHSET_VERSION_RECAST4J). The set file was written by a Detour version this reader cannot parse.","triggerScenarios":"Loading a navmesh set exported by a newer or older Detour/recast4j build; consuming a set file from an incompatible fork.","commonSituations":"Package version drift between bake-time and runtime; cross-tool asset sharing.","solutions":["Re-bake the navmesh set with the current DotRecast/Detour toolchain.","Pin asset producer and runtime to a compatible version.","Inspect the version int in the header and reject unsupported files early."],"exampleFix":"// before\nvar mesh = setReader.Read(bb); // version mismatch\n\n// after\n// re-export set with current toolchain, then:\nvar mesh = setReader.Read(bb);","handlingStrategy":"validation","validationCode":"int v = BitConverter.ToInt32(chunk, 4);\nbool ok = v == NavMeshSetHeader.NAVMESHSET_VERSION ||\n          v == NavMeshSetHeader.NAVMESHSET_VERSION_RECAST4J_1 ||\n          v == NavMeshSetHeader.NAVMESHSET_VERSION_RECAST4J;\nif (!ok) throw new InvalidDataException($\"Unsupported set version {v}\");","typeGuard":"static bool IsSupportedSetVersion(int v)\n    => v == NavMeshSetHeader.NAVMESHSET_VERSION ||\n       v == NavMeshSetHeader.NAVMESHSET_VERSION_RECAST4J_1 ||\n       v == NavMeshSetHeader.NAVMESHSET_VERSION_RECAST4J;","tryCatchPattern":"try { var mesh = setReader.Read(bb); }\ncatch (IOException e) when (e.Message.Contains(\"Invalid version\"))\n{ /* re-export set with current toolchain */ }","preventionTips":["Pin asset producer and runtime to a compatible Detour version.","Re-bake sets after version upgrades.","Version-check the set header before loading."],"tags":["detour","io","version","file-format","migration"],"backgroundTag":null,"analyzedSha":"5cab01f7a8bee5f49f4781eebe9e2b1c6d7ebe0f","analyzedAt":"2026-08-13T21:10:40.377Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}