diff --git a/src/ImageSharp/Common/Extensions/EncoderExtensions.cs b/src/ImageSharp/Common/Extensions/EncoderExtensions.cs
index 82899863c..086dbee35 100644
--- a/src/ImageSharp/Common/Extensions/EncoderExtensions.cs
+++ b/src/ImageSharp/Common/Extensions/EncoderExtensions.cs
@@ -20,6 +20,11 @@ namespace SixLabors.ImageSharp
/// The string.
public static string GetString(this Encoding encoding, ReadOnlySpan buffer)
{
+ if (buffer.Length == 0)
+ {
+ return null;
+ }
+
fixed (byte* bytes = buffer)
{
return encoding.GetString(bytes, buffer.Length);
diff --git a/tests/ImageSharp.Tests/Common/EncoderExtensionsTests.cs b/tests/ImageSharp.Tests/Common/EncoderExtensionsTests.cs
new file mode 100644
index 000000000..ec1ae65d6
--- /dev/null
+++ b/tests/ImageSharp.Tests/Common/EncoderExtensionsTests.cs
@@ -0,0 +1,32 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using System;
+using System.Text;
+using Xunit;
+
+namespace SixLabors.ImageSharp.Tests.Common
+{
+ public class EncoderExtensionsTests
+ {
+ [Fact]
+ public void GetString_EmptyBuffer_ReturnsNull()
+ {
+ var buffer = new ReadOnlySpan();
+
+ string result = Encoding.UTF8.GetString(buffer);
+
+ Assert.Null(result);
+ }
+
+ [Fact]
+ public void GetString_Buffer_ReturnsString()
+ {
+ var buffer = new ReadOnlySpan(new byte[] { 73, 109, 97, 103, 101, 83, 104, 97, 114, 112 });
+
+ string result = Encoding.UTF8.GetString(buffer);
+
+ Assert.Equal("ImageSharp", result);
+ }
+ }
+}