From 0536f6943fc1b0ad04cb34885ec504243b3bf24f Mon Sep 17 00:00:00 2001 From: JackChen <17683835261@163.com> Date: Tue, 3 Feb 2026 20:09:41 +0800 Subject: [PATCH 1/4] 1 --- TeXmacs/tests/tmu/201_71.tmu | 22 ++++++++++++++++++++++ src/Typeset/Env/env_exec.cpp | 7 ++++++- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 TeXmacs/tests/tmu/201_71.tmu diff --git a/TeXmacs/tests/tmu/201_71.tmu b/TeXmacs/tests/tmu/201_71.tmu new file mode 100644 index 0000000000..222aa1f48c --- /dev/null +++ b/TeXmacs/tests/tmu/201_71.tmu @@ -0,0 +1,22 @@ +> + +> + +<\body> + <\hide-preamble> + + |>> + + + + <\ignore> + \; + + + +<\initial> + <\collection> + + + + diff --git a/src/Typeset/Env/env_exec.cpp b/src/Typeset/Env/env_exec.cpp index 285d78fd16..a3ee82760d 100644 --- a/src/Typeset/Env/env_exec.cpp +++ b/src/Typeset/Env/env_exec.cpp @@ -560,6 +560,7 @@ edit_env_rep::exec (tree t) { return exec_frame_inverse (t); default: + if (L (t) == UNINIT) return t; if (L (t) < START_EXTENSIONS) { int i, n= N (t); // cout << "Executing " << t << "\n"; @@ -852,7 +853,11 @@ edit_env_rep::exec_value (tree t) { if (N (t) < 1) return tree (ERROR, "bad value"); tree r= exec (t[0]); if (is_compound (r)) return tree (ERROR, "bad value"); - return exec (read (r->label)); + string name= r->label; + if (!provides (name)) return tree (UNINIT); + tree value= read (name); + if (L (value) == UNINIT) return tree (UNINIT); + return exec (value); } tree From 228f98d522b325798d27b22b8fa2f807e46a1b87 Mon Sep 17 00:00:00 2001 From: JackChen <17683835261@163.com> Date: Tue, 3 Feb 2026 20:44:51 +0800 Subject: [PATCH 2/4] 2 --- devel/201_71.md | 9 +++++++++ src/Typeset/Env/env_exec.cpp | 8 ++++---- 2 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 devel/201_71.md diff --git a/devel/201_71.md b/devel/201_71.md new file mode 100644 index 0000000000..cedcb0fb18 --- /dev/null +++ b/devel/201_71.md @@ -0,0 +1,9 @@ +# [201_70] 修复导言区调用未定义的宏导致软件crash问题 + +## 如何测试 +1. 打开 git/mogan/TeXmacs/tests/tmu/201_71.tmu 文件 +2. `Ctrl+Shift+p`进入导言区 +3. 鼠标光标移动到`backcolor`后回车应该不会导致软件闪退问题 + + + diff --git a/src/Typeset/Env/env_exec.cpp b/src/Typeset/Env/env_exec.cpp index a3ee82760d..1075e93be3 100644 --- a/src/Typeset/Env/env_exec.cpp +++ b/src/Typeset/Env/env_exec.cpp @@ -660,7 +660,7 @@ edit_env_rep::exec_with (tree t) { write_update (vars[i], newv[i]); tree r= exec (t[n - 1]); for (i= k - 1; i >= 0; i--) - write_update (vars[i], oldv[i]); + if (L (oldv[i]) != UNINIT) write_update (vars[i], oldv[i]); tree u (WITH, n); for (i= 0; i < k; i++) { @@ -854,9 +854,9 @@ edit_env_rep::exec_value (tree t) { tree r= exec (t[0]); if (is_compound (r)) return tree (ERROR, "bad value"); string name= r->label; - if (!provides (name)) return tree (UNINIT); + if (!provides (name)) return ""; tree value= read (name); - if (L (value) == UNINIT) return tree (UNINIT); + if (L (value) == UNINIT) return ""; return exec (value); } @@ -2672,7 +2672,7 @@ edit_env_rep::exec_until_with (tree t, path p, string var, int level) { return true; } for (i= k - 1; i >= 0; i--) - write_update (vars[i], oldv[i]); + if (L (oldv[i]) != UNINIT) write_update (vars[i], oldv[i]); STACK_DELETE_ARRAY (vars); STACK_DELETE_ARRAY (oldv); STACK_DELETE_ARRAY (newv); From a148807836370aafe4794ee3d82cc8729211e5de Mon Sep 17 00:00:00 2001 From: JackChen <17683835261@163.com> Date: Tue, 3 Feb 2026 20:45:44 +0800 Subject: [PATCH 3/4] 3 --- devel/201_71.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devel/201_71.md b/devel/201_71.md index cedcb0fb18..97c9e5762f 100644 --- a/devel/201_71.md +++ b/devel/201_71.md @@ -1,4 +1,4 @@ -# [201_70] 修复导言区调用未定义的宏导致软件crash问题 +# [201_71] 修复导言区调用未定义的宏导致软件crash问题 ## 如何测试 1. 打开 git/mogan/TeXmacs/tests/tmu/201_71.tmu 文件 From efb5a279caff3c61ea744cfdaf9f41604de8fc5b Mon Sep 17 00:00:00 2001 From: JackChen <17683835261@163.com> Date: Wed, 4 Feb 2026 16:03:20 +0800 Subject: [PATCH 4/4] 4 --- TeXmacs/tests/tmu/201_71.tmu | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/TeXmacs/tests/tmu/201_71.tmu b/TeXmacs/tests/tmu/201_71.tmu index 222aa1f48c..751d7d802b 100644 --- a/TeXmacs/tests/tmu/201_71.tmu +++ b/TeXmacs/tests/tmu/201_71.tmu @@ -1,17 +1,13 @@ -> +> > <\body> <\hide-preamble> - - |>> - + |>> - <\ignore> - \; - + 1111 <\initial>