Patch 7.3.1041
Problem:    Python: Invalid read valgrind errors.
Solution:   Python patch 2: defer DICTKEY_UNREF until key is no longer needed.
            (ZyX)
Files:      src/if_py_both.h


*** ../vim-7.3.1040/src/if_py_both.h    2013-05-28 22:31:43.000000000 +0200
--- src/if_py_both.h    2013-05-29 21:36:29.000000000 +0200
***************
*** 1603,1613 ****
      flags = get_option_value_strict(key, NULL, NULL,
                                    self->opt_type, self->from);
  
-     DICTKEY_UNREF
- 
      if (flags == 0)
      {
        PyErr_SetObject(PyExc_KeyError, keyObject);
        return -1;
      }
  
--- 1603,1612 ----
      flags = get_option_value_strict(key, NULL, NULL,
                                    self->opt_type, self->from);
  
      if (flags == 0)
      {
        PyErr_SetObject(PyExc_KeyError, keyObject);
+       DICTKEY_UNREF
        return -1;
      }
  
***************
*** 1617,1633 ****
--- 1616,1635 ----
        {
            PyErr_SetString(PyExc_ValueError,
                    _("unable to unset global option"));
+           DICTKEY_UNREF
            return -1;
        }
        else if (!(flags & SOPT_GLOBAL))
        {
            PyErr_SetString(PyExc_ValueError, _("unable to unset option "
                                                "without global value"));
+           DICTKEY_UNREF
            return -1;
        }
        else
        {
            unset_global_local_option(key, self->from);
+           DICTKEY_UNREF
            return 0;
        }
      }
***************
*** 1639,1647 ****
        int     istrue = PyObject_IsTrue(valObject);
  
        if (istrue == -1)
!           return -1;
!       r = set_option_value_for(key, istrue, NULL,
!                               opt_flags, self->opt_type, self->from);
      }
      else if (flags & SOPT_NUM)
      {
--- 1641,1650 ----
        int     istrue = PyObject_IsTrue(valObject);
  
        if (istrue == -1)
!           r = -1;
!       else
!           r = set_option_value_for(key, istrue, NULL,
!                                   opt_flags, self->opt_type, self->from);
      }
      else if (flags & SOPT_NUM)
      {
***************
*** 1657,1662 ****
--- 1660,1666 ----
        else
        {
            PyErr_SetString(PyExc_TypeError, _("object must be integer"));
+           DICTKEY_UNREF
            return -1;
        }
  
***************
*** 1670,1678 ****
--- 1674,1688 ----
        {
  
            if (PyString_AsStringAndSize(valObject, (char **) &val, NULL) == -1)
+           {
+               DICTKEY_UNREF
                return -1;
+           }
            if (val == NULL)
+           {
+               DICTKEY_UNREF
                return -1;
+           }
  
            val = vim_strsave(val);
        }
***************
*** 1682,1693 ****
--- 1692,1712 ----
  
            bytes = PyUnicode_AsEncodedString(valObject, (char *)ENC_OPT, NULL);
            if (bytes == NULL)
+           {
+               DICTKEY_UNREF
                return -1;
+           }
  
            if(PyString_AsStringAndSize(bytes, (char **) &val, NULL) == -1)
+           {
+               DICTKEY_UNREF
                return -1;
+           }
            if (val == NULL)
+           {
+               DICTKEY_UNREF
                return -1;
+           }
  
            val = vim_strsave(val);
            Py_XDECREF(bytes);
***************
*** 1695,1700 ****
--- 1714,1720 ----
        else
        {
            PyErr_SetString(PyExc_TypeError, _("object must be string"));
+           DICTKEY_UNREF
            return -1;
        }
  
***************
*** 1703,1708 ****
--- 1723,1730 ----
        vim_free(val);
      }
  
+     DICTKEY_UNREF
+ 
      return r;
  }
  
*** ../vim-7.3.1040/src/version.c       2013-05-29 21:33:34.000000000 +0200
--- src/version.c       2013-05-29 21:36:47.000000000 +0200
***************
*** 730,731 ****
--- 730,733 ----
  {   /* Add new patch number below this line */
+ /**/
+     1041,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
18. Your wife drapes a blond wig over your monitor to remind you of what she
    looks like.

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


Raspunde prin e-mail lui