Issues noticed while writing the documentation in docs/. None of them has been fixed yet; each
needs review by the code owner before changing.
-
core/e2core/Localize.cpp:213—RemoveTokensFilecallsm_tokens.remove(it)and then++iton the removed iterator (use after free).Map::removereturns the next iterator; the loop should continue from it. -
core/e2core/Localize.cpp:302—AddToken(const char*, const wchar_t*)passes the wide string toLocalizeConvertSymbolsthrough(char*). The function parses it as a narrow string and stops on the second byte of the first character, so\n/\tare not converted for this overload. -
core/e2core/Localize.cpp:302,:314— bothAddTokenoverloads cast awayconstand modify the caller's string in place (undefined behavior for literals). -
core/e2core/Localize.cpp:160— whenRegionalSettingsis missing, the message says "force english" butm_languagestays empty and the$LOCALIZE$search path is already removed. -
public/materialsystem1/IMaterialSystem.h:235— templateSetupDrawDefaultUP(topology, const VERT* verts, ...)passes&verts(address of the local pointer) instead ofverts. -
public/render/IDebugOverlay.h:62-63—DDNodeBase::nameHashandframeindexare not initialized. WithoutName()the primitive may be treated as named byCDebugOverlay::CheckNodeLifetime(nameHash != 0) and replaced by an unrelated primitive. -
framework/core/platform/eqthread.h:101,:162—CScopedMutexandCScopedWriteLockerwithblocking = falseunlock in the destructor even if the lock was not acquired. -
framework/core/platform/eqatomic.h:62—Atomic::CompareExchangeWeaktakesoldValby value, so the updated expected value is not returned to the caller. -
framework/core/platform/eqjobmanager.cpp:260—CEqJobManager::AllJobsCompleteddequeues a job and enqueues it back to check the queue, which changes the queue order (and is racy with workers). -
framework/ds/Map.h:168,:499—clear()andremove()readitem->nextafter callingitem->~Item(). Works in practice, but is undefined behavior; readnextbefore destroying. -
shared/font/FontCache.cpp:253—GetFamilyreturns the default family for unknown names, soGetFont(..., defaultIfNotFound = false)never returnsnullptronce a default font exists.
-
shared/font/FontCache.cpp:47— font description loading uses the deprecatedKV_LoadFromFile. -
shared/studio/StudioGeom.cpp:708—.skinloading uses the deprecatedKV_LoadFromFile. -
tools/fcompress/fcompress_main.cpp:390,:520— config and KeyValues conversion use the deprecatedKV_LoadFromFile/KV_GetValue*. -
public/egf/*.h,shared/egf, tools — headers and comments still call EGF "Equilibrium Geometry Format" / "Equilibrium Graphics File"; the format is now named Entity Geometry Format. -
framework/core/ConCommand.h:17—CMD_ARG_CONCATuses an undefinediand appends the separator once after the loop instead of between arguments. Appears unused. -
core/e2core/profiler_core.cpp:158—ptrace_stopdescription is "Performance trace start" (copied fromptrace_start). -
framework/core/platform/eqthread.h:222,:237— the usage comment mentions a non-existentStartWorker()and its worker example callsStartThreadinstead ofStartWorkerThread. -
public/core/IEqParallelJobs.h:27— comment mentionsJOB_FLAG_DELETE, which does not exist (the job is created withDeleteOnFinish). -
framework/math/Utility.cpp:36,:50—PointToScreenreturnstruewhen the point is behind the camera; the name suggests the opposite. Consider renaming the result or documenting it inUtility.h. -
core/e2core/Localize.cpp:113—Initlower-casesm_languageagain afterSetLanguageNamealready did it. -
core/e2core/Localize.cpp— style does not matchdocs/codestyle.md(C-style casts,_FindTokenreserved identifier, missingoverride,pszDefaultToken = 0, mixedif(/if (). Only relevant if the file is refactored. -
shared/scripting/esl_bind.h:338,:341—EQSCRIPT_BIND_VAR_EX_SET_NAMEDis defined twice (identical definitions). -
shared/sys/scripting/sys_esl_core.h:31-81— theENABLE_MULTIPLAYERblock still bindsNetworking::Buffer/CNetworkThreadwith the old OOLUA macros (OOLUA_PROXY), which do not exist in ESL; it would not compile withENABLE_MULTIPLAYER. -
shared/sys/scripting/sys_esl_engine.h:31— the Lua class ofDDOrientedBoxis named"DDOrientedBox", while the other debug shapes useDbg*names (DbgBox,DbgSphere, ...) and its constructor function isDbgOriBox. Renaming changes the script API.
-
tools/egfca— generate.skinfiles (additional model skins) from the compile script, so they do not have to be written by hand.
-
shared/premake5.lua:189—sysLiblistsgamesys/**, which does not exist inshared/. -
samples/GPUDriven/premake5.lua:26— usesegfLib, which is defined only whenENABLE_TOOLSis on. -
utils/.premake_modules/usage— the customusage/usesmodule conflicts with the built-in usages of newer premake5 releases (they work differently), so the build is pinned to the premake5 binaries inutils/. Resolve the conflict (rename the module API or migrate to the built-in usages) to allow updating premake5.
-
docs/keyvalues.md— V3 array elements separated by whitespace ([bottom hcenter]) and the one-lineembed1 { embeddedFlags flag1 flag3; }form in V2 were not verified against the parser. -
docs/public_filesystem.md— whetherCFileSystemFind::GetPath()returns a full path or only the entry name. -
docs/framework_math.md—QuadTree.hdescription (Barnes-Hut style) is inferred from method names.