Android security tags, read closely by Lightrion

CVE-2026-21352 AI-generated analysis

platform/external/dng_sdk (Adobe DNG SDK: JXL codec glue, opcode processing, memory blocks, safe arithmetic)

AI-generated: written from the bulletin and the fixing diffs by claude-fable-5-1, then checked against the code by claude-opus-5-5 (7 corrections). Verify against the commit before relying on it.

Updates external/dng_sdk from 1.7.1 build 2410 to 2471. The update adds integer-overflow checks around JXL decode/encode buffer sizing and allocations, fixes an off-by-one table index in dng_opcode_MapTable::ReplicateLastEntry, and guards several divisions by zero that occur when blackLevel is 65535.

Root cause

Several size and coordinate computations used unchecked arithmetic. In dng_jxl.cpp, jxl_image_chunk_reader and jxl_buffer_chunk_reader built a dng_pixel_buffer from size_t xpos/ypos/xsize/ysize by truncating them to int32 and adding them without overflow checks (fArea.b/r and, in the buffer reader, fArea.t/l). fRowStep was computed with SafeUint32Mult. dng_jxl_decoder::Decode computed fRowStep and the 64-bit bytesNeeded with plain multiplication, and cast the JxlDecoderImageOutBufferSize result to uint32 for host.Allocate without a range check. EncodeJXL_Common computed previewBytesNeeded with plain multiplication. jxl_memory_block added 160 to bytesNeeded without a wrap check and did not check allocator.Malloc for a null return. dng_ref_counted_block::Allocate called malloc(size + sizeof(header)) without a wrap check. In dng_misc_opcodes.cpp, dng_opcode_MapTable::ReplicateLastEntry read table[fCount] instead of table[fCount - 1]. Because fCount is validated to 1..0x10000 and the table is allocated as 0x10000 uint16 entries, fCount == 0x10000 reads one element past the allocation and smaller counts read an unwritten slot. dng_opcode_MapTable::Prepare, dng_opcode_GainMap::ProcessArea, RefVignette32 and RefBaselineMapPoly32 divided by (65535 - blackLevel) or by blackScale2, both of which are zero when blackLevel == 65535. The material does not identify which of these hunks is the one tracked as CVE-2026-21352 (the commit references two bugs, 483697751 and 483693973).

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to June 2026 · Findings