[vim] - patchlevel 1287

Karsten Hopp karsten at fedoraproject.org
Wed Jul 3 13:47:15 UTC 2013


commit 55c909357ebd39165817cefef0f09f72e6de8b25
Author: Karsten Hopp <karsten at redhat.com>
Date:   Thu Jul 4 15:37:19 2013 +0200

    - patchlevel 1287

 7.3.1287 |  455 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 455 insertions(+), 0 deletions(-)
---
diff --git a/7.3.1287 b/7.3.1287
new file mode 100644
index 0000000..2255245
--- /dev/null
+++ b/7.3.1287
@@ -0,0 +1,455 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.1287
+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.3.1287
+Problem:    Python SystemExit exception is not handled properly.
+Solution:   Catch the exception and give an error. (Yasuhiro Matsumoto, Ken
+	    Takata)
+Files:	    runtime/doc/if_pyth.txt, src/if_py_both.h, src/if_python.c,
+	    src/if_python3.c
+
+
+*** ../vim-7.3.1286/runtime/doc/if_pyth.txt	2013-06-12 14:40:58.000000000 +0200
+--- runtime/doc/if_pyth.txt	2013-07-01 21:56:02.000000000 +0200
+***************
+*** 740,745 ****
+--- 740,750 ----
+  3. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration.  This
+     may crash Vim though.
+  
++ 							*E880*
++ Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
++ 	:py vim.command("qall!")
++ <
++ 
+  							*has-python*
+  You can test what Python version is available with: >
+  	if has('python')
+*** ../vim-7.3.1286/src/if_py_both.h	2013-06-24 22:33:26.000000000 +0200
+--- src/if_py_both.h	2013-07-01 22:02:17.000000000 +0200
+***************
+*** 13,18 ****
+--- 13,20 ----
+   * Common code for if_python.c and if_python3.c.
+   */
+  
++ static char_u e_py_systemexit[]	= "E880: Can't handle SystemExit of %s exception in vim";
++ 
+  #if PY_VERSION_HEX < 0x02050000
+  typedef int Py_ssize_t;  /* Python 2.4 and earlier don't have this type. */
+  #endif
+***************
+*** 275,281 ****
+  
+      if (self)
+  	for (method = self->ob_type->tp_methods ; method->ml_name != NULL ; ++method)
+! 	    if (add_string(ret, (char *) method->ml_name))
+  	    {
+  		Py_DECREF(ret);
+  		return NULL;
+--- 277,283 ----
+  
+      if (self)
+  	for (method = self->ob_type->tp_methods ; method->ml_name != NULL ; ++method)
+! 	    if (add_string(ret, (char *)method->ml_name))
+  	    {
+  		Py_DECREF(ret);
+  		return NULL;
+***************
+*** 549,556 ****
+  VimTryEnd(void)
+  {
+      --trylevel;
+!     /* Without this it stops processing all subsequent VimL commands and 
+!      * generates strange error messages if I e.g. try calling Test() in a cycle */
+      did_emsg = FALSE;
+      /* Keyboard interrupt should be preferred over anything else */
+      if (got_int)
+--- 551,559 ----
+  VimTryEnd(void)
+  {
+      --trylevel;
+!     /* Without this it stops processing all subsequent VimL commands and
+!      * generates strange error messages if I e.g. try calling Test() in a
+!      * cycle */
+      did_emsg = FALSE;
+      /* Keyboard interrupt should be preferred over anything else */
+      if (got_int)
+***************
+*** 570,576 ****
+      /* Finally transform VimL exception to python one */
+      else
+      {
+! 	PyErr_SetVim((char *) current_exception->value);
+  	discard_current_exception();
+  	return -1;
+      }
+--- 573,579 ----
+      /* Finally transform VimL exception to python one */
+      else
+      {
+! 	PyErr_SetVim((char *)current_exception->value);
+  	discard_current_exception();
+  	return -1;
+      }
+***************
+*** 667,673 ****
+  
+  	/* For backwards compatibility numbers are stored as strings. */
+  	sprintf(buf, "%ld", (long)our_tv->vval.v_number);
+! 	ret = PyString_FromString((char *) buf);
+      }
+  # ifdef FEAT_FLOAT
+      else if (our_tv->v_type == VAR_FLOAT)
+--- 670,676 ----
+  
+  	/* For backwards compatibility numbers are stored as strings. */
+  	sprintf(buf, "%ld", (long)our_tv->vval.v_number);
+! 	ret = PyString_FromString((char *)buf);
+      }
+  # ifdef FEAT_FLOAT
+      else if (our_tv->v_type == VAR_FLOAT)
+***************
+*** 675,681 ****
+  	char buf[NUMBUFLEN];
+  
+  	sprintf(buf, "%f", our_tv->vval.v_float);
+! 	ret = PyString_FromString((char *) buf);
+      }
+  # endif
+      else if (our_tv->v_type == VAR_LIST)
+--- 678,684 ----
+  	char buf[NUMBUFLEN];
+  
+  	sprintf(buf, "%f", our_tv->vval.v_float);
+! 	ret = PyString_FromString((char *)buf);
+      }
+  # endif
+      else if (our_tv->v_type == VAR_LIST)
+***************
+*** 955,961 ****
+      PyObject	*pathObject;
+      map_rtp_data	*mr_data = *((map_rtp_data **) data);
+  
+!     if (!(pathObject = PyString_FromString((char *) path)))
+      {
+  	*data = NULL;
+  	return;
+--- 958,964 ----
+      PyObject	*pathObject;
+      map_rtp_data	*mr_data = *((map_rtp_data **) data);
+  
+!     if (!(pathObject = PyString_FromString((char *)path)))
+      {
+  	*data = NULL;
+  	return;
+***************
+*** 1124,1130 ****
+      PyObject	*module;
+      char	*dot;
+  
+!     if ((dot = (char *) vim_strchr((char_u *) tail, '.')))
+      {
+  	/*
+  	 * There is a dot in the name: call find_module recursively without the
+--- 1127,1133 ----
+      PyObject	*module;
+      char	*dot;
+  
+!     if ((dot = (char *)vim_strchr((char_u *) tail, '.')))
+      {
+  	/*
+  	 * There is a dot in the name: call find_module recursively without the
+***************
+*** 1658,1664 ****
+  
+      --((*dii)->todo);
+  
+!     if (!(ret = PyBytes_FromString((char *) (*dii)->hi->hi_key)))
+  	return NULL;
+  
+      return ret;
+--- 1661,1667 ----
+  
+      --((*dii)->todo);
+  
+!     if (!(ret = PyBytes_FromString((char *)(*dii)->hi->hi_key)))
+  	return NULL;
+  
+      return ret;
+***************
+*** 2680,2691 ****
+  FunctionRepr(FunctionObject *self)
+  {
+  #ifdef Py_TRACE_REFS
+!     /* For unknown reason self->name may be NULL after calling 
+       * Finalize */
+      return PyString_FromFormat("<vim.Function '%s'>",
+! 	    (self->name == NULL ? "<NULL>" : (char *) self->name));
+  #else
+!     return PyString_FromFormat("<vim.Function '%s'>", (char *) self->name);
+  #endif
+  }
+  
+--- 2683,2694 ----
+  FunctionRepr(FunctionObject *self)
+  {
+  #ifdef Py_TRACE_REFS
+!     /* For unknown reason self->name may be NULL after calling
+       * Finalize */
+      return PyString_FromFormat("<vim.Function '%s'>",
+! 	    (self->name == NULL ? "<NULL>" : (char *)self->name));
+  #else
+!     return PyString_FromFormat("<vim.Function '%s'>", (char *)self->name);
+  #endif
+  }
+  
+***************
+*** 2809,2815 ****
+      {
+  	if (stringval)
+  	{
+! 	    PyObject	*ret = PyBytes_FromString((char *) stringval);
+  	    vim_free(stringval);
+  	    return ret;
+  	}
+--- 2812,2818 ----
+      {
+  	if (stringval)
+  	{
+! 	    PyObject	*ret = PyBytes_FromString((char *)stringval);
+  	    vim_free(stringval);
+  	    return ret;
+  	}
+***************
+*** 4525,4531 ****
+  {
+      if (strcmp(name, "name") == 0)
+  	return PyString_FromString((self->buf->b_ffname == NULL
+! 				    ? "" : (char *) self->buf->b_ffname));
+      else if (strcmp(name, "number") == 0)
+  	return Py_BuildValue(Py_ssize_t_fmt, self->buf->b_fnum);
+      else if (strcmp(name, "vars") == 0)
+--- 4528,4534 ----
+  {
+      if (strcmp(name, "name") == 0)
+  	return PyString_FromString((self->buf->b_ffname == NULL
+! 				    ? "" : (char *)self->buf->b_ffname));
+      else if (strcmp(name, "number") == 0)
+  	return Py_BuildValue(Py_ssize_t_fmt, self->buf->b_fnum);
+      else if (strcmp(name, "vars") == 0)
+***************
+*** 4961,4967 ****
+  #endif
+  	)
+  {
+!     PyRun_SimpleString((char *) cmd);
+  }
+  
+  static const char	*code_hdr = "def " DOPY_FUNC "(line, linenr):\n ";
+--- 4964,4982 ----
+  #endif
+  	)
+  {
+!     PyObject	*run_ret;
+!     run_ret = PyRun_String((char *)cmd, Py_file_input, globals, globals);
+!     if (run_ret != NULL)
+!     {
+! 	Py_DECREF(run_ret);
+!     }
+!     else if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_SystemExit))
+!     {
+! 	EMSG2(_(e_py_systemexit), "python");
+! 	PyErr_Clear();
+!     }
+!     else
+! 	PyErr_PrintEx(1);
+  }
+  
+  static const char	*code_hdr = "def " DOPY_FUNC "(line, linenr):\n ";
+***************
+*** 4979,4984 ****
+--- 4994,5000 ----
+      char	*code;
+      int		status;
+      PyObject	*pyfunc, *pymain;
++     PyObject	*run_ret;
+  
+      if (u_save((linenr_T)RangeStart - 1, (linenr_T)RangeEnd + 1) != OK)
+      {
+***************
+*** 4990,4996 ****
+      code = PyMem_New(char, len + 1);
+      memcpy(code, code_hdr, code_hdr_len);
+      STRCPY(code + code_hdr_len, cmd);
+!     status = PyRun_SimpleString(code);
+      PyMem_Free(code);
+  
+      if (status)
+--- 5006,5028 ----
+      code = PyMem_New(char, len + 1);
+      memcpy(code, code_hdr, code_hdr_len);
+      STRCPY(code + code_hdr_len, cmd);
+!     run_ret = PyRun_String(code, Py_file_input, globals, globals);
+!     status = -1;
+!     if (run_ret != NULL)
+!     {
+! 	status = 0;
+! 	Py_DECREF(run_ret);
+!     }
+!     else if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_SystemExit))
+!     {
+! 	PyMem_Free(code);
+! 	EMSG2(_(e_py_systemexit), "python");
+! 	PyErr_Clear();
+! 	return;
+!     }
+!     else
+! 	PyErr_PrintEx(1);
+! 
+      PyMem_Free(code);
+  
+      if (status)
+***************
+*** 5068,5076 ****
+  {
+      PyObject	*run_ret;
+  
+!     run_ret = PyRun_String((char *) cmd, Py_eval_input, globals, globals);
+      if (run_ret == NULL)
+      {
+  	if (PyErr_Occurred() && !msg_silent)
+  	    PyErr_PrintEx(0);
+  	EMSG(_("E858: Eval did not return a valid python object"));
+--- 5100,5113 ----
+  {
+      PyObject	*run_ret;
+  
+!     run_ret = PyRun_String((char *)cmd, Py_eval_input, globals, globals);
+      if (run_ret == NULL)
+      {
++ 	if (PyErr_ExceptionMatches(PyExc_SystemExit))
++ 	{
++ 	    EMSG2(_(e_py_systemexit), "python");
++ 	    PyErr_Clear();
++ 	}
+  	if (PyErr_Occurred() && !msg_silent)
+  	    PyErr_PrintEx(0);
+  	EMSG(_("E858: Eval did not return a valid python object"));
+*** ../vim-7.3.1286/src/if_python.c	2013-06-24 20:32:54.000000000 +0200
+--- src/if_python.c	2013-07-01 21:56:02.000000000 +0200
+***************
+*** 444,449 ****
+--- 444,450 ----
+  static PyObject *imp_PyExc_KeyboardInterrupt;
+  static PyObject *imp_PyExc_TypeError;
+  static PyObject *imp_PyExc_ValueError;
++ static PyObject *imp_PyExc_SystemExit;
+  static PyObject *imp_PyExc_RuntimeError;
+  static PyObject *imp_PyExc_ImportError;
+  static PyObject *imp_PyExc_OverflowError;
+***************
+*** 454,459 ****
+--- 455,461 ----
+  # define PyExc_KeyboardInterrupt imp_PyExc_KeyboardInterrupt
+  # define PyExc_TypeError imp_PyExc_TypeError
+  # define PyExc_ValueError imp_PyExc_ValueError
++ # define PyExc_SystemExit imp_PyExc_SystemExit
+  # define PyExc_RuntimeError imp_PyExc_RuntimeError
+  # define PyExc_ImportError imp_PyExc_ImportError
+  # define PyExc_OverflowError imp_PyExc_OverflowError
+***************
+*** 731,736 ****
+--- 733,739 ----
+      imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt");
+      imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError");
+      imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError");
++     imp_PyExc_SystemExit = PyDict_GetItemString(exdict, "SystemExit");
+      imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError");
+      imp_PyExc_ImportError = PyDict_GetItemString(exdict, "ImportError");
+      imp_PyExc_OverflowError = PyDict_GetItemString(exdict, "OverflowError");
+***************
+*** 740,745 ****
+--- 743,749 ----
+      Py_XINCREF(imp_PyExc_KeyboardInterrupt);
+      Py_XINCREF(imp_PyExc_TypeError);
+      Py_XINCREF(imp_PyExc_ValueError);
++     Py_XINCREF(imp_PyExc_SystemExit);
+      Py_XINCREF(imp_PyExc_RuntimeError);
+      Py_XINCREF(imp_PyExc_ImportError);
+      Py_XINCREF(imp_PyExc_OverflowError);
+*** ../vim-7.3.1286/src/if_python3.c	2013-06-23 16:35:32.000000000 +0200
+--- src/if_python3.c	2013-07-01 21:56:02.000000000 +0200
+***************
+*** 126,132 ****
+  # define PyErr_PrintEx py3_PyErr_PrintEx
+  # define PyErr_NoMemory py3_PyErr_NoMemory
+  # define PyErr_Occurred py3_PyErr_Occurred
+- # define PyErr_PrintEx py3_PyErr_PrintEx
+  # define PyErr_SetNone py3_PyErr_SetNone
+  # define PyErr_SetString py3_PyErr_SetString
+  # define PyErr_SetObject py3_PyErr_SetObject
+--- 126,131 ----
+***************
+*** 403,408 ****
+--- 402,408 ----
+  static PyObject *p3imp_PyExc_KeyboardInterrupt;
+  static PyObject *p3imp_PyExc_TypeError;
+  static PyObject *p3imp_PyExc_ValueError;
++ static PyObject *p3imp_PyExc_SystemExit;
+  static PyObject *p3imp_PyExc_RuntimeError;
+  static PyObject *p3imp_PyExc_ImportError;
+  static PyObject *p3imp_PyExc_OverflowError;
+***************
+*** 413,418 ****
+--- 413,419 ----
+  # define PyExc_KeyboardInterrupt p3imp_PyExc_KeyboardInterrupt
+  # define PyExc_TypeError p3imp_PyExc_TypeError
+  # define PyExc_ValueError p3imp_PyExc_ValueError
++ # define PyExc_SystemExit p3imp_PyExc_SystemExit
+  # define PyExc_RuntimeError p3imp_PyExc_RuntimeError
+  # define PyExc_ImportError p3imp_PyExc_ImportError
+  # define PyExc_OverflowError p3imp_PyExc_OverflowError
+***************
+*** 681,686 ****
+--- 682,688 ----
+      p3imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt");
+      p3imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError");
+      p3imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError");
++     p3imp_PyExc_SystemExit = PyDict_GetItemString(exdict, "SystemExit");
+      p3imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError");
+      p3imp_PyExc_ImportError = PyDict_GetItemString(exdict, "ImportError");
+      p3imp_PyExc_OverflowError = PyDict_GetItemString(exdict, "OverflowError");
+***************
+*** 690,695 ****
+--- 692,698 ----
+      Py_XINCREF(p3imp_PyExc_KeyboardInterrupt);
+      Py_XINCREF(p3imp_PyExc_TypeError);
+      Py_XINCREF(p3imp_PyExc_ValueError);
++     Py_XINCREF(p3imp_PyExc_SystemExit);
+      Py_XINCREF(p3imp_PyExc_RuntimeError);
+      Py_XINCREF(p3imp_PyExc_ImportError);
+      Py_XINCREF(p3imp_PyExc_OverflowError);
+*** ../vim-7.3.1286/src/version.c	2013-07-01 21:43:05.000000000 +0200
+--- src/version.c	2013-07-01 21:57:00.000000000 +0200
+***************
+*** 730,731 ****
+--- 730,733 ----
+  {   /* Add new patch number below this line */
++ /**/
++     1287,
+  /**/
+
+-- 
+5 out of 4 people have trouble with fractions.
+
+ /// 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