Skip to content

Commit 35684e7

Browse files
Merge pull request #1136 from andersjonsson/new-fix-for-reading-binary
ReadElementContentAs... would return 0 on the second call, even if th…
2 parents ad4c279 + 4c91553 commit 35684e7

3 files changed

Lines changed: 19 additions & 8 deletions

File tree

src/SoapCore.Tests/XDocumentXmlReaderTests.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,14 @@ public void TestReadBase64()
2828
var xdoc = XDocument.Parse(xml);
2929
var reader = new XDocumentXmlReader(xdoc);
3030

31-
reader.Read();
3231
reader.Read();
3332
reader.Read();
3433

3534
var buffer = new byte[1024];
3635
var ms = new MemoryStream();
3736
while (true)
3837
{
39-
var i = reader.ReadContentAsBase64(buffer, 0, 1024);
38+
var i = reader.ReadElementContentAsBase64(buffer, 0, 1024);
4039
ms.Write(buffer, 0, i);
4140

4241
if (i < buffer.Length)

src/SoapCore/SoapCore.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<Description>SOAP protocol middleware for ASP.NET Core</Description>
5-
<Version>1.2.1.5</Version>
5+
<Version>1.2.1.6</Version>
66
<Authors>Digital Design</Authors>
77
<TargetFrameworks>netstandard2.0;netstandard2.1;net8.0;netcoreapp3.1;</TargetFrameworks>
88
<PackageId>SoapCore</PackageId>

src/SoapCore/XDocumentXmlReader.cs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,12 @@ public override int ReadContentAsBase64(byte[] buffer, int index, int count)
4242

4343
public override int ReadElementContentAsBase64(byte[] buffer, int index, int count)
4444
{
45-
if (!Read() || (_reader.NodeType != XmlNodeType.Text && _reader.NodeType != XmlNodeType.Whitespace))
45+
if (!_isReadingBinary)
4646
{
47-
return 0;
47+
if (!Read() || (_reader.NodeType != XmlNodeType.Text && _reader.NodeType != XmlNodeType.Whitespace))
48+
{
49+
return 0;
50+
}
4851
}
4952

5053
return ReadContentAsBase64(buffer, index, count);
@@ -57,9 +60,12 @@ public override int ReadContentAsBinHex(byte[] buffer, int index, int count)
5760

5861
public override int ReadElementContentAsBinHex(byte[] buffer, int index, int count)
5962
{
60-
if (!Read() || (_reader.NodeType != XmlNodeType.Text && _reader.NodeType != XmlNodeType.Whitespace))
63+
if (!_isReadingBinary)
6164
{
62-
return 0;
65+
if (!Read() || (_reader.NodeType != XmlNodeType.Text && _reader.NodeType != XmlNodeType.Whitespace))
66+
{
67+
return 0;
68+
}
6369
}
6470

6571
return ReadContentAsBinHex(buffer, index, count);
@@ -69,7 +75,13 @@ public int ReadBinary(byte[] buffer, int index, int count, bool isBase64)
6975
{
7076
EnsureBinaryStream(isBase64);
7177

72-
return _binaryStream!.Read(buffer, index, count);
78+
var result = _binaryStream!.Read(buffer, index, count);
79+
if (_binaryStream.Position == _binaryStream.Length)
80+
{
81+
_isReadingBinary = false;
82+
}
83+
84+
return result;
7385
}
7486

7587
public override bool Read()

0 commit comments

Comments
 (0)