This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Tainted dirs on VMS when not under DCL.
authorCraig A. Berry <craigberry@mac.com>
Mon, 5 Sep 2016 02:10:06 +0000 (21:10 -0500)
committerCraig A. Berry <craigberry@mac.com>
Mon, 5 Sep 2016 13:17:00 +0000 (08:17 -0500)
Since 483efd0abe3 the path delimiter is a ':' instead of '|' on
VMS when running under a Unix shell.  So use that as a guide
to whether we should use a colon or a slash to detect relative
directories that should be tainted.

mg.c

diff --git a/mg.c b/mg.c
index 8b182e6..85e3175 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -1212,8 +1212,8 @@ Perl_magic_setenv(pTHX_ SV *sv, MAGIC *mg)
                char tmpbuf[256];
                Stat_t st;
                I32 i;
-#ifdef VMS  /* Hmm.  How do we get $Config{path_sep} from C? */
-               const char path_sep = '|';
+#ifdef __VMS  /* Hmm.  How do we get $Config{path_sep} from C? */
+               const char path_sep = PL_perllib_sep;
 #else
                const char path_sep = ':';
 #endif
@@ -1221,8 +1221,11 @@ Perl_magic_setenv(pTHX_ SV *sv, MAGIC *mg)
                             s, strend, path_sep, &i);
                s++;
                if (i >= (I32)sizeof tmpbuf   /* too long -- assume the worst */
-#ifdef VMS
-                     || !strchr(tmpbuf, ':') /* no colon thus no device name -- assume relative path */
+#ifdef __VMS
+                     /* no colon thus no device name -- assume relative path */
+                     || (PL_perllib_sep != ':' && !strchr(tmpbuf, ':'))
+                     /* Using Unix separator, e.g. under bash, so act line Unix */
+                     || (PL_perllib_sep == ':' && *tmpbuf != '/')
 #else
                      || *tmpbuf != '/'       /* no starting slash -- assume relative path */
 #endif