From 987a4aaffd9100ff37d46405d4756bd80755759f Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Wed, 9 Nov 2016 16:26:59 +0300 Subject: [PATCH] IDEA-144646 Billion laughs in .idea/misc.xml: project model --- platform/projectModel-impl/projectModel-impl.iml | 1 + .../projectModel-impl/src/com/intellij/util/jdom.kt | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/platform/projectModel-impl/projectModel-impl.iml b/platform/projectModel-impl/projectModel-impl.iml index 30368b2eb8a0..9c361c7c6638 100644 --- a/platform/projectModel-impl/projectModel-impl.iml +++ b/platform/projectModel-impl/projectModel-impl.iml @@ -14,5 +14,6 @@ + \ No newline at end of file diff --git a/platform/projectModel-impl/src/com/intellij/util/jdom.kt b/platform/projectModel-impl/src/com/intellij/util/jdom.kt index f1e45ae5c543..19f92aa75e38 100644 --- a/platform/projectModel-impl/src/com/intellij/util/jdom.kt +++ b/platform/projectModel-impl/src/com/intellij/util/jdom.kt @@ -19,12 +19,16 @@ import com.intellij.openapi.util.JDOMUtil import com.intellij.openapi.util.io.BufferExposingByteArrayOutputStream import com.intellij.reference.SoftReference import com.intellij.util.text.CharSequenceReader +import com.sun.org.apache.xerces.internal.impl.Constants +import org.apache.xerces.util.SecurityManager import org.jdom.Document import org.jdom.Element import org.jdom.filter.ElementFilter import org.jdom.input.SAXBuilder +import org.jdom.input.SAXHandler import org.xml.sax.EntityResolver import org.xml.sax.InputSource +import org.xml.sax.XMLReader import java.io.CharArrayReader import java.io.InputStream import java.io.Reader @@ -37,7 +41,14 @@ private fun getSaxBuilder(): SAXBuilder { val reference = cachedSaxBuilder.get() var saxBuilder = SoftReference.dereference(reference) if (saxBuilder == null) { - saxBuilder = SAXBuilder() + saxBuilder = object : SAXBuilder() { + override fun configureParser(parser: XMLReader, contentHandler: SAXHandler?) { + super.configureParser(parser, contentHandler) + val manager = SecurityManager() + manager.entityExpansionLimit = 10000 + parser.setProperty(Constants.XERCES_PROPERTY_PREFIX + Constants.SECURITY_MANAGER_PROPERTY, manager) + } + } saxBuilder.ignoringBoundaryWhitespace = true saxBuilder.ignoringElementContentWhitespace = true saxBuilder.entityResolver = EntityResolver { publicId, systemId -> InputSource(CharArrayReader(ArrayUtil.EMPTY_CHAR_ARRAY)) }