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

Patch 7.3.942

Expand Messages
  • Bram Moolenaar
    Patch 7.3.942 Problem: Python: SEGV in Buffer functions. Solution: Call CheckBuffer() at the right time. (ZyX) Files: src/if_py_both.h,
    Message 1 of 1 , May 12 11:36 AM
    • 0 Attachment
      Patch 7.3.942
      Problem: Python: SEGV in Buffer functions.
      Solution: Call CheckBuffer() at the right time. (ZyX)
      Files: src/if_py_both.h, src/if_python.c, src/if_python3.c


      *** ../vim-7.3.941/src/if_py_both.h 2013-05-12 19:45:30.000000000 +0200
      --- src/if_py_both.h 2013-05-12 20:19:08.000000000 +0200
      ***************
      *** 2391,2396 ****
      --- 2391,2399 ----
      if (CheckBuffer(self))
      return NULL;

      + if (end == -1)
      + end = self->buf->b_ml.ml_line_count;
      +
      if (n < 0 || n > end - start)
      {
      PyErr_SetString(PyExc_IndexError, _("line number out of range"));
      ***************
      *** 2408,2413 ****
      --- 2411,2419 ----
      if (CheckBuffer(self))
      return NULL;

      + if (end == -1)
      + end = self->buf->b_ml.ml_line_count;
      +
      size = end - start + 1;

      if (lo < 0)
      ***************
      *** 2432,2437 ****
      --- 2438,2446 ----
      if (CheckBuffer(self))
      return -1;

      + if (end == -1)
      + end = self->buf->b_ml.ml_line_count;
      +
      if (n < 0 || n > end - start)
      {
      PyErr_SetString(PyExc_IndexError, _("line number out of range"));
      ***************
      *** 2457,2462 ****
      --- 2466,2474 ----
      if (CheckBuffer(self))
      return -1;

      + if (end == -1)
      + end = self->buf->b_ml.ml_line_count;
      +
      /* Sort out the slice range */
      size = end - start + 1;

      ***************
      *** 2493,2498 ****
      --- 2505,2513 ----
      if (CheckBuffer(self))
      return NULL;

      + if (end == -1)
      + end = self->buf->b_ml.ml_line_count;
      +
      max = n = end - start + 1;

      if (!PyArg_ParseTuple(args, "O|n", &lines, &n))
      ***************
      *** 2700,2714 ****
      static PyObject *
      BufferItem(PyObject *self, PyInt n)
      {
      ! return RBItem((BufferObject *)(self), n, 1,
      ! (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count);
      }

      static PyObject *
      BufferSlice(PyObject *self, PyInt lo, PyInt hi)
      {
      ! return RBSlice((BufferObject *)(self), lo, hi, 1,
      ! (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count);
      }

      static PyObject *
      --- 2715,2727 ----
      static PyObject *
      BufferItem(PyObject *self, PyInt n)
      {
      ! return RBItem((BufferObject *)(self), n, 1, -1);
      }

      static PyObject *
      BufferSlice(PyObject *self, PyInt lo, PyInt hi)
      {
      ! return RBSlice((BufferObject *)(self), lo, hi, 1, -1);
      }

      static PyObject *
      ***************
      *** 2732,2740 ****
      static PyObject *
      BufferAppend(PyObject *self, PyObject *args)
      {
      ! return RBAppend((BufferObject *)(self), args, 1,
      ! (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
      ! NULL);
      }

      static PyObject *
      --- 2745,2751 ----
      static PyObject *
      BufferAppend(PyObject *self, PyObject *args)
      {
      ! return RBAppend((BufferObject *)(self), args, 1, -1, NULL);
      }

      static PyObject *
      *** ../vim-7.3.941/src/if_python.c 2013-05-12 19:45:30.000000000 +0200
      --- src/if_python.c 2013-05-12 20:19:08.000000000 +0200
      ***************
      *** 1073,1089 ****
      static PyInt
      BufferAssItem(PyObject *self, PyInt n, PyObject *val)
      {
      ! return RBAsItem((BufferObject *)(self), n, val, 1,
      ! (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
      ! NULL);
      }

      static PyInt
      BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
      {
      ! return RBAsSlice((BufferObject *)(self), lo, hi, val, 1,
      ! (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
      ! NULL);
      }

      static PySequenceMethods RangeAsSeq = {
      --- 1073,1085 ----
      static PyInt
      BufferAssItem(PyObject *self, PyInt n, PyObject *val)
      {
      ! return RBAsItem((BufferObject *)(self), n, val, 1, -1, NULL);
      }

      static PyInt
      BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
      {
      ! return RBAsSlice((BufferObject *)(self), lo, hi, val, 1, -1, NULL);
      }

      static PySequenceMethods RangeAsSeq = {
      *** ../vim-7.3.941/src/if_python3.c 2013-05-12 18:44:44.000000000 +0200
      --- src/if_python3.c 2013-05-12 20:19:08.000000000 +0200
      ***************
      *** 1110,1115 ****
      --- 1110,1118 ----
      {
      Py_ssize_t start, stop, step, slicelen;

      + if (CheckBuffer((BufferObject *) self))
      + return NULL;
      +
      if (PySlice_GetIndicesEx((PyObject *)idx,
      (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
      &start, &stop,
      ***************
      *** 1139,1144 ****
      --- 1142,1150 ----
      {
      Py_ssize_t start, stop, step, slicelen;

      + if (CheckBuffer((BufferObject *) self))
      + return -1;
      +
      if (PySlice_GetIndicesEx((PyObject *)idx,
      (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
      &start, &stop,
      *** ../vim-7.3.941/src/version.c 2013-05-12 19:45:30.000000000 +0200
      --- src/version.c 2013-05-12 19:49:58.000000000 +0200
      ***************
      *** 730,731 ****
      --- 730,733 ----
      { /* Add new patch number below this line */
      + /**/
      + 942,
      /**/

      --
      Vim is like Emacs without all the typing. (John "Johann" Spetz)

      /// 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.