Patch 8.0.0493
Problem:    Crash with cd command with very long argument.
Solution:   Check for running out of space. (Dominique pending, closes #1576)
Files:      src/testdir/test_alot.vim, src/testdir/test_cd.vim, src/Makefile,
            src/misc2.c


*** ../vim-8.0.0492/src/testdir/test_alot.vim   2017-03-19 16:09:41.157653918 
+0100
--- src/testdir/test_alot.vim   2017-03-19 21:28:46.113515367 +0100
***************
*** 3,8 ****
--- 3,9 ----
  
  set belloff=all
  source test_assign.vim
+ source test_cd.vim
  source test_changedtick.vim
  source test_cursor_func.vim
  source test_delete.vim
*** ../vim-8.0.0492/src/testdir/test_cd.vim     2017-03-19 21:35:57.194342899 
+0100
--- src/testdir/test_cd.vim     2017-03-19 21:32:54.723687379 +0100
***************
*** 0 ****
--- 1,13 ----
+ " Test for :cd
+ 
+ func Test_cd_large_path()
+   " This used to crash with a heap write overflow.
+   call assert_fails('cd ' . repeat('x', 5000), 'E472:')
+ endfunc
+ 
+ func Test_cd_up_and_down()
+   let path = getcwd()
+   cd ..
+   exe 'cd ' . path
+   call assert_equal(path, getcwd())
+ endfunc
*** ../vim-8.0.0492/src/Makefile        2017-03-19 20:04:05.534628090 +0100
--- src/Makefile        2017-03-19 21:30:40.968673319 +0100
***************
*** 2096,2101 ****
--- 2095,2101 ----
        test_backspace_opt \
        test_breakindent \
        test_bufwintabinfo \
+       test_cd \
        test_cdo \
        test_changedtick \
        test_channel \
*** ../vim-8.0.0492/src/misc2.c 2017-03-16 19:58:19.420253384 +0100
--- src/misc2.c 2017-03-19 21:31:13.644432427 +0100
***************
*** 4637,4649 ****
                if (!vim_isAbsName(stackp->ffs_fix_path)
                                                && search_ctx->ffsc_start_dir)
                {
!                   STRCPY(file_path, search_ctx->ffsc_start_dir);
!                   add_pathsep(file_path);
                }
  
                /* append the fix part of the search path */
!               STRCAT(file_path, stackp->ffs_fix_path);
!               add_pathsep(file_path);
  
  #ifdef FEAT_PATH_EXTRA
                rest_of_wildcards = stackp->ffs_wc_path;
--- 4637,4659 ----
                if (!vim_isAbsName(stackp->ffs_fix_path)
                                                && search_ctx->ffsc_start_dir)
                {
!                   if (STRLEN(search_ctx->ffsc_start_dir) + 1 < MAXPATHL)
!                   {
!                       STRCPY(file_path, search_ctx->ffsc_start_dir);
!                       add_pathsep(file_path);
!                   }
!                   else
!                       goto fail;
                }
  
                /* append the fix part of the search path */
!               if (STRLEN(file_path) + STRLEN(stackp->ffs_fix_path) + 1 < 
MAXPATHL)
!               {
!                   STRCAT(file_path, stackp->ffs_fix_path);
!                   add_pathsep(file_path);
!               }
!               else
!                   goto fail;
  
  #ifdef FEAT_PATH_EXTRA
                rest_of_wildcards = stackp->ffs_wc_path;
***************
*** 4660,4666 ****
                        if (*p > 0)
                        {
                            (*p)--;
!                           file_path[len++] = '*';
                        }
  
                        if (*p == 0)
--- 4670,4679 ----
                        if (*p > 0)
                        {
                            (*p)--;
!                           if (len + 1 < MAXPATHL)
!                               file_path[len++] = '*';
!                           else
!                               goto fail;
                        }
  
                        if (*p == 0)
***************
*** 4688,4694 ****
                     */
                    while (*rest_of_wildcards
                            && !vim_ispathsep(*rest_of_wildcards))
!                       file_path[len++] = *rest_of_wildcards++;
  
                    file_path[len] = NUL;
                    if (vim_ispathsep(*rest_of_wildcards))
--- 4701,4710 ----
                     */
                    while (*rest_of_wildcards
                            && !vim_ispathsep(*rest_of_wildcards))
!                       if (len + 1 < MAXPATHL)
!                           file_path[len++] = *rest_of_wildcards++;
!                       else
!                           goto fail;
  
                    file_path[len] = NUL;
                    if (vim_ispathsep(*rest_of_wildcards))
***************
*** 4749,4757 ****
  
                        /* prepare the filename to be checked for existence
                         * below */
!                       STRCPY(file_path, stackp->ffs_filearray[i]);
!                       add_pathsep(file_path);
!                       STRCAT(file_path, search_ctx->ffsc_file_to_search);
  
                        /*
                         * Try without extra suffix and then with suffixes
--- 4765,4779 ----
  
                        /* prepare the filename to be checked for existence
                         * below */
!                       if (STRLEN(stackp->ffs_filearray[i]) + 1
!                               + STRLEN(search_ctx->ffsc_file_to_search) < 
MAXPATHL)
!                       {
!                           STRCPY(file_path, stackp->ffs_filearray[i]);
!                           add_pathsep(file_path);
!                           STRCAT(file_path, search_ctx->ffsc_file_to_search);
!                       }
!                       else
!                           goto fail;
  
                        /*
                         * Try without extra suffix and then with suffixes
***************
*** 4924,4932 ****
            if (*search_ctx->ffsc_start_dir == 0)
                break;
  
!           STRCPY(file_path, search_ctx->ffsc_start_dir);
!           add_pathsep(file_path);
!           STRCAT(file_path, search_ctx->ffsc_fix_path);
  
            /* create a new stack entry */
            sptr = ff_create_stack_element(file_path,
--- 4946,4960 ----
            if (*search_ctx->ffsc_start_dir == 0)
                break;
  
!           if (STRLEN(search_ctx->ffsc_start_dir) + 1
!                   + STRLEN(search_ctx->ffsc_fix_path) < MAXPATHL)
!           {
!               STRCPY(file_path, search_ctx->ffsc_start_dir);
!               add_pathsep(file_path);
!               STRCAT(file_path, search_ctx->ffsc_fix_path);
!           }
!           else
!               goto fail;
  
            /* create a new stack entry */
            sptr = ff_create_stack_element(file_path,
***************
*** 4940,4945 ****
--- 4968,4974 ----
      }
  #endif
  
+ fail:
      vim_free(file_path);
      return NULL;
  }
*** ../vim-8.0.0492/src/version.c       2017-03-19 21:20:45.893034321 +0100
--- src/version.c       2017-03-19 21:36:06.614273508 +0100
***************
*** 766,767 ****
--- 766,769 ----
  {   /* Add new patch number below this line */
+ /**/
+     493,
  /**/

-- 
Apathy Error: Don't bother striking any key.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            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].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui