[LyX/master] Do not allow pasting backslashes in macro names

Enrico Forestieri forenr at lyx.org
Sun Nov 20 17:11:17 UTC 2022


commit a11780b59fcb6cdd16b15f9fa4de45d7ddfd1b2a
Author: Enrico Forestieri <forenr at lyx.org>
Date:   Sun Nov 20 19:01:38 2022 +0100

    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 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/src/mathed/InsetMathNest.cpp b/src/mathed/InsetMathNest.cpp
index 54d96d9..70ef185 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();


More information about the lyx-cvs mailing list