[vim] - patchlevel 539
Karsten Hopp
karsten at fedoraproject.org
Sun Nov 30 16:55:20 UTC 2014
commit 2a9293c18323cb3228287a3b9c110c7a567f6733
Author: Karsten Hopp <karsten at redhat.com>
Date: Sun Nov 30 18:00:12 2014 +0100
- patchlevel 539
7.4.539 | 258 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 258 insertions(+), 0 deletions(-)
---
diff --git a/7.4.539 b/7.4.539
new file mode 100644
index 0000000..b6e42ca
--- /dev/null
+++ b/7.4.539
@@ -0,0 +1,258 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.4.539
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.539 (after 7.4.530)
+Problem: Crash when computing buffer count. Problem with range for user
+ commands. Line range wrong in Visual area.
+Solution: Avoid segfault in compute_buffer_local_count(). Check for
+ CMD_USER when checking type of range. (Marcin Szamotulski)
+Files: runtime/doc/windows.txt, src/ex_docmd.c
+
+
+*** ../vim-7.4.538/runtime/doc/windows.txt 2014-11-27 16:22:42.738413084 +0100
+--- runtime/doc/windows.txt 2014-11-30 14:34:30.241835431 +0100
+***************
+*** 1026,1032 ****
+ Actually, the buffer isn't completely deleted, it is removed
+ from the buffer list |unlisted-buffer| and option values,
+ variables and mappings/abbreviations for the buffer are
+! cleared.
+
+ :bdelete[!] {bufname} *E93* *E94*
+ Like ":bdelete[!] [N]", but buffer given by name. Note that a
+--- 1029,1039 ----
+ Actually, the buffer isn't completely deleted, it is removed
+ from the buffer list |unlisted-buffer| and option values,
+ variables and mappings/abbreviations for the buffer are
+! cleared. Examples: >
+! :.,$-bdelete " delete buffers from the current one to
+! " last but one
+! :%bdelete " delete all buffers
+! <
+
+ :bdelete[!] {bufname} *E93* *E94*
+ Like ":bdelete[!] [N]", but buffer given by name. Note that a
+***************
+*** 1050,1056 ****
+ Like |:bdelete|, but really delete the buffer. Everything
+ related to the buffer is lost. All marks in this buffer
+ become invalid, option settings are lost, etc. Don't use this
+! unless you know what you are doing.
+
+ :[N]bun[load][!] *:bun* *:bunload* *E515*
+ :bun[load][!] [N]
+--- 1057,1067 ----
+ Like |:bdelete|, but really delete the buffer. Everything
+ related to the buffer is lost. All marks in this buffer
+ become invalid, option settings are lost, etc. Don't use this
+! unless you know what you are doing. Examples: >
+! :.+,$bwipeout " wipe out all buffers after the current
+! " one
+! :%bwipeout " wipe out all buffers
+! <
+
+ :[N]bun[load][!] *:bun* *:bunload* *E515*
+ :bun[load][!] [N]
+*** ../vim-7.4.538/src/ex_docmd.c 2014-11-27 18:32:58.528564550 +0100
+--- src/ex_docmd.c 2014-11-30 14:40:28.521847466 +0100
+***************
+*** 1694,1699 ****
+--- 1694,1700 ----
+ int offset;
+ {
+ buf_T *buf;
++ buf_T *nextbuf;
+ int count = offset;
+
+ buf = firstbuf;
+***************
+*** 1701,1715 ****
+ buf = buf->b_next;
+ while (count != 0)
+ {
+! count += (count < 0) ? 1 : -1;
+! if (buf->b_prev == NULL)
+ break;
+! buf = (count < 0) ? buf->b_prev : buf->b_next;
+ if (addr_type == ADDR_LOADED_BUFFERS)
+ /* skip over unloaded buffers */
+! while (buf->b_prev != NULL && buf->b_ml.ml_mfp == NULL)
+! buf = (count < 0) ? buf->b_prev : buf->b_next;
+ }
+ return buf->b_fnum;
+ }
+
+--- 1702,1731 ----
+ buf = buf->b_next;
+ while (count != 0)
+ {
+! count += (offset < 0) ? 1 : -1;
+! nextbuf = (offset < 0) ? buf->b_prev : buf->b_next;
+! if (nextbuf == NULL)
+ break;
+! buf = nextbuf;
+ if (addr_type == ADDR_LOADED_BUFFERS)
+ /* skip over unloaded buffers */
+! while (buf->b_ml.ml_mfp == NULL)
+! {
+! nextbuf = (offset < 0) ? buf->b_prev : buf->b_next;
+! if (nextbuf == NULL)
+! break;
+! buf = nextbuf;
+! }
+ }
++ /* we might have gone too far, last buffer is not loadedd */
++ if (addr_type == ADDR_LOADED_BUFFERS)
++ while (buf->b_ml.ml_mfp == NULL)
++ {
++ nextbuf = (offset >= 0) ? buf->b_prev : buf->b_next;
++ if (nextbuf == NULL)
++ break;
++ buf = nextbuf;
++ }
+ return buf->b_fnum;
+ }
+
+***************
+*** 2113,2119 ****
+ * is equal to the lower.
+ */
+
+! if (ea.cmdidx != CMD_SIZE)
+ ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
+ else
+ ea.addr_type = ADDR_LINES;
+--- 2129,2135 ----
+ * is equal to the lower.
+ */
+
+! if (ea.cmdidx != CMD_USER && ea.cmdidx != CMD_SIZE)
+ ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
+ else
+ ea.addr_type = ADDR_LINES;
+***************
+*** 2153,2158 ****
+--- 2169,2175 ----
+ {
+ if (*ea.cmd == '%') /* '%' - all lines */
+ {
++ buf_T *buf;
+ ++ea.cmd;
+ switch (ea.addr_type)
+ {
+***************
+*** 2160,2168 ****
+ ea.line1 = 1;
+ ea.line2 = curbuf->b_ml.ml_line_count;
+ break;
+- case ADDR_WINDOWS:
+ case ADDR_LOADED_BUFFERS:
+ case ADDR_UNLOADED_BUFFERS:
+ case ADDR_TABS:
+ errormsg = (char_u *)_(e_invrange);
+ goto doend;
+--- 2177,2197 ----
+ ea.line1 = 1;
+ ea.line2 = curbuf->b_ml.ml_line_count;
+ break;
+ case ADDR_LOADED_BUFFERS:
++ buf = firstbuf;
++ while (buf->b_next != NULL && buf->b_ml.ml_mfp == NULL)
++ buf = buf->b_next;
++ ea.line1 = buf->b_fnum;
++ buf = lastbuf;
++ while (buf->b_prev != NULL && buf->b_ml.ml_mfp == NULL)
++ buf = buf->b_prev;
++ ea.line2 = buf->b_fnum;
++ break;
+ case ADDR_UNLOADED_BUFFERS:
++ ea.line1 = firstbuf->b_fnum;
++ ea.line2 = lastbuf->b_fnum;
++ break;
++ case ADDR_WINDOWS:
+ case ADDR_TABS:
+ errormsg = (char_u *)_(e_invrange);
+ goto doend;
+***************
+*** 4463,4469 ****
+ n = getdigits(&cmd);
+ if (addr_type == ADDR_LOADED_BUFFERS
+ || addr_type == ADDR_UNLOADED_BUFFERS)
+! lnum = compute_buffer_local_count(addr_type, lnum, n);
+ else if (i == '-')
+ lnum -= n;
+ else
+--- 4492,4498 ----
+ n = getdigits(&cmd);
+ if (addr_type == ADDR_LOADED_BUFFERS
+ || addr_type == ADDR_UNLOADED_BUFFERS)
+! lnum = compute_buffer_local_count(addr_type, lnum, (i == '-') ? -1 * n : n);
+ else if (i == '-')
+ lnum -= n;
+ else
+***************
+*** 4485,4493 ****
+ lnum = 0;
+ break;
+ }
+! c = LAST_TAB_NR;
+! if (lnum >= c)
+! lnum = c;
+ break;
+ case ADDR_WINDOWS:
+ if (lnum < 0)
+--- 4514,4521 ----
+ lnum = 0;
+ break;
+ }
+! if (lnum >= LAST_TAB_NR)
+! lnum = LAST_TAB_NR;
+ break;
+ case ADDR_WINDOWS:
+ if (lnum < 0)
+***************
+*** 4495,4503 ****
+ lnum = 0;
+ break;
+ }
+! c = LAST_WIN_NR;
+! if (lnum > c)
+! lnum = c;
+ break;
+ case ADDR_LOADED_BUFFERS:
+ case ADDR_UNLOADED_BUFFERS:
+--- 4523,4530 ----
+ lnum = 0;
+ break;
+ }
+! if (lnum >= LAST_WIN_NR)
+! lnum = LAST_WIN_NR;
+ break;
+ case ADDR_LOADED_BUFFERS:
+ case ADDR_UNLOADED_BUFFERS:
+*** ../vim-7.4.538/src/version.c 2014-11-30 13:34:16.893626683 +0100
+--- src/version.c 2014-11-30 14:33:29.622510487 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+ { /* Add new patch number below this line */
++ /**/
++ 539,
+ /**/
+
+--
+SOLDIER: What? Ridden on a horse?
+ARTHUR: Yes!
+SOLDIER: You're using coconuts!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram at 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 ///
More information about the scm-commits
mailing list