Loading ...
Sorry, an error occurred while loading the content.

Patch 7.3.943

Expand Messages
  • Bram Moolenaar
    Patch 7.3.943 Problem: Python: Negative indices were failing. Solution: Fix negative indices. Add tests. (ZyX) Files: src/if_py_both.h,
    Message 1 of 1 , May 12, 2013
    • 0 Attachment
      Patch 7.3.943
      Problem: Python: Negative indices were failing.
      Solution: Fix negative indices. Add tests. (ZyX)
      Files: src/if_py_both.h, src/if_python3.c, src/testdir/test86.in,
      src/testdir/test86.ok, src/testdir/test87.in,
      src/testdir/test87.ok


      *** ../vim-7.3.942/src/if_py_both.h 2013-05-12 20:36:09.000000000 +0200
      --- src/if_py_both.h 2013-05-12 21:10:03.000000000 +0200
      ***************
      *** 2394,2399 ****
      --- 2394,2402 ----
      if (end == -1)
      end = self->buf->b_ml.ml_line_count;

      + if (n < 0)
      + n += end - start + 1;
      +
      if (n < 0 || n > end - start)
      {
      PyErr_SetString(PyExc_IndexError, _("line number out of range"));
      ***************
      *** 2441,2446 ****
      --- 2444,2452 ----
      if (end == -1)
      end = self->buf->b_ml.ml_line_count;

      + if (n < 0)
      + n += end - start + 1;
      +
      if (n < 0 || n > end - start)
      {
      PyErr_SetString(PyExc_IndexError, _("line number out of range"));
      *** ../vim-7.3.942/src/if_python3.c 2013-05-12 20:36:09.000000000 +0200
      --- src/if_python3.c 2013-05-12 21:10:03.000000000 +0200
      ***************
      *** 1114,1120 ****
      return NULL;

      if (PySlice_GetIndicesEx((PyObject *)idx,
      ! (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
      &start, &stop,
      &step, &slicelen) < 0)
      {
      --- 1114,1120 ----
      return NULL;

      if (PySlice_GetIndicesEx((PyObject *)idx,
      ! (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
      &start, &stop,
      &step, &slicelen) < 0)
      {
      ***************
      *** 1146,1152 ****
      return -1;

      if (PySlice_GetIndicesEx((PyObject *)idx,
      ! (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
      &start, &stop,
      &step, &slicelen) < 0)
      {
      --- 1146,1152 ----
      return -1;

      if (PySlice_GetIndicesEx((PyObject *)idx,
      ! (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
      &start, &stop,
      &step, &slicelen) < 0)
      {
      *** ../vim-7.3.942/src/testdir/test86.in 2013-05-06 03:52:44.000000000 +0200
      --- src/testdir/test86.in 2013-05-12 21:11:43.000000000 +0200
      ***************
      *** 475,483 ****
      : endtry
      : endfor
      : call RecVars(oname)
      - endtry
      :endfor
      :only
      :endfun
      :"
      :call Test()
      --- 475,524 ----
      : endtry
      : endfor
      : call RecVars(oname)
      :endfor
      :only
      + :"
      + :" Test buffer object
      + :vnew
      + :put ='First line'
      + :put ='Second line'
      + :put ='Third line'
      + :1 delete _
      + :py b=vim.current.buffer
      + :wincmd w
      + :mark a
      + py << EOF
      + cb = vim.current.buffer
      + # Tests BufferAppend and BufferItem
      + cb.append(b[0])
      + # Tests BufferSlice and BufferAssSlice
      + cb.append('abc') # Will be overwritten
      + cb[-1:] = b[:-2]
      + # Test BufferLength and BufferAssSlice
      + cb.append('def') # Will not be overwritten
      + cb[len(cb):] = b[:]
      + # Test BufferAssItem and BufferMark
      + cb.append('ghi') # Will be overwritten
      + cb[-1] = repr((len(cb) - cb.mark('a')[0], cb.mark('a')[1]))
      + # Test BufferRepr
      + cb.append(repr(cb) + repr(b))
      + # Modify foreign buffer
      + b.append('foo')
      + b[0]='bar'
      + b[0:0]=['baz']
      + vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number)
      + # Test CheckBuffer
      + vim.command('bwipeout! ' + str(b.number))
      + for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc")'):
      + try:
      + exec(expr)
      + except vim.error:
      + pass
      + else:
      + # Usually a SEGV here
      + # Should not happen in any case
      + cb.append('No exception for ' + expr)
      + EOF
      :endfun
      :"
      :call Test()
      *** ../vim-7.3.942/src/testdir/test86.ok 2013-05-06 03:52:44.000000000 +0200
      --- src/testdir/test86.ok 2013-05-12 21:11:43.000000000 +0200
      ***************
      *** 306,308 ****
      --- 306,321 ----
      G: '.,,'
      W: 1:',,' 2:'.,,' 3:'.,,' 4:'.,,'
      B: 1:',,' 2:'.,,' 3:'.,,' 4:'.,,'
      + First line
      + First line
      + def
      + First line
      + Second line
      + Third line
      + (7, 2)
      + <buffer test86.in><buffer >
      + baz
      + bar
      + Second line
      + Third line
      + foo
      *** ../vim-7.3.942/src/testdir/test87.in 2013-05-06 03:52:44.000000000 +0200
      --- src/testdir/test87.in 2013-05-12 21:11:43.000000000 +0200
      ***************
      *** 444,452 ****
      : endtry
      : endfor
      : call RecVars(oname)
      - endtry
      :endfor
      :only
      :endfun
      :"
      :call Test()
      --- 444,493 ----
      : endtry
      : endfor
      : call RecVars(oname)
      :endfor
      :only
      + :"
      + :" Test buffer object
      + :vnew
      + :put ='First line'
      + :put ='Second line'
      + :put ='Third line'
      + :1 delete _
      + :py3 b=vim.current.buffer
      + :wincmd w
      + :mark a
      + py3 << EOF
      + cb = vim.current.buffer
      + # Tests BufferAppend and BufferItem
      + cb.append(b[0])
      + # Tests BufferSlice and BufferAssSlice
      + cb.append('abc') # Will be overwritten
      + cb[-1:] = b[:-2]
      + # Test BufferLength and BufferAssSlice
      + cb.append('def') # Will not be overwritten
      + cb[len(cb):] = b[:]
      + # Test BufferAssItem and BufferMark
      + cb.append('ghi') # Will be overwritten
      + cb[-1] = repr((len(cb) - cb.mark('a')[0], cb.mark('a')[1]))
      + # Test BufferRepr
      + cb.append(repr(cb) + repr(b))
      + # Modify foreign buffer
      + b.append('foo')
      + b[0]='bar'
      + b[0:0]=['baz']
      + vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number)
      + # Test CheckBuffer
      + vim.command('bwipeout! ' + str(b.number))
      + for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc")'):
      + try:
      + exec(expr)
      + except vim.error:
      + pass
      + else:
      + # Usually a SEGV here
      + # Should not happen in any case
      + cb.append('No exception for ' + expr)
      + EOF
      :endfun
      :"
      :call Test()
      *** ../vim-7.3.942/src/testdir/test87.ok 2013-05-06 03:52:44.000000000 +0200
      --- src/testdir/test87.ok 2013-05-12 21:11:43.000000000 +0200
      ***************
      *** 295,297 ****
      --- 295,310 ----
      G: '.,,'
      W: 1:',,' 2:'.,,' 3:'.,,' 4:'.,,'
      B: 1:',,' 2:'.,,' 3:'.,,' 4:'.,,'
      + First line
      + First line
      + def
      + First line
      + Second line
      + Third line
      + (7, 2)
      + <buffer test87.in><buffer >
      + baz
      + bar
      + Second line
      + Third line
      + foo
      *** ../vim-7.3.942/src/version.c 2013-05-12 20:36:09.000000000 +0200
      --- src/version.c 2013-05-12 21:11:53.000000000 +0200
      ***************
      *** 730,731 ****
      --- 730,733 ----
      { /* Add new patch number below this line */
      + /**/
      + 943,
      /**/

      --
      Q: Is selling software the same as selling hardware?
      A: No, good hardware is sold new, good software has already been used by many.

      /// Bram Moolenaar -- Bram@... -- 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 vim_dev+unsubscribe@....
      For more options, visit https://groups.google.com/groups/opt_out.
    Your message has been successfully submitted and would be delivered to recipients shortly.