patch 9.0.2103: recursive callback may cause issues on some archs

Commit: 
https://github.com/vim/vim/commit/2076463e383901cef44685aaf4b63e4306444f9e
Author: Christian Brabandt <[email protected]>
Date:   Sun Nov 12 16:59:29 2023 +0100

    patch 9.0.2103: recursive callback may cause issues on some archs
    
    Problem:  recursive callback may cause issues on some archs
    Solution: Decrease the limit drastically to 20
    
    Recursive callback limit causes problems on some architectures
    
    Since commit 47510f3d6598a1218958c03ed11337a43b73f48d we have a test
    that causes a recursive popup callback function to be executed. However
    it seems the current limit of 'maxfuncdepth' option value is still too
    recursive for some 32bit architectures (e.g. 32bit ARM).
    
    So instead of allowing a default limit of 100 (default value for
    'maxfuncdepth'), let's reduce this limit to 20. I don't think there is a
    use case where one would need such a high recursive callback limit and a
    limit of 20 seems reasonable (although it is currently hard-coded).
    
    closes: #13495
    closes: #13502
    
    Signed-off-by: Christian Brabandt <[email protected]>

diff --git a/runtime/doc/message.txt b/runtime/doc/message.txt
index 240f2c432..f8a9fdfa6 100644
--- a/runtime/doc/message.txt
+++ b/runtime/doc/message.txt
@@ -1,4 +1,4 @@
-*message.txt*   For Vim version 9.0.  Last change: 2023 May 24
+*message.txt*   For Vim version 9.0.  Last change: 2023 Nov 08
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -135,6 +135,8 @@ This happens when an Ex command executes an Ex command that 
executes an Ex
 command, etc.  The limit is 200 or the value of 'maxfuncdepth', whatever is
 larger.  When it's more there probably is an endless loop.  Probably a
 |:execute| or |:source| command is involved.
+Can also happen with a recursive callback function (|job-callback|).
+A limit of 20 is used here.
 
                                                        *E254*
   Cannot allocate color {name} ~
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 76efc5d41..77efbd63f 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -5486,7 +5486,6 @@ A jump table for the options with a short description can 
be found at |Q_op|.
        Increasing this limit above 200 also changes the maximum for Ex
        command recursion, see |E169|.
        See also |:function|.
-       Also used for maximum depth of callback functions.
 
                                                *'maxmapdepth'* *'mmd'* *E223*
 'maxmapdepth' 'mmd'    number  (default 1000)
diff --git a/src/userfunc.c b/src/userfunc.c
index 5ef0f7d9c..33e73a9a5 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -14,6 +14,9 @@
 #include "vim.h"
 
 #if defined(FEAT_EVAL) || defined(PROTO)
+
+#define MAX_CALLBACK_DEPTH 20
+
 /*
  * All user-defined functions are found in this hashtable.
  */
@@ -3584,7 +3587,7 @@ call_callback(
     if (callback->cb_name == NULL || *callback->cb_name == NUL)
        return FAIL;
 
-    if (callback_depth > p_mfd)
+    if (callback_depth > MAX_CALLBACK_DEPTH)
     {
        emsg(_(e_command_too_recursive));
        return FAIL;
diff --git a/src/version.c b/src/version.c
index 238e3df10..8afbc403d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2103,
 /**/
     2102,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1r2D71-003NT6-Hg%40256bit.org.

Raspunde prin e-mail lui