mirror of
https://github.com/1dot13/source.git
synced 2026-08-05 14:00:23 +02:00
The Smacker header declares a max audio chunk size, and libsmacker sized its output buffer from it — then wrote each frame's audio trusting the frame's own unpacked size, unchecked. The fan-localized intro videos (Chinese among others) declare max_buffer=2304 but carry ~97KB audio frames: every decode was a heap overflow, crashing the intro. The original SMACKW32.DLL played these files, so treat the per-frame size as truth and grow the buffer, bounded by a 16MB sanity cap; a chunk beyond that fails the frame as corrupt. Covers both the raw-PCM and DPCM paths. Verified with an ASan/UBSan harness over all 19 vanilla and Chinese intro SMKs: previously all 8 Chinese files faulted, now all decode both passes clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
libsmacker A C library for decoding .smk Smacker Video files version 1.2.0 2021-06-02 (c) Greg Kennedy 2013-2021 http://libsmacker.sourceforge.net ---- --- Introduction --- libsmacker is a cross-platform C library which can be used for decoding Smacker Video files produced by RAD Game Tools. Smacker Video was the king of video middleware in the 1990s, and its 256-color compressed video format was used in over 2600 software titles. libsmacker implements the minimum feature set required from smackw32.dll to get an smk off a disk and the frames / audio into a buffer in the correct order. --- License --- libsmacker is released under the Lesser GNU Public License, v2.1. See the file COPYING for more information. --- Usage --- See the webpage for sample code and function documentation. The source package additionally includes a pair of driver programs: * driver.c - dumps all frames of a file to a bmp/ subdirectory, and all audio as raw streams to out_*.raw files in CWD * smk2avi.c - converts smk file(s) to AVI files - uncompressed 24-bit color and PCM audio stream. Though the libraries are "bulletproofed" the sample apps are not: be cautious if you plan to implement in some critical environment. --- Changelog --- 1.2.0 * Major refactor of data structures for performance * Merge all files into a single unified .c source file * Support audio-only .smk files 1.1.1 * Re-license under LGPL 2.1 1.1 * Switch to autotools-based build * Incorporates patches from Dalerank Slim, Gennady Trafimenkov, and Bianca van Schaik * Performance improvements and code cleanup / safety. 1.0 * Initial revision --- Contact --- Questions/comments: * by email: kennedy.greg@gmail.com * by website: http://libsmacker.sourceforge.net Enjoy!