[vim/f19] - patchlevel 898

Karsten Hopp karsten at fedoraproject.org
Mon Apr 15 15:09:18 UTC 2013


commit 4c9a90575b1c6abfb21afae10653578b4fbaef75
Author: Karsten Hopp <karsten at redhat.com>
Date:   Mon Apr 15 17:02:45 2013 +0200

    - patchlevel 898

 7.3.898 |  304 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 304 insertions(+), 0 deletions(-)
---
diff --git a/7.3.898 b/7.3.898
new file mode 100644
index 0000000..d2530a5
--- /dev/null
+++ b/7.3.898
@@ -0,0 +1,304 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.898
+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.898
+Problem:    Memory leak reported by valgrind in test 91.
+Solution:   Only use default argument when needed.
+Files:	    src/eval.c, src/testdir/test91.in, src/testdir/test91.ok
+
+
+*** ../vim-7.3.897/src/eval.c	2013-04-15 13:06:15.000000000 +0200
+--- src/eval.c	2013-04-15 15:09:17.000000000 +0200
+***************
+*** 11120,11139 ****
+      buf_T	*save_curbuf;
+      char_u	*varname;
+      dictitem_T	*v;
+  
+      (void)get_tv_number(&argvars[0]);	    /* issue errmsg if type error */
+      varname = get_tv_string_chk(&argvars[1]);
+      ++emsg_off;
+      buf = get_buf_tv(&argvars[0], FALSE);
+  
+!     if (argvars[2].v_type != VAR_UNKNOWN)
+! 	/* set the default value */
+! 	copy_tv(&argvars[2], rettv);
+!     else
+!     {
+! 	rettv->v_type = VAR_STRING;
+! 	rettv->vval.v_string = NULL;
+!     }
+  
+      if (buf != NULL && varname != NULL)
+      {
+--- 11120,11134 ----
+      buf_T	*save_curbuf;
+      char_u	*varname;
+      dictitem_T	*v;
++     int		done = FALSE;
+  
+      (void)get_tv_number(&argvars[0]);	    /* issue errmsg if type error */
+      varname = get_tv_string_chk(&argvars[1]);
+      ++emsg_off;
+      buf = get_buf_tv(&argvars[0], FALSE);
+  
+!     rettv->v_type = VAR_STRING;
+!     rettv->vval.v_string = NULL;
+  
+      if (buf != NULL && varname != NULL)
+      {
+***************
+*** 11142,11152 ****
+  	curbuf = buf;
+  
+  	if (*varname == '&')	/* buffer-local-option */
+! 	    get_option_tv(&varname, rettv, TRUE);
+  	else if (STRCMP(varname, "changedtick") == 0)
+  	{
+  	    rettv->v_type = VAR_NUMBER;
+  	    rettv->vval.v_number = curbuf->b_changedtick;
+  	}
+  	else
+  	{
+--- 11137,11151 ----
+  	curbuf = buf;
+  
+  	if (*varname == '&')	/* buffer-local-option */
+! 	{
+! 	    if (get_option_tv(&varname, rettv, TRUE) == OK)
+! 		done = TRUE;
+! 	}
+  	else if (STRCMP(varname, "changedtick") == 0)
+  	{
+  	    rettv->v_type = VAR_NUMBER;
+  	    rettv->vval.v_number = curbuf->b_changedtick;
++ 	    done = TRUE;
+  	}
+  	else
+  	{
+***************
+*** 11155,11167 ****
+--- 11154,11173 ----
+  	    v = find_var_in_ht(&curbuf->b_vars->dv_hashtab,
+  							 'b', varname, FALSE);
+  	    if (v != NULL)
++ 	    {
+  		copy_tv(&v->di_tv, rettv);
++ 		done = TRUE;
++ 	    }
+  	}
+  
+  	/* restore previous notion of curbuf */
+  	curbuf = save_curbuf;
+      }
+  
++     if (!done && argvars[2].v_type != VAR_UNKNOWN)
++ 	/* use the default value */
++ 	copy_tv(&argvars[2], rettv);
++ 
+      --emsg_off;
+  }
+  
+***************
+*** 11767,11772 ****
+--- 11773,11779 ----
+      tabpage_T	*tp;
+      dictitem_T	*v;
+      char_u	*varname;
++     int		done = FALSE;
+  
+      rettv->v_type = VAR_STRING;
+      rettv->vval.v_string = NULL;
+***************
+*** 11778,11788 ****
+  	/* look up the variable */
+  	v = find_var_in_ht(&tp->tp_vars->dv_hashtab, 0, varname, FALSE);
+  	if (v != NULL)
+  	    copy_tv(&v->di_tv, rettv);
+! 	else if (argvars[2].v_type != VAR_UNKNOWN)
+! 	    copy_tv(&argvars[2], rettv);
+      }
+!     else if (argvars[2].v_type != VAR_UNKNOWN)
+  	copy_tv(&argvars[2], rettv);
+  }
+  
+--- 11785,11797 ----
+  	/* look up the variable */
+  	v = find_var_in_ht(&tp->tp_vars->dv_hashtab, 0, varname, FALSE);
+  	if (v != NULL)
++ 	{
+  	    copy_tv(&v->di_tv, rettv);
+! 	    done = TRUE;
+! 	}
+      }
+! 
+!     if (!done && argvars[2].v_type != VAR_UNKNOWN)
+  	copy_tv(&argvars[2], rettv);
+  }
+  
+***************
+*** 11894,11899 ****
+--- 11903,11909 ----
+      char_u	*varname;
+      dictitem_T	*v;
+      tabpage_T	*tp;
++     int		done = FALSE;
+  
+  #ifdef FEAT_WINDOWS
+      if (off == 1)
+***************
+*** 11905,11918 ****
+      varname = get_tv_string_chk(&argvars[off + 1]);
+      ++emsg_off;
+  
+!     if (argvars[off + 2].v_type != VAR_UNKNOWN)
+! 	/* set the default return value */
+! 	copy_tv(&argvars[off + 2], rettv);
+!     else
+!     {
+! 	rettv->v_type = VAR_STRING;
+! 	rettv->vval.v_string = NULL;
+!     }
+  
+      if (win != NULL && varname != NULL)
+      {
+--- 11915,11922 ----
+      varname = get_tv_string_chk(&argvars[off + 1]);
+      ++emsg_off;
+  
+!     rettv->v_type = VAR_STRING;
+!     rettv->vval.v_string = NULL;
+  
+      if (win != NULL && varname != NULL)
+      {
+***************
+*** 11923,11936 ****
+  	curbuf = win->w_buffer;
+  
+  	if (*varname == '&')	/* window-local-option */
+! 	    get_option_tv(&varname, rettv, 1);
+  	else
+  	{
+  	    /* Look up the variable. */
+  	    /* Let getwinvar({nr}, "") return the "w:" dictionary. */
+  	    v = find_var_in_ht(&win->w_vars->dv_hashtab, 'w', varname, FALSE);
+  	    if (v != NULL)
+  		copy_tv(&v->di_tv, rettv);
+  	}
+  
+  	/* restore previous notion of curwin */
+--- 11927,11946 ----
+  	curbuf = win->w_buffer;
+  
+  	if (*varname == '&')	/* window-local-option */
+! 	{
+! 	    if (get_option_tv(&varname, rettv, 1) == OK)
+! 		done = TRUE;
+! 	}
+  	else
+  	{
+  	    /* Look up the variable. */
+  	    /* Let getwinvar({nr}, "") return the "w:" dictionary. */
+  	    v = find_var_in_ht(&win->w_vars->dv_hashtab, 'w', varname, FALSE);
+  	    if (v != NULL)
++ 	    {
+  		copy_tv(&v->di_tv, rettv);
++ 		done = TRUE;
++ 	    }
+  	}
+  
+  	/* restore previous notion of curwin */
+***************
+*** 11938,11943 ****
+--- 11948,11957 ----
+  	curbuf = curwin->w_buffer;
+      }
+  
++     if (!done && argvars[off + 2].v_type != VAR_UNKNOWN)
++ 	/* use the default return value */
++ 	copy_tv(&argvars[off + 2], rettv);
++ 
+      --emsg_off;
+  }
+  
+*** ../vim-7.3.897/src/testdir/test91.in	2013-02-20 21:11:14.000000000 +0100
+--- src/testdir/test91.in	2013-04-15 14:59:31.000000000 +0200
+***************
+*** 4,12 ****
+  STARTTEST
+  :so small.vim
+  :"
+! :" test for getbufvar()
+! :let b:var_num = 1234
+! :let def_num = 5678
+  :$put =string(getbufvar(1, 'var_num'))
+  :$put =string(getbufvar(1, 'var_num', def_num))
+  :$put =string(getbufvar(1, ''))
+--- 4,13 ----
+  STARTTEST
+  :so small.vim
+  :"
+! :" Test for getbufvar()
+! :" Use strings to test for memory leaks.
+! :let b:var_num = '1234'
+! :let def_num = '5678'
+  :$put =string(getbufvar(1, 'var_num'))
+  :$put =string(getbufvar(1, 'var_num', def_num))
+  :$put =string(getbufvar(1, ''))
+*** ../vim-7.3.897/src/testdir/test91.ok	2013-02-20 21:11:14.000000000 +0100
+--- src/testdir/test91.ok	2013-04-15 15:02:45.000000000 +0200
+***************
+*** 1,13 ****
+  start:
+! 1234
+! 1234
+! {'var_num': 1234}
+! {'var_num': 1234}
+! 5678
+  {}
+  {}
+  ''
+! 5678
+  0
+  0
+  'Dance'
+--- 1,13 ----
+  start:
+! '1234'
+! '1234'
+! {'var_num': '1234'}
+! {'var_num': '1234'}
+! '5678'
+  {}
+  {}
+  ''
+! '5678'
+  0
+  0
+  'Dance'
+*** ../vim-7.3.897/src/version.c	2013-04-15 14:44:53.000000000 +0200
+--- src/version.c	2013-04-15 15:14:22.000000000 +0200
+***************
+*** 730,731 ****
+--- 730,733 ----
+  {   /* Add new patch number below this line */
++ /**/
++     898,
+  /**/
+
+-- 
+If Apple would build a car...
+... it would be powered by the sun, be reliable, five times
+as fast and twice as easy to drive; but would only run on
+five percent of the roads.
+
+ /// 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