mirror of
https://github.com/opencv/opencv.git
synced 2026-07-28 06:43:01 +04:00
39da6f45e4
Casting the raw integer fields ras_type and maptype directly to their respective enum types (SunRasType / SunRasMapType) without a prior range check is undefined behavior under C++11 §7.2/8 when the stored value falls outside the enum's valid range. UBSan reports: grfmt_sunras.cpp:72: runtime error: load of value 34077, which is not a valid value for type 'SunRasMapType' Fix: read both fields into plain ints first, validate them against the declared enumerator bounds, and return false (reject the image) on any out-of-range value before performing the enum cast. This is the cheapest correct approach — two integer comparisons added to a path that was already doing I/O — and ensures no downstream code ever sees an ill-formed enum value. Add test_sunraster.cpp with regression tests covering: - The exact crash_001 payload (invalid maptype 34077 / 0x851d) - Invalid ras_type values - maptype = 2 and UINT_MAX (outside [0,1]) - Truncated header - A valid 8-bpp grayscale image that must still decode correctly Signed-off-by: FuzzAnything fuzzanything@gmail.com