diff src/ex_docmd.c @ 29117:c7a8d4bf4d04 v8.2.5079

patch 8.2.5079: DirChanged autocommand may use freed memory Commit: https://github.com/vim/vim/commit/d8c9d32c8932e93008bfd4e8828ed42f4e9f8315 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jun 12 11:49:16 2022 +0100 patch 8.2.5079: DirChanged autocommand may use freed memory Problem: DirChanged autocommand may use freed memory. (Shane-XB Qian) Solution: Free the memory later. (closes https://github.com/vim/vim/issues/10555)
author Bram Moolenaar <Bram@vim.org>
date Sun, 12 Jun 2022 13:00:03 +0200
parents 3de91964bbd6
children ff98d9c228d4
line wrap: on
line diff
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -7525,6 +7525,7 @@ changedir_func(
     int		dir_differs;
     char_u	*acmd_fname = NULL;
     char_u	**pp;
+    char_u	*tofree;
 
     if (new_dir == NULL || allbuf_locked())
 	return FALSE;
@@ -7601,13 +7602,14 @@ changedir_func(
 	pp = &curtab->tp_prevdir;
     else
 	pp = &prev_dir;
-    vim_free(*pp);
+    tofree = *pp;  // new_dir may use this
     *pp = pdir;
 
     post_chdir(scope);
 
     if (dir_differs)
 	apply_autocmds(EVENT_DIRCHANGED, acmd_fname, new_dir, FALSE, curbuf);
+    vim_free(tofree);
     return TRUE;
 }