mirror of
https://github.com/ZoneMinder/zoneminder.git
synced 2026-08-03 16:52:36 -04:00
The C++ and PHP parsers for zm.conf and /etc/zm/conf.d/*.conf used fgets with a 512-byte buffer, silently truncating any line longer than that. There was also no way to split a value across multiple lines, so editors hit the cap with no workaround. Accept a trailing backslash (with optional whitespace before the newline) as a line-continuation marker. Leading whitespace on continuation lines is stripped so users can indent for readability without it leaking into the value. Three parsers all read the same files and must agree: - src/zm_config.cpp: switch to std::ifstream + std::getline so a single physical line is no longer capped at 512 bytes, then join continuation lines before running the existing pointer-based parser - scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in: accumulate a logical line across trailing-backslash physical lines - web/includes/config.php.in: drop the 512-byte fgets cap and accumulate in the same way tests/zm_config.cpp covers three cases against the C++ parser: a three-segment continuation joins to "firstsecondthird" with leading whitespace stripped, a bare backslash inside a value is preserved (C:\Users\zm), and a 1500-byte single line survives intact. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>