У меня есть система, которая позволяет пользователю предоставлять собственный XSLT для применения к некоторым данным, которые были извлечены, чтобы указать, как эти данные должны быть представлены. Однако, если пользователь включает код в XSLT, эквивалентный:
<xsl:template match="/">
<xsl:element name="data">
<xsl:apply-templates select="." />
</xsl:element>
</xsl:template>
это приводит к тому, что .NET бесконечно рекурсивно пытается обработать его, и выдает ошибку переполнения стека. Я должен быть в состоянии перехватить это до того, как приложение выйдет из строя, поскольку извлекаемые данные иногда занимают довольно много времени, и при этом данные теряются.
Есть ли способ сделать это? Я знаю, что теоретически возможно идентифицировать любые вхождения xsl: apply-templates с помощью "." в атрибуте select, но это не единственный способ бесконечной рекурсии, мне нужен способ ее общего перехвата.