From 71088fca99af99ff9473de26788638e10fca4ad8 Mon Sep 17 00:00:00 2001 From: 01zulfi <85733202+01zulfi@users.noreply.github.com> Date: Mon, 13 Apr 2026 20:35:57 +0500 Subject: [PATCH] editor: handle crash on inserting incorrect syntax in math nodes (#9690) * editor: handle crash on inserting incorrect syntax in math nodes Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com> * editor: fix 'math error' text shown on newly empty math node Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com> --- .../extensions/math/plugin/math-node-view.ts | 2 ++ .../extensions/math/plugin/renderers/katex.ts | 32 +++++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/packages/editor/src/extensions/math/plugin/math-node-view.ts b/packages/editor/src/extensions/math/plugin/math-node-view.ts index 8704299e7..c04ba0abb 100644 --- a/packages/editor/src/extensions/math/plugin/math-node-view.ts +++ b/packages/editor/src/extensions/math/plugin/math-node-view.ts @@ -276,6 +276,8 @@ export class MathView implements NodeView, ICursorPosObserver { while (this._mathRenderElt.firstChild) { this._mathRenderElt.firstChild.remove(); } + this._mathRenderElt.classList.remove("parse-error"); + this.dom.setAttribute("title", ""); // do not render empty math return; } else { diff --git a/packages/editor/src/extensions/math/plugin/renderers/katex.ts b/packages/editor/src/extensions/math/plugin/renderers/katex.ts index 1a9b2aa75..47241f98f 100644 --- a/packages/editor/src/extensions/math/plugin/renderers/katex.ts +++ b/packages/editor/src/extensions/math/plugin/renderers/katex.ts @@ -32,20 +32,32 @@ async function loadKatex() { export const KatexRenderer: MathRenderer = { inline: (text, element) => { loadKatex().then((katex) => { - katex.render(text, element, { - displayMode: false, - globalGroup: true, - throwOnError: false - }); + try { + katex.render(text, element, { + displayMode: false, + globalGroup: true, + throwOnError: false + }); + } catch (err) { + console.error(err); + element.classList.add("parse-error"); + element.setAttribute("title", err instanceof Error ? err.message : String(err)); + } }); }, block: (text, element) => { loadKatex().then((katex) => { - katex.render(text, element, { - displayMode: true, - globalGroup: true, - throwOnError: false - }); + try { + katex.render(text, element, { + displayMode: true, + globalGroup: true, + throwOnError: false + }); + } catch (err) { + console.error(err); + element.classList.add("parse-error"); + element.setAttribute("title", err instanceof Error ? err.message : String(err)); + } }); } };