From a11780b59fcb6cdd16b15f9fa4de45d7ddfd1b2a Mon Sep 17 00:00:00 2001 From: Enrico Forestieri Date: Sun, 20 Nov 2022 19:01:38 +0100 Subject: [PATCH] Do not allow pasting backslashes in macro names Backslashes are not allowed in macro names and LyX enforces this by not allowing entering them by keyboard. However, it was possible to paste them and this may cause crashes (see bug #12596). --- src/mathed/InsetMathNest.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/mathed/InsetMathNest.cpp b/src/mathed/InsetMathNest.cpp index 54d96d9190..70ef1858c4 100644 --- a/src/mathed/InsetMathNest.cpp +++ b/src/mathed/InsetMathNest.cpp @@ -548,6 +548,15 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd) topaste = cap::selection(n, make_pair(buffer().params().documentClassPtr(), buffer().params().authors())); } + InsetMath const * im = cur.inset().asInsetMath(); + InsetMathMacro const * macro = im ? im->asMacro() : nullptr; + // do not allow pasting a backslash in the name of a macro + if (macro + && macro->displayMode() == InsetMathMacro::DISPLAY_UNFOLDED + && support::contains(topaste, char_type('\\'))) { + LYXERR0("Removing backslash from pasted string"); + topaste = subst(topaste, from_ascii("\\"), docstring()); + } cur.niceInsert(topaste, parseflg, false); cur.clearSelection(); // bug 393 cur.forceBufferUpdate();