Skip to content
Merged
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
2 changes: 1 addition & 1 deletion src/iTextSharp.LGPLv2.Core/iTextSharp/text/pdf/XfaForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public XfaForm(PdfReader reader)
}

bout.Seek(offset: 0, SeekOrigin.Begin);
using var xtr = XmlReader.Create(bout);
using var xtr = XmlReader.Create(bout, xml.ParserBase.SecureXmlReaderSettings);
_domDocument = new XmlDocument();
_domDocument.PreserveWhitespace = true;
_domDocument.Load(xtr);
Expand Down
16 changes: 13 additions & 3 deletions src/iTextSharp.LGPLv2.Core/iTextSharp/text/xml/ParserBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@ namespace iTextSharp.text.xml;
/// </summary>
public abstract class ParserBase
{
/// <summary>
/// Secure XML reader settings that prevent XXE attacks (CVE-2017-9096)
/// by disabling DTD processing and external entity resolution.
/// </summary>
public static readonly XmlReaderSettings SecureXmlReaderSettings = new XmlReaderSettings
{
DtdProcessing = DtdProcessing.Prohibit,
XmlResolver = null
};

/// <summary>
/// This method gets called when characters are encountered.
/// </summary>
Expand All @@ -34,7 +44,7 @@ public void Parse(XmlDocument xDoc)
var xml = xDoc.OuterXml;
var stringReader = new StringReader(xml);

var reader = XmlReader.Create(stringReader);
var reader = XmlReader.Create(stringReader, SecureXmlReaderSettings);
Parse(reader);
}

Expand Down Expand Up @@ -116,7 +126,7 @@ public void Parse(XmlReader reader)
public void Parse(string url)
{
var stringReader = new StringReader(File.ReadAllText(url));
var reader = XmlReader.Create(stringReader);
var reader = XmlReader.Create(stringReader, SecureXmlReaderSettings);
Parse(reader);
}

Expand All @@ -131,4 +141,4 @@ public abstract void StartElement(string uri,
string lname,
string name,
INullValueDictionary<string, string> attrs);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public XmpReader(byte[] bytes)
using var bout = new MemoryStream();
bout.Write(bytes, 0, bytes.Length);
bout.Seek(0, SeekOrigin.Begin);
using var xtr = XmlReader.Create(bout);
using var xtr = XmlReader.Create(bout, ParserBase.SecureXmlReaderSettings);
_domDocument = new XmlDocument();
_domDocument.PreserveWhitespace = true;
_domDocument.Load(xtr);
Expand Down
Loading