Files
zoneminder/web
Isaac Connor 158d9433d3 fix: address PR #4788 review comments on planar sizing and SHM bounds
- Image::Assign(raw buffer overload): derive new_size from
  av_image_get_buffer_size(pix_fmt, w, h, 32) instead of
  width*height*colours, which undercounts planar formats (YUV420P/J420P/
  YUV422P/J422P) and would silently truncate U/V planes. Update linesize
  in the same branch so LineSize() consumers (JPEG encode, overlay) stay
  in sync with the new format. Reject AV_PIX_FMT_NONE and negative
  av_image_get_buffer_size returns up-front.
- Image::AVPixFormat(AVPixelFormat) setter: validate the requested
  format via zm_colours_from_pixformat() and check both av_image_*
  return values before mutating any state. On failure, leave
  imagePixFormat/size/linesize untouched so callers can recover instead
  of inheriting wrapped-unsigned junk.
- Image::Assign(const Image&) stride-mismatch branch: refuse planar
  formats (YUV420P/J420P/YUV422P/J422P) explicitly. The per-row copy
  only touches the Y plane; doing it silently on planar input leaves
  U/V uninitialised in the destination and produces solid-green output
  downstream. Caller must reconvert or reallocate.
- Monitor::connect: size SHM slots to an upper bound across every
  supported AVPixelFormat (RGBA at w*h, align=32) instead of the
  monitor's configured camera->ImageSize(). Prevents "Held buffer is
  undersized" failures when the no-conversion pipeline transports a
  format larger than the legacy DB Colours selection (e.g. YUV422P or
  RGBA into a GRAY8-configured monitor). Store the chosen capacity on
  the Monitor as shm_slot_size.
- Monitor::ReadShmFrame: validate image_pixelformats[index] both as a
  recognised enum AND that its av_image_get_buffer_size fits
  shm_slot_size before calling AVPixFormat(fmt). Treats a corrupted or
  torn SHM value as ignorable instead of letting it overrun the held
  slot. Single zm_colours_from_pixformat() call (no longer duplicated).
- web/.../monitor.php: inline fallback for
  translate('DeprecatedColoursSetting') so non-en_gb locales render an
  English string instead of the literal key name.

refs #4788

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 17:10:22 -04:00
..

Modern ZoneMinder Skin

This web frontend to ZoneMinder is a complete rewrite of the classic frontend, based on CakePHP.