prevent multiple logging when jpeg contains large extended xmp
This commit is contained in:
parent
a435bfdf27
commit
55fcdce159
1 changed files with 9 additions and 3 deletions
|
@ -26,6 +26,7 @@ class SafeXmpReader : XmpReader() {
|
||||||
val extensionPreambleLength = XMP_EXTENSION_JPEG_PREAMBLE.length
|
val extensionPreambleLength = XMP_EXTENSION_JPEG_PREAMBLE.length
|
||||||
var extendedXMPGUID: String? = null
|
var extendedXMPGUID: String? = null
|
||||||
var extendedXMPBuffer: ByteArray? = null
|
var extendedXMPBuffer: ByteArray? = null
|
||||||
|
var loggedDanger = false
|
||||||
|
|
||||||
for (segmentBytes in segments) {
|
for (segmentBytes in segments) {
|
||||||
if (segmentBytes.size >= preambleLength) {
|
if (segmentBytes.size >= preambleLength) {
|
||||||
|
@ -42,7 +43,12 @@ class SafeXmpReader : XmpReader() {
|
||||||
if (extendedXMPGUID != null && segmentBytes.size >= extensionPreambleLength &&
|
if (extendedXMPGUID != null && segmentBytes.size >= extensionPreambleLength &&
|
||||||
XMP_EXTENSION_JPEG_PREAMBLE.equals(String(segmentBytes, 0, extensionPreambleLength), ignoreCase = true)
|
XMP_EXTENSION_JPEG_PREAMBLE.equals(String(segmentBytes, 0, extensionPreambleLength), ignoreCase = true)
|
||||||
) {
|
) {
|
||||||
extendedXMPBuffer = processExtendedXMPChunk(metadata, segmentBytes, extendedXMPGUID, extendedXMPBuffer)
|
extendedXMPBuffer = processExtendedXMPChunk(metadata, segmentBytes, extendedXMPGUID, extendedXMPBuffer) { fullLength ->
|
||||||
|
if (!loggedDanger) {
|
||||||
|
logError(metadata, fullLength)
|
||||||
|
loggedDanger = true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,7 +102,7 @@ class SafeXmpReader : XmpReader() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// adapted from `XmpReader` to prevent large allocation
|
// adapted from `XmpReader` to prevent large allocation
|
||||||
private fun processExtendedXMPChunk(metadata: Metadata, segmentBytes: ByteArray, extendedXMPGUID: String, extendedXMPBufferIn: ByteArray?): ByteArray? {
|
private fun processExtendedXMPChunk(metadata: Metadata, segmentBytes: ByteArray, extendedXMPGUID: String, extendedXMPBufferIn: ByteArray?, onDangerSize: (fullLength: Int) -> Unit): ByteArray? {
|
||||||
var extendedXMPBuffer: ByteArray? = extendedXMPBufferIn
|
var extendedXMPBuffer: ByteArray? = extendedXMPBufferIn
|
||||||
val extensionPreambleLength = XMP_EXTENSION_JPEG_PREAMBLE.length
|
val extensionPreambleLength = XMP_EXTENSION_JPEG_PREAMBLE.length
|
||||||
val segmentLength = segmentBytes.size
|
val segmentLength = segmentBytes.size
|
||||||
|
@ -112,7 +118,7 @@ class SafeXmpReader : XmpReader() {
|
||||||
if (extendedXMPBuffer == null) {
|
if (extendedXMPBuffer == null) {
|
||||||
// TLAD insert start
|
// TLAD insert start
|
||||||
if (fullLength > SEGMENT_TYPE_SIZE_DANGER_THRESHOLD) {
|
if (fullLength > SEGMENT_TYPE_SIZE_DANGER_THRESHOLD) {
|
||||||
logError(metadata, fullLength)
|
onDangerSize(fullLength)
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
// TLAD insert end
|
// TLAD insert end
|
||||||
|
|
Loading…
Reference in a new issue