diff --git a/src/ModelContextProtocol.Core/Protocol/ContentBlock.cs b/src/ModelContextProtocol.Core/Protocol/ContentBlock.cs index d31936b..7d35cec 100644 --- a/src/ModelContextProtocol.Core/Protocol/ContentBlock.cs +++ b/src/ModelContextProtocol.Core/Protocol/ContentBlock.cs @@ -425,9 +425,12 @@ public sealed class ImageContentBlock : ContentBlock /// /// This method stores the provided bytes as and encodes them to base64 UTF-8 bytes for . /// - /// + /// is . + /// is empty or composed entirely of whitespace. public static ImageContentBlock FromBytes(ReadOnlyMemory bytes, string mimeType) { + Throw.IfNullOrWhiteSpace(mimeType); + ReadOnlyMemory data = EncodingUtilities.EncodeToBase64Utf8(bytes); return new() @@ -510,9 +513,12 @@ public sealed class AudioContentBlock : ContentBlock /// /// This method stores the provided bytes as and encodes them to base64 UTF-8 bytes for . /// - /// + /// is . + /// is empty or composed entirely of whitespace. public static AudioContentBlock FromBytes(ReadOnlyMemory bytes, string mimeType) { + Throw.IfNullOrWhiteSpace(mimeType); + ReadOnlyMemory data = EncodingUtilities.EncodeToBase64Utf8(bytes); return new() diff --git a/tests/ModelContextProtocol.Tests/Protocol/ContentBlockTests.cs b/tests/ModelContextProtocol.Tests/Protocol/ContentBlockTests.cs index 2dfcf7d..957a452 100644 --- a/tests/ModelContextProtocol.Tests/Protocol/ContentBlockTests.cs +++ b/tests/ModelContextProtocol.Tests/Protocol/ContentBlockTests.cs @@ -272,4 +272,22 @@ public class ContentBlockTests Assert.Equal("Paris", result.Input.GetProperty("city").GetString()); Assert.Equal("metric", result.Input.GetProperty("units").GetString()); } + + [Theory] + [InlineData(null)] + [InlineData("")] + [InlineData(" ")] + public void ImageContentBlock_FromBytes_ThrowsForNullOrWhiteSpaceMimeType(string? mimeType) + { + Assert.ThrowsAny(() => ImageContentBlock.FromBytes((byte[])[1, 2, 3], mimeType!)); + } + + [Theory] + [InlineData(null)] + [InlineData("")] + [InlineData(" ")] + public void AudioContentBlock_FromBytes_ThrowsForNullOrWhiteSpaceMimeType(string? mimeType) + { + Assert.ThrowsAny(() => AudioContentBlock.FromBytes((byte[])[1, 2, 3], mimeType!)); + } } \ No newline at end of file