From b5c309534e3a7a168437e46c1424ca0d4aedde4d Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Feb 07 2012 13:45:31 +0000 Subject: - patchlevel 407 --- diff --git a/7.3.407 b/7.3.407 new file mode 100644 index 0000000..d5ac133 --- /dev/null +++ b/7.3.407 @@ -0,0 +1,270 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.407 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.3.407 +Problem: ":12verbose call F()" may duplicate text while trying to truncate. + (Thinca) +Solution: Only truncate when there is not enough room. Also check the byte + length of the buffer. +Files: src/buffer.c, src/eval.c, src/ex_getln.c, src/message.c, + src/proto/message.pro + + +*** ../vim-7.3.406/src/buffer.c 2011-12-30 13:39:04.000000000 +0100 +--- src/buffer.c 2012-01-20 18:37:43.000000000 +0100 +*************** +*** 3258,3266 **** + if (maxlen > 0) + { + /* make it shorter by removing a bit in the middle */ +! len = vim_strsize(buf); +! if (len > maxlen) +! trunc_string(buf, buf, maxlen); + } + } + } +--- 3258,3265 ---- + if (maxlen > 0) + { + /* make it shorter by removing a bit in the middle */ +! if (vim_strsize(buf) > maxlen) +! trunc_string(buf, buf, maxlen, IOSIZE); + } + } + } +*** ../vim-7.3.406/src/eval.c 2012-01-10 22:26:12.000000000 +0100 +--- src/eval.c 2012-01-20 20:43:32.000000000 +0100 +*************** +*** 22163,22170 **** + s = tv2string(&argvars[i], &tofree, numbuf2, 0); + if (s != NULL) + { +! trunc_string(s, buf, MSG_BUF_CLEN); +! msg_puts(buf); + vim_free(tofree); + } + } +--- 22163,22174 ---- + s = tv2string(&argvars[i], &tofree, numbuf2, 0); + if (s != NULL) + { +! if (vim_strsize(s) > MSG_BUF_CLEN) +! { +! trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN); +! s = buf; +! } +! msg_puts(s); + vim_free(tofree); + } + } +*************** +*** 22252,22259 **** + s = tv2string(fc->rettv, &tofree, numbuf2, 0); + if (s != NULL) + { +! trunc_string(s, buf, MSG_BUF_CLEN); +! smsg((char_u *)_("%s returning %s"), sourcing_name, buf); + vim_free(tofree); + } + } +--- 22256,22267 ---- + s = tv2string(fc->rettv, &tofree, numbuf2, 0); + if (s != NULL) + { +! if (vim_strsize(s) > MSG_BUF_CLEN) +! { +! trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN); +! s = buf; +! } +! smsg((char_u *)_("%s returning %s"), sourcing_name, s); + vim_free(tofree); + } + } +*** ../vim-7.3.406/src/ex_getln.c 2011-12-08 18:44:47.000000000 +0100 +--- src/ex_getln.c 2012-01-20 18:40:46.000000000 +0100 +*************** +*** 5923,5929 **** + hist[i].hisnum); + if (vim_strsize(hist[i].hisstr) > (int)Columns - 10) + trunc_string(hist[i].hisstr, IObuff + STRLEN(IObuff), +! (int)Columns - 10); + else + STRCAT(IObuff, hist[i].hisstr); + msg_outtrans(IObuff); +--- 5923,5929 ---- + hist[i].hisnum); + if (vim_strsize(hist[i].hisstr) > (int)Columns - 10) + trunc_string(hist[i].hisstr, IObuff + STRLEN(IObuff), +! (int)Columns - 10, IOSIZE - STRLEN(IObuff)); + else + STRCAT(IObuff, hist[i].hisstr); + msg_outtrans(IObuff); +*** ../vim-7.3.406/src/message.c 2012-01-10 22:26:12.000000000 +0100 +--- src/message.c 2012-01-20 20:38:29.000000000 +0100 +*************** +*** 222,236 **** + if (enc_utf8) + /* may have up to 18 bytes per cell (6 per char, up to two + * composing chars) */ +! buf = alloc((room + 2) * 18); + else if (enc_dbcs == DBCS_JPNU) + /* may have up to 2 bytes per cell for euc-jp */ +! buf = alloc((room + 2) * 2); + else + #endif +! buf = alloc(room + 2); + if (buf != NULL) +! trunc_string(s, buf, room); + } + } + return buf; +--- 222,237 ---- + if (enc_utf8) + /* may have up to 18 bytes per cell (6 per char, up to two + * composing chars) */ +! len = (room + 2) * 18; + else if (enc_dbcs == DBCS_JPNU) + /* may have up to 2 bytes per cell for euc-jp */ +! len = (room + 2) * 2; + else + #endif +! len = room + 2; +! buf = alloc(len); + if (buf != NULL) +! trunc_string(s, buf, room, len); + } + } + return buf; +*************** +*** 241,250 **** + * "s" and "buf" may be equal. + */ + void +! trunc_string(s, buf, room) + char_u *s; + char_u *buf; + int room; + { + int half; + int len; +--- 242,252 ---- + * "s" and "buf" may be equal. + */ + void +! trunc_string(s, buf, room, buflen) + char_u *s; + char_u *buf; + int room; ++ int buflen; + { + int half; + int len; +*************** +*** 257,263 **** + len = 0; + + /* First part: Start of the string. */ +! for (e = 0; len < half; ++e) + { + if (s[e] == NUL) + { +--- 259,265 ---- + len = 0; + + /* First part: Start of the string. */ +! for (e = 0; len < half && e < buflen; ++e) + { + if (s[e] == NUL) + { +*************** +*** 274,280 **** + if (has_mbyte) + for (n = (*mb_ptr2len)(s + e); --n > 0; ) + { +! ++e; + buf[e] = s[e]; + } + #endif +--- 276,283 ---- + if (has_mbyte) + for (n = (*mb_ptr2len)(s + e); --n > 0; ) + { +! if (++e == buflen) +! break; + buf[e] = s[e]; + } + #endif +*************** +*** 319,326 **** + } + + /* Set the middle and copy the last part. */ +! mch_memmove(buf + e, "...", (size_t)3); +! STRMOVE(buf + e + 3, s + i); + } + + /* +--- 322,340 ---- + } + + /* Set the middle and copy the last part. */ +! if (e + 3 < buflen) +! { +! mch_memmove(buf + e, "...", (size_t)3); +! len = STRLEN(s + i) + 1; +! if (len >= buflen - e - 3) +! len = buflen - e - 3 - 1; +! mch_memmove(buf + e + 3, s + i, len); +! buf[e + 3 + len - 1] = NUL; +! } +! else +! { +! buf[e - 1] = NUL; // make sure it is truncated +! } + } + + /* +*** ../vim-7.3.406/src/proto/message.pro 2011-01-17 20:08:03.000000000 +0100 +--- src/proto/message.pro 2012-01-20 18:51:19.000000000 +0100 +*************** +*** 4,10 **** + int msg_attr __ARGS((char_u *s, int attr)); + int msg_attr_keep __ARGS((char_u *s, int attr, int keep)); + char_u *msg_strtrunc __ARGS((char_u *s, int force)); +! void trunc_string __ARGS((char_u *s, char_u *buf, int room)); + void reset_last_sourcing __ARGS((void)); + void msg_source __ARGS((int attr)); + int emsg_not_now __ARGS((void)); +--- 4,10 ---- + int msg_attr __ARGS((char_u *s, int attr)); + int msg_attr_keep __ARGS((char_u *s, int attr, int keep)); + char_u *msg_strtrunc __ARGS((char_u *s, int force)); +! void trunc_string __ARGS((char_u *s, char_u *buf, int room, int buflen)); + void reset_last_sourcing __ARGS((void)); + void msg_source __ARGS((int attr)); + int emsg_not_now __ARGS((void)); +*** ../vim-7.3.406/src/version.c 2012-01-20 17:57:47.000000000 +0100 +--- src/version.c 2012-01-20 20:42:23.000000000 +0100 +*************** +*** 716,717 **** +--- 716,719 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 407, + /**/ + +-- +Hanson's Treatment of Time: + There are never enough hours in a day, but always too + many days before Saturday. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- 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 ///