File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -163,6 +163,13 @@ class Constants extends \SimpleSAML\XML\Constants
163163
164164 public const string XMLENC_EXI = 'http://www.w3.org/2009/xmlenc11#EXI ' ;
165165
166+ /**
167+ * Library default limits
168+ */
169+ public const int MAX_TRANSFORMS = 2 ;
170+
171+ public const int MAX_XPATH_NAMESPACES = 20 ;
172+
166173
167174 /** @var string[] */
168175 public static array $ KEY_WRAP_ALGORITHMS = [
Original file line number Diff line number Diff line change 55namespace SimpleSAML \XMLSecurity \XML ;
66
77use DOMElement ;
8+ use SimpleSAML \XMLSecurity \Assert \Assert ;
89use SimpleSAML \XMLSecurity \Constants as C ;
910use SimpleSAML \XMLSecurity \Exception \CanonicalizationFailedException ;
1011use SimpleSAML \XMLSecurity \Exception \ReferenceValidationFailedException ;
@@ -120,9 +121,18 @@ public function processTransforms(
120121 Transforms $ transforms ,
121122 DOMElement $ data ,
122123 ): string {
124+ Assert::maxCount (
125+ $ transforms ->getTransform (),
126+ C::MAX_TRANSFORMS ,
127+ ReferenceValidationFailedException::class,
128+ 'Too many transforms. ' ,
129+ );
130+
123131 $ canonicalMethod = C::C14N_EXCLUSIVE_WITHOUT_COMMENTS ;
124132 $ arXPath = null ;
125133 $ prefixList = null ;
134+ $ xpCache = XPath::getXPath ($ data );
135+
126136 foreach ($ transforms ->getTransform () as $ transform ) {
127137 $ canonicalMethod = $ transform ->getAlgorithm ()->getValue ();
128138 switch ($ canonicalMethod ) {
@@ -144,7 +154,6 @@ public function processTransforms(
144154 $ arXPath ['query ' ] = '(.//. | .//@* | .//namespace::*)[ ' . $ xpathValue . '] ' ;
145155 $ arXpath ['namespaces ' ] = $ xpath ->getNamespaces ();
146156
147- $ xpCache = XPath::getXPath ($ data );
148157 $ nslist = $ xpCache ->query ('./namespace::* ' , $ xpath ->toXML ());
149158 Assert::lessThanEq (
150159 $ nslist ->count (),
You can’t perform that action at this time.
0 commit comments