Skip to content

Commit a66a3d7

Browse files
committed
fix: apply SecureXmlReaderSettings to all XmlReader.Create calls
- Extract XmlReaderSettings as public static readonly field in ParserBase - Apply secure settings to XmpReader and XfaForm XXE vulnerability fixes - Addresses maintainer feedback to centralize configuration
1 parent 6283e29 commit a66a3d7

File tree

3 files changed

+14
-12
lines changed

3 files changed

+14
-12
lines changed

src/iTextSharp.LGPLv2.Core/iTextSharp/text/pdf/XfaForm.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public XfaForm(PdfReader reader)
6767
}
6868

6969
bout.Seek(offset: 0, SeekOrigin.Begin);
70-
using var xtr = XmlReader.Create(bout);
70+
using var xtr = XmlReader.Create(bout, xml.ParserBase.SecureXmlReaderSettings);
7171
_domDocument = new XmlDocument();
7272
_domDocument.PreserveWhitespace = true;
7373
_domDocument.Load(xtr);

src/iTextSharp.LGPLv2.Core/iTextSharp/text/xml/ParserBase.cs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@ namespace iTextSharp.text.xml;
88
/// </summary>
99
public abstract class ParserBase
1010
{
11+
/// <summary>
12+
/// Secure XML reader settings that prevent XXE attacks (CVE-2017-9096)
13+
/// by disabling DTD processing and external entity resolution.
14+
/// </summary>
15+
public static readonly XmlReaderSettings SecureXmlReaderSettings = new XmlReaderSettings
16+
{
17+
DtdProcessing = DtdProcessing.Prohibit,
18+
XmlResolver = null
19+
};
20+
1121
/// <summary>
1222
/// This method gets called when characters are encountered.
1323
/// </summary>
@@ -34,11 +44,7 @@ public void Parse(XmlDocument xDoc)
3444
var xml = xDoc.OuterXml;
3545
var stringReader = new StringReader(xml);
3646

37-
var reader = XmlReader.Create(stringReader, new XmlReaderSettings
38-
{
39-
DtdProcessing = DtdProcessing.Prohibit,
40-
XmlResolver = null
41-
});
47+
var reader = XmlReader.Create(stringReader, SecureXmlReaderSettings);
4248
Parse(reader);
4349
}
4450

@@ -120,11 +126,7 @@ public void Parse(XmlReader reader)
120126
public void Parse(string url)
121127
{
122128
var stringReader = new StringReader(File.ReadAllText(url));
123-
var reader = XmlReader.Create(stringReader, new XmlReaderSettings
124-
{
125-
DtdProcessing = DtdProcessing.Prohibit,
126-
XmlResolver = null
127-
});
129+
var reader = XmlReader.Create(stringReader, SecureXmlReaderSettings);
128130
Parse(reader);
129131
}
130132

src/iTextSharp.LGPLv2.Core/iTextSharp/text/xml/xmp/XmpReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public XmpReader(byte[] bytes)
2828
using var bout = new MemoryStream();
2929
bout.Write(bytes, 0, bytes.Length);
3030
bout.Seek(0, SeekOrigin.Begin);
31-
using var xtr = XmlReader.Create(bout);
31+
using var xtr = XmlReader.Create(bout, ParserBase.SecureXmlReaderSettings);
3232
_domDocument = new XmlDocument();
3333
_domDocument.PreserveWhitespace = true;
3434
_domDocument.Load(xtr);

0 commit comments

Comments
 (0)