RT-116192 - If a directory in @INC already has a trailing '/', don't add another.
authorMatthew Horsfall (alh) <wolfsage@gmail.com>
Thu, 27 Dec 2012 15:38:08 +0000 (10:38 -0500)
committerFather Chrysostomos <sprout@cpan.org>
Sun, 10 Feb 2013 20:19:15 +0000 (12:19 -0800)
MANIFEST
pp_ctl.c
t/run/flib/broken.pm [new file with mode: 0644]
t/run/switchM.t [new file with mode: 0644]

index a4bc928..886aaf2 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -5540,6 +5540,7 @@ t/run/cloexec.t                   Test close-on-exec.
 t/run/dtrace.pl                        For dtrace.t
 t/run/dtrace.t                 Test for DTrace probes
 t/run/exit.t                   Test perl's exit status.
+t/run/flib/broken.pm           Bad .pm file for switchM.t
 t/run/fresh_perl.t             Tests that require a fresh perl.
 t/run/locale.t         Tests related to locale handling
 t/run/mad.t                    Test vs MAD environment
@@ -5555,6 +5556,7 @@ t/run/switches.t          Tests for the other switches (-0, -l, -c, -s, -M, -m, -V, -v,
 t/run/switchF1.t               Pathological tests for the -F switch
 t/run/switchF.t                        Test the -F switch
 t/run/switchI.t                        Test the -I switch
+t/run/switchM.t                        Test the -M switch
 t/run/switchn.t                        Test the -n switch
 t/run/switchp.t                        Test the -p switch
 t/run/switcht.t                        Test the -t switch
index d5028c8..616c7c1 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -3889,7 +3889,12 @@ PP(pp_require)
 
                        memcpy(tmp, dir, dirlen);
                        tmp +=dirlen;
-                       *tmp++ = '/';
+
+                       /* Avoid '<dir>//<file>' */
+                       if (!dirlen || *(tmp-1) != '/') {
+                           *tmp++ = '/';
+                       }
+
                        /* name came from an SV, so it will have a '\0' at the
                           end that we can copy as part of this memcpy().  */
                        memcpy(tmp, name, len + 1);
diff --git a/t/run/flib/broken.pm b/t/run/flib/broken.pm
new file mode 100644 (file)
index 0000000..18f4d45
--- /dev/null
@@ -0,0 +1,8 @@
+package broken;
+
+use strict;
+use warnings;
+
+$x = 1;
+
+1;
diff --git a/t/run/switchM.t b/t/run/switchM.t
new file mode 100644 (file)
index 0000000..72e8908
--- /dev/null
@@ -0,0 +1,19 @@
+#!./perl
+
+BEGIN {
+    chdir 't' if -d 't';
+    @INC = '../lib';
+}
+use strict;
+
+require './test.pl';
+
+plan(2);
+
+like(runperl(switches => ['-Irun/flib', '-Mbroken'], stderr => 1),
+     qr/^Global symbol "\$x" requires explicit package name at run\/flib\/broken.pm line 6\./,
+     "Ensure -Irun/flib produces correct filename in warnings");
+
+like(runperl(switches => ['-Irun/flib/', '-Mbroken'], stderr => 1),
+     qr/^Global symbol "\$x" requires explicit package name at run\/flib\/broken.pm line 6\./,
+     "Ensure -Irun/flib/ produces correct filename in warnings");