From c6540799e319919bbbea91f36f578f1cb517f7a3 Mon Sep 17 00:00:00 2001 From: Ynse Hoornenborg Date: Mon, 10 Jan 2022 05:58:50 +0100 Subject: [PATCH] Zero out the iTxt header --- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index c428f52e4c..da6878051f 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -680,12 +680,21 @@ namespace SixLabors.ImageSharp.Formats.Png return; } - int payloadLength = xmpData.Length + PngConstants.XmpKeyword.Length + 5; + int payloadLength = xmpData.Length + PngConstants.XmpKeyword.Length + iTxtHeaderSize; using (IMemoryOwner owner = this.memoryAllocator.Allocate(payloadLength)) { Span payload = owner.GetSpan(); PngConstants.XmpKeyword.CopyTo(payload); - int bytesWritten = PngConstants.XmpKeyword.Length + iTxtHeaderSize; + int bytesWritten = PngConstants.XmpKeyword.Length; + + // Write the iTxt header (all zeros in this case) + payload[bytesWritten++] = 0; + payload[bytesWritten++] = 0; + payload[bytesWritten++] = 0; + payload[bytesWritten++] = 0; + payload[bytesWritten++] = 0; + + // And the XMP data itself xmpData.CopyTo(payload.Slice(bytesWritten)); this.WriteChunk(stream, PngChunkType.InternationalText, payload); }