Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions Minio.Tests/UtilsTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
using System.Xml.Serialization;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Minio.DataModel;
using Minio.DataModel.Result;
using Minio.Exceptions;
using Minio.Helper;

Expand Down Expand Up @@ -235,4 +236,22 @@ public void TestisValidEndpoint()
Assert.IsTrue(RequestUtil.IsValidEndpoint("A.domain.com"));
Assert.IsTrue(RequestUtil.IsValidEndpoint("A.domain1.com"));
}

[TestMethod]
public void TestXmlResultWithoutNamespace()
{
var xml = """
<?xml version="1.0" encoding="UTF-8"?>
<CopyObjectResult>
<LastModified>
2022-10-29T15:34:41.626Z
</LastModified>
<ETag>
&#34;ead3fcd881dee32547f1b6ca1fc29463&#34;
</ETag>
</CopyObjectResult>
""";
var result = Utils.DeserializeXml<CopyObjectResult>(xml);
Assert.IsNotNull(result);
}
}
4 changes: 4 additions & 0 deletions Minio/Helper/AmazonAwsS3XmlReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,9 @@ public AmazonAwsS3XmlReader(Stream stream) : base(stream)
{
}

public AmazonAwsS3XmlReader(TextReader textReader) : base(textReader)
{
}

public override string NamespaceURI => "http://s3.amazonaws.com/doc/2006-03-01/";
}
18 changes: 17 additions & 1 deletion Minio/Helper/Utils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1050,13 +1050,29 @@ public static string SerializeToXml<T>(T anyobject) where T : class
using var reader = new StreamReader(stream);
var xmlContent = reader.ReadToEnd();

return DeserializeXml<T>(xmlContent); // Call the string overload
return DeserializeNonS3Xml<T>(xmlContent); // Fallback to generic XML deserialization
}

public static T DeserializeXml<T>(string xml) where T : class, new()
{
if (string.IsNullOrEmpty(xml)) return default;

var ns = GetNamespace<T>();
if (!string.IsNullOrWhiteSpace(ns) && string.Equals(ns, "http://s3.amazonaws.com/doc/2006-03-01/",
StringComparison.OrdinalIgnoreCase))
{
using var stringReader = new StringReader(xml);
using var amazonAwsS3XmlReader = new AmazonAwsS3XmlReader(stringReader);
return (T)new XmlSerializer(typeof(T)).Deserialize(amazonAwsS3XmlReader);
}

return DeserializeNonS3Xml<T>(xml); // Fallback to generic XML deserialization
}

private static T DeserializeNonS3Xml<T>(string xml) where T : class, new()
{
if (string.IsNullOrEmpty(xml)) return default;

var settings = new XmlReaderSettings
{
// Disable DTD processing
Expand Down