Patch 8.2.4831
Problem:    Crash when using maparg() and unmapping simplified keys.
Solution:   Do not keep a mapblock pointer. (closes #10294)
Files:      src/map.c, src/testdir/test_map_functions.vim


*** ../vim-8.2.4830/src/map.c   2022-04-26 12:29:38.960587911 +0100
--- src/map.c   2022-04-26 21:21:44.831295679 +0100
***************
*** 2325,2332 ****
      int               mode;
      int               abbr = FALSE;
      int               get_dict = FALSE;
!     mapblock_T        *mp;
!     mapblock_T        *mp_simplified = NULL;
      int               buffer_local;
      int               flags = REPTERM_FROM_PART | REPTERM_DO_LT;
  
--- 2325,2331 ----
      int               mode;
      int               abbr = FALSE;
      int               get_dict = FALSE;
!     mapblock_T        *mp = NULL;
      int               buffer_local;
      int               flags = REPTERM_FROM_PART | REPTERM_DO_LT;
  
***************
*** 2362,2369 ****
      {
        // When the lhs is being simplified the not-simplified keys are
        // preferred for printing, like in do_map().
-       // The "rhs" and "buffer_local" values are not expected to change.
-       mp_simplified = mp;
        (void)replace_termcodes(keys, &alt_keys_buf,
                                        flags | REPTERM_NO_SIMPLIFY, NULL);
        rhs = check_map(alt_keys_buf, mode, exact, FALSE, abbr, &mp,
--- 2361,2366 ----
***************
*** 2384,2390 ****
      }
      else if (rettv_dict_alloc(rettv) != FAIL && rhs != NULL)
        mapblock2dict(mp, rettv->vval.v_dict,
!                   did_simplify ? mp_simplified->m_keys : NULL, buffer_local);
  
      vim_free(keys_buf);
      vim_free(alt_keys_buf);
--- 2381,2387 ----
      }
      else if (rettv_dict_alloc(rettv) != FAIL && rhs != NULL)
        mapblock2dict(mp, rettv->vval.v_dict,
!                         did_simplify ? keys_simplified : NULL, buffer_local);
  
      vim_free(keys_buf);
      vim_free(alt_keys_buf);
*** ../vim-8.2.4830/src/testdir/test_map_functions.vim  2022-04-25 
14:37:42.410308492 +0100
--- src/testdir/test_map_functions.vim  2022-04-26 21:21:44.831295679 +0100
***************
*** 74,79 ****
--- 74,85 ----
    call assert_equal(['{', 'w', 's'], [d.lhs, d.rhs, d.mode])
    sunmap {
  
+   map <C-I> foo
+   unmap <Tab>
+   " This used to cause a segfault
+   call maparg('<C-I>', '', 0, 1)
+   unmap <C-I>
+ 
    map abc <Nop>
    call assert_equal("<Nop>", maparg('abc'))
    unmap abc
***************
*** 82,87 ****
--- 88,94 ----
    let d = maparg('esc', 'i', 1, 1)
    call assert_equal(['esc', "\<C-V>\<C-V>\<Esc>", '!'], [d.lhs, d.rhs, 
d.mode])
    abclear
+   unlet d
  endfunc
  
  def Test_vim9_maparg()
*** ../vim-8.2.4830/src/version.c       2022-04-26 18:52:17.605206275 +0100
--- src/version.c       2022-04-26 21:32:55.634411586 +0100
***************
*** 748,749 ****
--- 748,751 ----
  {   /* Add new patch number below this line */
+ /**/
+     4831,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
63. You start using smileys in your snail mail.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
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/20220426203758.E5D221C0A1E%40moolenaar.net.

Raspunde prin e-mail lui