Skip to content

v0.8.0

Latest

Choose a tag to compare

@tais tais released this 17 Jul 08:28
· 997 commits to master since this release
c97c786

v0.8.0

A large stability release continuing the codebase-wide crash and undefined-behaviour sweep, plus the first two pieces of engine test and error-handling infrastructure. ~50 confirmed, adversarially-verified defects fixed across 23 PRs. No gameplay or content changes; saves and the multiplayer protocol stay compatible with v0.7.x.

Fixes:

  • Dialogue: guard gFacesData[-1] OOB in the snitch / skyrider / special paths (#265)
  • Strategic AI: guard gGarrisonGroup[] OOB by NO_GARRISON / -1 (#266)
  • SGP: bound the PNG pixel-buffer size against a 32-bit multiply overflow (#267)
  • OOB guards: LockTable[LOCK_UNOPENABLE] on blow-up, LightSetColors pPal[1] over-read (#268)
  • Overhead map: clip the item exploration-ring pixels (OOB framebuffer write) (#269)
  • Militia-move count underflow + l_GetStat on an empty merc list (#270)
  • Laptop/economy: Speck-debt off-by-one + two MiniEvents Lua-helper bugs (#271)
  • OOB/flag guards: personnel slot, blow-up profile, wall-orientation table, help-restore flag (#272)
  • Harden the map/light file loaders against truncated/corrupt files (#273)
  • Contract-renewal accumulation, vehicle seat rotation, creature call-priority tables (#274)
  • Edgepoints: free the cached center-gridno buffer + include fCenterOnly in the cache key (#275)
  • Militia sprite off-by-one, RandomSoldierId empty case, vehicle Lua helpers targeting the wrong vehicle (#276)
  • Strategic AI: stop inflating new-AI enemy squads (elite double-count) (#277)
  • Pre-battle: NULL-deref crash, tactical-placement soft-lock, guaranteed-ambush integer wrap (#278)
  • Clamp unbounded data-driven indices in 5 XML/item loaders (OOB writes/reads) (#279)
  • gCreaturePlacements[-1] every night after the queen dies + NPC gift inv[NO_SLOT] OOB (#280)
  • IMP: bound the personality-quiz question index (iQuizAnswerList[16] OOB on re-entry) (#281)
  • Strategic: AddEnemiesToBattle no longer hangs when tanks/jeeps can't be placed (#284)
  • Email: swap message-subject pointers instead of copying between fixed buffers (heap overflow) (#285)
  • Strategic: re-fetch the group after GroupArrivedAtSector (simultaneous-arrival use-after-free) (#286)
  • Bobby Ray: bound the shipment loops by the gShipmentTable snapshot size (stale-snapshot OOB) (#287)

Engine / testing:

  • FileRead now zeroes the unread tail on a short or failed read, retiring the "ignored FileRead -> uninitialized data" crash class at its source (#283)
  • Headless engine smoke test: the engine now links into a standalone ctest binary and boots the data-free platform subsystems (memory / file / video), the first slice of an automated test harness (#282)

Engine-only archives (Linux/macOS/Windows). Drop into an existing JA2 1.13 install to run.