[xml] WEB-74583 Ensure that the formatter won't freeze if an injected block is malformed.

(cherry picked from commit 3632833c30ede97c8ca3fe297d9162ca401dabb3)

IJ-CR-175315

GitOrigin-RevId: 4c93ec7f69e5ff36ff59935ab777770cc7b27039
This commit is contained in:
Piotr Tomiak
2025-09-11 10:06:35 +02:00
committed by intellij-monorepo-bot
parent 221b3c95ab
commit 7bc31e15a7

View File

@@ -158,6 +158,14 @@ public abstract class InjectedLanguageBlockBuilder {
final FormattingModelBuilder builder = LanguageFormatting.INSTANCE.forContext(childLanguage, childPsi);
LOG.assertTrue(builder != null);
final FormattingModel childModel = builder.createModel(FormattingContext.create(childPsi, getSettings()));
if (!childPsi.getTextRange().contains(childModel.getRootBlock().getTextRange())) {
LOG.error("Invalid formatter model created for injected language fragment. Node rage: " + childPsi.getTextRange() +
"; created model range: " + childModel.getRootBlock().getTextRange() +
"; builder: " + builder.getClass().getName() +
"; injected language: " + childLanguage.getID() +
"; file: " + childPsi.getContainingFile().getName());
return;
}
Block original = childModel.getRootBlock();
if (original.isLeaf() && !injectedNode.getText().trim().isEmpty() || !original.getSubBlocks().isEmpty()) {