patch 7.4.1746
Problem: Memory leak in Perl.
Solution: Decrement the reference count. Add a test. (Damien)
diff --git a/src/if_perl.xs b/src/if_perl.xs
index b091bf7..23246a5 100644
--- a/src/if_perl.xs
+++ b/src/if_perl.xs
@@ -844,6 +844,7 @@
else
rv = newBUFrv(newSV(0), curbuf);
sv_setsv(sv, rv);
+ SvREFCNT_dec(SvRV(rv));
return 0;
}
#endif /* !PROTO */
diff --git a/src/testdir/test_perl.vim b/src/testdir/test_perl.vim
index b523805..da47ab1 100644
--- a/src/testdir/test_perl.vim
+++ b/src/testdir/test_perl.vim
@@ -34,7 +34,7 @@
endtry
call assert_true(0, 'no exception for `perleval("'.a:expr.'")`')
return ''
-endf
+endfunc
function Test_perleval()
call assert_false(perleval('undef'))
@@ -73,7 +73,7 @@
call assert_equal('*VIM', perleval('"*VIM"'))
call assert_true(perleval('\\0') =~ 'SCALAR(0x\x\+)')
-endf
+endfunc
function Test_perldo()
sp __TEST__
@@ -82,7 +82,7 @@
1
call assert_false(search('\Cperl'))
bw!
-endf
+endfunc
function Test_VIM_package()
perl VIM::DoCommand('let l:var = "foo"')
@@ -91,7 +91,7 @@
set noet
perl VIM::SetOption('et')
call assert_true(&et)
-endf
+endfunc
function Test_stdio()
redir =>l:out
@@ -102,4 +102,22 @@
EOF
redir END
call assert_equal(['&VIM::Msg', 'STDOUT', 'STDERR'], split(l:out, "\n"))
-endf
+endfunc
+
+function Test_SvREFCNT()
+ new t
+ perl <<--perl
+ my ($b, $w);
+ $b = $curbuf for 0 .. 10;
+ $w = $curwin for 0 .. 10;
+ VIM::DoCommand('bw! t');
+ if (exists &Internals::SvREFCNT) {
+ my $cb = Internals::SvREFCNT($$b);
+ my $cw = Internals::SvREFCNT($$w);
+ VIM::Eval("assert_equal(2, $cb)");
+ VIM::Eval("assert_equal(2, $cw)");
+ }
+ VIM::Eval("assert_false($$b)");
+ VIM::Eval("assert_false($$w)");
+--perl
+endfunc
diff --git a/src/version.c b/src/version.c
index bfb64e6..74e5f92 100644
--- a/src/version.c
+++ b/src/version.c
@@ -749,6 +749,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1746,
+/**/
1745,
/**/
1744,