суббота, 8 сентября 2012 г., 17:00:45 UTC+4 пользователь Bram Moolenaar написал:
> It might be easier to use vim_strncpy(). And vim_strcat() where
> appropriate. These always add a NUL and check the size of the buffer.
It is not needed: the following fixes garbage without using alloc_clear:
# HG changeset patch
# User ZyX <[email protected]>
# Date 1348347789 -14400
# Node ID 4c1027d39c5857cfc87a1916785f2f73ad012399
# Parent 04592728474a35794ae6397a0b90f2989864fb66
Fix crash with long filenames, without alloc_clear
diff -r 04592728474a -r 4c1027d39c58 src/buffer.c
--- a/src/buffer.c Fri Sep 21 14:54:05 2012 +0200
+++ b/src/buffer.c Sun Sep 23 01:02:44 2012 +0400
@@ -3047,6 +3047,7 @@
buffer = alloc(IOSIZE);
if (buffer == NULL)
return;
+ buffer[IOSIZE] = NUL;
if (fullname > 1) /* 2 CTRL-G: include buffer number */
{
@@ -3058,7 +3059,7 @@
*p++ = '"';
if (buf_spname(curbuf) != NULL)
- STRCPY(p, buf_spname(curbuf));
+ STRNCPY(p, buf_spname(curbuf), IOSIZE - (p-buffer) - 1);
else
{
if (!fullname && curbuf->b_fname != NULL)
--
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
*** /tmp/extdiff.yZireA/vim.04592728474a/src/buffer.c 2012-09-23 01:05:27.000000000 +0400
--- vim.4c1027d39c58/src/buffer.c 2012-09-23 01:05:27.000000000 +0400
***************
*** 3047,3052 ****
--- 3047,3053 ----
buffer = alloc(IOSIZE);
if (buffer == NULL)
return;
+ buffer[IOSIZE] = NUL;
if (fullname > 1) /* 2 CTRL-G: include buffer number */
{
***************
*** 3058,3064 ****
*p++ = '"';
if (buf_spname(curbuf) != NULL)
! STRCPY(p, buf_spname(curbuf));
else
{
if (!fullname && curbuf->b_fname != NULL)
--- 3059,3065 ----
*p++ = '"';
if (buf_spname(curbuf) != NULL)
! STRNCPY(p, buf_spname(curbuf), IOSIZE - (p-buffer) - 1);
else
{
if (!fullname && curbuf->b_fname != NULL)