summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2012-08-08 13:17:31 +0200
committerBram Moolenaar <Bram@vim.org>2012-08-08 13:17:31 +0200
commitc271c48e8043ec388487b7489fb4692a154791d8 (patch)
treed9143827f6043d4aadd877e1153fb05c4097d8b9
parente66822e3d1aa4eac1cb4b5a47a4a9c4a28581021 (diff)
downloadvim-git-c271c48e8043ec388487b7489fb4692a154791d8.tar.gz
updated for version 7.3.623v7.3.623
Problem: Perl 5.14 commands crash Vim on MS-Windows. Solution: Use perl_get_sv() instead of GvSV(). (Raymond Ko)
-rw-r--r--src/if_perl.xs18
-rw-r--r--src/version.c2
2 files changed, 20 insertions, 0 deletions
diff --git a/src/if_perl.xs b/src/if_perl.xs
index 57dbe4699..4dc80beaa 100644
--- a/src/if_perl.xs
+++ b/src/if_perl.xs
@@ -76,6 +76,12 @@
# define EXTERN_C
#endif
+#if (PERL_REVISION == 5) && (PERL_VERSION >= 14) && defined(_MSC_VER)
+/* Using PL_errgv to get the error message after perl_eval_sv() causes a crash
+ * with MSVC and Perl version 5.14. */
+# define AVOID_PL_ERRGV
+#endif
+
/* Compatibility hacks over */
static PerlInterpreter *perl_interp = NULL;
@@ -796,7 +802,11 @@ ex_perl(eap)
SvREFCNT_dec(sv);
+#ifdef AVOID_PL_ERRGV
+ err = SvPV(perl_get_sv("@", GV_ADD), length);
+#else
err = SvPV(GvSV(PL_errgv), length);
+#endif
FREETMPS;
LEAVE;
@@ -866,7 +876,11 @@ ex_perldo(eap)
sv_catpvn(sv, "}", 1);
perl_eval_sv(sv, G_DISCARD | G_NOARGS);
SvREFCNT_dec(sv);
+#ifdef AVOID_PL_ERRGV
+ str = SvPV(perl_get_sv("@", GV_ADD), length);
+#else
str = SvPV(GvSV(PL_errgv), length);
+#endif
if (length)
goto err;
@@ -880,7 +894,11 @@ ex_perldo(eap)
sv_setpv(GvSV(PL_defgv), (char *)ml_get(i));
PUSHMARK(sp);
perl_call_pv("VIM::perldo", G_SCALAR | G_EVAL);
+#ifdef AVOID_PL_ERRGV
+ str = SvPV(perl_get_sv("@", GV_ADD), length);
+#else
str = SvPV(GvSV(PL_errgv), length);
+#endif
if (length)
break;
SPAGAIN;
diff --git a/src/version.c b/src/version.c
index 8dd24bdc8..67ab5e726 100644
--- a/src/version.c
+++ b/src/version.c
@@ -715,6 +715,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 623,
+/**/
622,
/**/
621,