From 7bc31e15a7b9e5373deda198ad7a46b3a0fe160c Mon Sep 17 00:00:00 2001 From: Piotr Tomiak Date: Thu, 11 Sep 2025 10:06:35 +0200 Subject: [PATCH] [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 --- .../formatter/common/InjectedLanguageBlockBuilder.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/platform/code-style-impl/src/com/intellij/psi/formatter/common/InjectedLanguageBlockBuilder.java b/platform/code-style-impl/src/com/intellij/psi/formatter/common/InjectedLanguageBlockBuilder.java index 4f7a962c226f..65d7ea4e26ef 100644 --- a/platform/code-style-impl/src/com/intellij/psi/formatter/common/InjectedLanguageBlockBuilder.java +++ b/platform/code-style-impl/src/com/intellij/psi/formatter/common/InjectedLanguageBlockBuilder.java @@ -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()) {