Skip to content
2 changes: 1 addition & 1 deletion python/semantic_kernel/contents/utils/data_uri.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ def from_data_uri(cls: type[_T], data_uri: str | Url, default_mime_type: str = "
if not data or "," not in data:
raise ContentInitializationError("Invalid data uri format. The data is missing.")

pattern = "(((?P<mime_type>[a-zA-Z]+/[a-zA-Z-]+)(?P<parameters>(;[a-zA-Z0-9]+=+[a-zA-Z0-9]+)*))?(;+(?P<data_format>.*)))?(,(?P<data_str>.*))" # noqa: E501
pattern = "(((?P<mime_type>[a-zA-Z]+/[a-zA-Z0-9!#$&^_.+-]+)(?P<parameters>(;[a-zA-Z0-9]+=+[a-zA-Z0-9]+)*))?(;+(?P<data_format>.*)))?(,(?P<data_str>.*))" # noqa: E501
match = re.match(pattern, data)
Comment on lines +138 to 139
if not match:
raise ContentInitializationError("Invalid data uri format.")
Expand Down
18 changes: 18 additions & 0 deletions python/tests/unit/contents/test_data_uri.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,24 @@
"base64",
id="basic_binary",
),
pytest.param(
"data:image/svg+xml;base64,PHN2Zy8+",
b"<svg/>",
"PHN2Zy8+",
"image/svg+xml",
{},
"base64",
id="structured_suffix",
),
pytest.param(
"data:application/vnd.api+json;base64,e30=",
b"{}",
"e30=",
"application/vnd.api+json",
{},
"base64",
id="vendor_subtype",
),
pytest.param(
"data:text/plain;base64,U29t\r\nZQ==\t",
b"Some",
Expand Down
Loading