Patch 7.4.1465
Problem: Coverity reported possible use of NULL pointer when using buffer
output with JSON mode.
Solution: Make it actually possible to use JSON mode with a buffer.
Re-encode the JSON to append it to the buffer.
Files: src/channel.c, src/testdir/test_channel.vim
*** ../vim-7.4.1464/src/channel.c 2016-02-28 22:33:43.028904937 +0100
--- src/channel.c 2016-02-29 22:46:15.531699091 +0100
***************
*** 926,933 ****
if ((opt->jo_set & JO_OUT_IO) && opt->jo_io[PART_OUT] == JIO_BUFFER)
{
! /* writing output to a buffer. Force mode to NL. */
! channel->ch_part[PART_OUT].ch_mode = MODE_NL;
channel->ch_part[PART_OUT].ch_buffer =
find_buffer(opt->jo_io_name[PART_OUT]);
ch_logs(channel, "writing to buffer '%s'",
--- 926,934 ----
if ((opt->jo_set & JO_OUT_IO) && opt->jo_io[PART_OUT] == JIO_BUFFER)
{
! /* writing output to a buffer. Default mode is NL. */
! if (!(opt->jo_set & JO_OUT_MODE))
! channel->ch_part[PART_OUT].ch_mode = MODE_NL;
channel->ch_part[PART_OUT].ch_buffer =
find_buffer(opt->jo_io_name[PART_OUT]);
ch_logs(channel, "writing to buffer '%s'",
***************
*** 1560,1591 ****
u_sync(TRUE);
u_save(lnum, lnum + 1);
! ml_append(lnum, msg, 0, FALSE);
! appended_lines_mark(lnum, 1L);
! curbuf = save_curbuf;
!
! if (buffer->b_nwindows > 0)
{
! win_T *wp;
! win_T *save_curwin;
! FOR_ALL_WINDOWS(wp)
{
! if (wp->w_buffer == buffer
! && wp->w_cursor.lnum == lnum
! && wp->w_cursor.col == 0)
{
! ++wp->w_cursor.lnum;
! save_curwin = curwin;
! curwin = wp;
! curbuf = curwin->w_buffer;
! scroll_cursor_bot(0, FALSE);
! curwin = save_curwin;
! curbuf = curwin->w_buffer;
}
}
- redraw_buf_later(buffer, VALID);
- channel_need_redraw = TRUE;
}
}
if (callback != NULL)
--- 1561,1598 ----
u_sync(TRUE);
u_save(lnum, lnum + 1);
! if (msg == NULL)
! /* JSON or JS mode: re-encode the message. */
! msg = json_encode(listtv, ch_mode);
! if (msg != NULL)
{
! ml_append(lnum, msg, 0, FALSE);
! appended_lines_mark(lnum, 1L);
! curbuf = save_curbuf;
! if (buffer->b_nwindows > 0)
{
! win_T *wp;
! win_T *save_curwin;
!
! FOR_ALL_WINDOWS(wp)
{
! if (wp->w_buffer == buffer
! && wp->w_cursor.lnum == lnum
! && wp->w_cursor.col == 0)
! {
! ++wp->w_cursor.lnum;
! save_curwin = curwin;
! curwin = wp;
! curbuf = curwin->w_buffer;
! scroll_cursor_bot(0, FALSE);
! curwin = save_curwin;
! curbuf = curwin->w_buffer;
! }
}
+ redraw_buf_later(buffer, VALID);
+ channel_need_redraw = TRUE;
}
}
}
if (callback != NULL)
*** ../vim-7.4.1464/src/testdir/test_channel.vim 2016-02-28
19:50:47.555824204 +0100
--- src/testdir/test_channel.vim 2016-02-29 22:51:50.816154878 +0100
***************
*** 426,431 ****
--- 426,457 ----
endtry
endfunc
+ func Test_pipe_to_buffer_json()
+ if !has('job')
+ return
+ endif
+ call ch_log('Test_pipe_to_buffer_json()')
+ let job = job_start(s:python . " test_channel_pipe.py",
+ \ {'out-io': 'buffer', 'out-mode': 'json'})
+ call assert_equal("run", job_status(job))
+ try
+ let handle = job_getchannel(job)
+ call ch_sendraw(handle, "echo [0, \"hello\"]\n")
+ call ch_sendraw(handle, "echo [-2, 12.34]\n")
+ exe ch_getbufnr(handle, "out") . 'sbuf'
+ for i in range(100)
+ sleep 10m
+ if line('$') >= 3
+ break
+ endif
+ endfor
+ call assert_equal(['Reading from channel output...', '[0,"hello"]',
'[-2,12.34]'], getline(1, '$'))
+ bwipe!
+ finally
+ call job_stop(job)
+ endtry
+ endfunc
+
""""""""""
let s:unletResponse = ''
*** ../vim-7.4.1464/src/version.c 2016-02-29 22:05:16.841676901 +0100
--- src/version.c 2016-02-29 22:47:35.726851366 +0100
***************
*** 745,746 ****
--- 745,748 ----
{ /* Add new patch number below this line */
+ /**/
+ 1465,
/**/
--
ARTHUR: The swallow may fly south with the sun, or the house martin or the
plover seek warmer hot lands in winter, yet these are not strangers to
our land.
SOLDIER: Are you suggesting coconuts migrate?
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
/// 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.