Bladeren bron

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.
RedwindA 1 week geleden
bovenliggende
commit
f449e06b9d
1 gewijzigde bestanden met toevoegingen van 17 en 2 verwijderingen
  1. 17 2
      service/file_service.go

+ 17 - 2
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
 			}