Skip to content

Fix/softimage channel bounds#5178

Open
ssh4net wants to merge 1 commit intoAcademySoftwareFoundation:mainfrom
ssh4net:fix/softimage-channel-bounds
Open

Fix/softimage channel bounds#5178
ssh4net wants to merge 1 commit intoAcademySoftwareFoundation:mainfrom
ssh4net:fix/softimage-channel-bounds

Conversation

@ssh4net
Copy link
Copy Markdown
Contributor

@ssh4net ssh4net commented May 3, 2026

Description

Fixes malformed Softimage PIC channel packet handling.

Before this change, the reader counted the number of channels in the file, but decoded pixels using fixed channel indexes: R=0, G=1, B=2, A=3. A malformed PIC could advertise only an alpha channel, producing a one-channel ImageSpec, while decode still wrote to channel index 3. That could write past the scanline
buffer in iconvert, iinfo --stats, or other callers that read pixel data from an untrusted .pic.

After this change, Softimage channel packets are validated during open() before the output spec is accepted. The reader now rejects empty, duplicate, unsupported, mixed-depth, and sparse channel packet maps instead of accepting a layout that decode cannot safely write into the declared channel count.

Tests

Added regression coverage to testsuite/softimage.

The test now generates small malformed PIC files with alpha-only sparse channel packets for the uncompressed, pure-RLE, and mixed-RLE decode paths. Each file is passed through iconvert to out.null, and the test records a rejection marker when the malformed input is rejected.

Checklist:

  • I have read the guidelines on contributions and code review procedures.
  • I have read the Policy on AI Coding Assistants
    and if I used AI coding assistants, I have an Assisted-by: Codex GPT5.5 xHigh
    line in the pull request description above.
  • I have updated the documentation if my PR adds features or changes
    behavior.
  • I am sure that this PR's changes are tested in the testsuite.
  • I have run and passed the testsuite in CI before submitting the
    PR, by pushing the changes to my fork and seeing that the automated CI
    passed there. (Exceptions: If most tests pass and you can't figure out why
    the remaining ones fail, it's ok to submit the PR and ask for help. Or if
    any failures seem entirely unrelated to your change; sometimes things break
    on the GitHub runners.)
  • My code follows the prevailing code style of this project and I
    fixed any problems reported by the clang-format CI test.
  • If I added or modified a public C++ API call, I have also amended the
    corresponding Python bindings. If altering ImageBufAlgo functions, I also
    exposed the new functionality as oiiotool options.

@lgritz
Copy link
Copy Markdown
Collaborator

lgritz commented May 5, 2026

Can you rebase this one on top of current main? I think it now conflicts slightly with the other I just merged.

Signed-off-by: Vlad (Kuzmin) Erium <libalias@gmail.com>
@ssh4net ssh4net force-pushed the fix/softimage-channel-bounds branch from 508d460 to 4274382 Compare May 5, 2026 06:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants