mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-25 02:17:30 -06:00
photocraft_psd::ase::parse counted colors toward MAX_SWATCHES but not group starts, so the number of groups it read grew with the file's size. An empty group start is six bytes, and parse held about 64 bytes for each: in a test build, parsing a 60 MB file of 10,000,000 empty group starts raised the process's peak memory from 63 MB to 705 MB. swatches.import reads files of up to 512 MiB, and read_file built a group for each group start before the import refused more than 10,000 groups. parse now counts group starts and returns LimitExceeded past MAX_GROUPS (10,000), the most groups the Swatches panel holds. Files with at most 10,000 groups parse as before, so every file the import accepted still loads. Files with more were refused before as well; now parse refuses them before it holds more than 10,000 groups. write also refuses more than MAX_GROUPS groups, as it refuses more than MAX_SWATCHES colors. ase_group_cap_is_enforced_on_hostile_input parses 10,001 empty group starts and expects LimitExceeded, then parses the same file with one block fewer and expects all 10,000 groups. too_many_groups checks that write refuses 10,001 groups and that 10,000 groups are written and read back.