[LyX/master] Fix bug #12633

Enrico Forestieri forenr at lyx.org
Fri Jan 27 18:38:36 UTC 2023


commit 16e67d4ebb312a838ca6be4f9b3b43ec5ea212a4
Author: Enrico Forestieri <forenr at lyx.org>
Date:   Fri Jan 27 20:34:24 2023 +0100

    Fix bug #12633
    
    Avoid recursion when validating a macro that is defined recursively.
    This avoids a crash but the latex engine will choke on it, of course.
---
 src/mathed/InsetMathMacro.cpp |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/mathed/InsetMathMacro.cpp b/src/mathed/InsetMathMacro.cpp
index 1e36f5a..aba4ab7 100644
--- a/src/mathed/InsetMathMacro.cpp
+++ b/src/mathed/InsetMathMacro.cpp
@@ -988,8 +988,16 @@ void InsetMathMacro::validate(LaTeXFeatures & features) const
 			MathData ar(const_cast<Buffer *>(&buffer()));
 			MacroData const * data = buffer().getMacro(name());
 			if (data) {
-				asArray(data->definition(), ar);
-				ar.validate(features);
+				// Avoid recursion on a recursive macro definition
+				docstring const & def = data->definition();
+				int pos = tokenPos(def, '\\', name());
+				char_type c = def.at(pos + name().size());
+				if (pos < 0 || (name().size() > 1 &&
+						((c >= 'a' && c <= 'z') ||
+						 (c >= 'A' && c <= 'Z')))) {
+					asArray(def, ar);
+					ar.validate(features);
+				}
 			}
 		}
 	}


More information about the lyx-cvs mailing list