From f449e06b9d91cc47db2b3f96b895ed1058a1d7b8 Mon Sep 17 00:00:00 2001 From: RedwindA Date: Thu, 2 Apr 2026 17:01:21 +0800 Subject: [PATCH] fix: handle ISOBMFF extended sizes in HEIF dimension parser parseHEIFDimensions now correctly handles boxSize==1 (64-bit extended size) and boxSize==0 (box-to-EOF), preventing the parser from breaking out of the loop when encountering these valid ISOBMFF box headers before reaching the meta box. --- service/file_service.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/service/file_service.go b/service/file_service.go index 6d1f5cfc..918e426d 100644 --- a/service/file_service.go +++ b/service/file_service.go @@ -504,12 +504,27 @@ func parseHEIFDimensions(data []byte) (int, int, bool) { for offset+8 <= size { boxSize := int(binary.BigEndian.Uint32(data[offset : offset+4])) boxType := string(data[offset+4 : offset+8]) - if boxSize < 8 || offset+boxSize > size { + headerLen := 8 + + if boxSize == 1 { + // 64-bit extended size + if offset+16 > size { + break + } + boxSize = int(binary.BigEndian.Uint64(data[offset+8 : offset+16])) + headerLen = 16 + } else if boxSize == 0 { + // box extends to end of data + boxSize = size - offset + } + + if boxSize < headerLen || offset+boxSize > size { break } + if boxType == "meta" { // meta is a full box: 4 bytes version/flags after header - metaData := data[offset+8 : offset+boxSize] + metaData := data[offset+headerLen : offset+boxSize] if len(metaData) < 4 { return 0, 0, false }