Skip to content

GTUltra v1.5.8

Latest

Choose a tag to compare

@github-actions github-actions released this 14 Jul 00:40

[1.5.8] - 2026-07-14

Fixed

  • gt2reloc segfault when packing a song (issue #71): the relocation-time playback runs on gtEditorObject, whose sidreg[] pointers are intentionally never wired via initSID (only gtObject is). The main app marks that object silent (noSIDWrites = 1) so playroutine skips SID register writes; gt2reloc omitted the flag, so it dereferenced NULL sidreg[i] (gplay.c:435). Now sets gtEditorObject.noSIDWrites = 1, matching gt2stereo.c. Also fixes an ASan global-buffer-overflow: loadedsongfilename was declared [MAX_FILENAME] (60) in gt2reloc.c vs the [MAX_PATHNAME] (256) extern, overflowed by clearsong's memset. Re-enables the gt2reloc functional smoke test (packs the fixture to both .prg and .sid with the fixture's canonical flags -AFF00 -B2 -H1 -U6, exercising the stereo/2-SID and buffered-write player paths) and the Linux ASan usage checks. Reported by @moraff. Also silenced injected debug output in the vendored assembler (src/asm/asmtab.c: forced yydebug = 1 plus stray Assemble checkN / Starting parse prints) that flooded the logs on every pack; this realigns with Exomizer 3 upstream, which sets yydebug = 0 and has none of those prints. Also gave gt2reloc a custom SDL_LogSetOutputFunction so its INFO: lines are identical on Linux/macOS/Windows (macOS otherwise routes SDL_Log through NSLog, prepending a timestamp/process prefix); the same inconsistency in the other apps is tracked in known-bugs.md (Bug 5). Removed an unconditional debug_0.s dump (greloc.c) that wrote the generated player assembly into the current directory on every relocation/pack (also an unchecked fopen); this affected both gt2reloc and the gtultra export path. The custom log function guards a NULL STDERR (on Windows STDERR is reopened via fopen("CON"), which can fail in a headless/CI shell and previously crashed the pack).
  • -Wpointer-to-int-cast (11 warnings) in the vendored Exomizer assembler src/asm/{expr,parse}.c: debug LOG() dump helpers truncated 64-bit pointers via (u32) casts. Backported the %p/(void*) formatting from current Exomizer upstream (each site license-marked). Supersedes PR #13; thanks @drfiemost for the report.
  • src/version.h now tracks the actual release version (was stale at 1.5.6, so the 1.5.7 build reported the wrong version). CLAUDE.md now requires bumping version.h and the CHANGELOG together.

Changed

  • Release workflow: node24 artifact actions, shallow single-tag release checkouts (avoids legacy mixed-case tag collision on case-insensitive runners)