RT-121512 - Allow -I/dir/ with trailing slash to find .pmc files.
authorMatthew Horsfall (alh) <wolfsage@gmail.com>
Mon, 31 Mar 2014 12:25:33 +0000 (08:25 -0400)
committerMatthew Horsfall (alh) <wolfsage@gmail.com>
Mon, 7 Apr 2014 16:46:26 +0000 (12:46 -0400)
6b0bdd7f2041803dc3ec72b53d28052705861967 updated -I to not add a
trailing '/' if one was already present, but failed to update the
length of the resulting SV to account for the lack of another character.
This caused later checks based off of that length to fail (in this case,
seeing if the last 3 characters of the string are .pm).

MANIFEST
pp_ctl.c
t/run/flib/t2.pm [new file with mode: 0644]
t/run/flib/t2.pmc [new file with mode: 0644]
t/run/switchM.t

index 07d42e2..b27423b 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -5445,6 +5445,8 @@ 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/flib/t2.pm               Test for .pmcs with -I/dir/
+t/run/flib/t2.pmc              Test for .pmcs with -I/dir/
 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
index 3c643d7..e13e450 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -3999,6 +3999,9 @@ PP(pp_require)
                        /* Avoid '<dir>//<file>' */
                        if (!dirlen || *(tmp-1) != '/') {
                            *tmp++ = '/';
+                       } else {
+                           /* So SvCUR_set reports the correct length below */
+                           dirlen--;
                        }
 
                        /* name came from an SV, so it will have a '\0' at the
diff --git a/t/run/flib/t2.pm b/t/run/flib/t2.pm
new file mode 100644 (file)
index 0000000..172a14e
--- /dev/null
@@ -0,0 +1,5 @@
+package t2;
+
+sub id { "t2pm" }
+
+1;
diff --git a/t/run/flib/t2.pmc b/t/run/flib/t2.pmc
new file mode 100644 (file)
index 0000000..e3894bc
--- /dev/null
@@ -0,0 +1,5 @@
+package t2;
+
+sub id { "t2pmc" }
+
+1;
index 72e8908..6a75100 100644 (file)
@@ -8,7 +8,7 @@ use strict;
 
 require './test.pl';
 
-plan(2);
+plan(4);
 
 like(runperl(switches => ['-Irun/flib', '-Mbroken'], stderr => 1),
      qr/^Global symbol "\$x" requires explicit package name at run\/flib\/broken.pm line 6\./,
@@ -17,3 +17,11 @@ like(runperl(switches => ['-Irun/flib', '-Mbroken'], stderr => 1),
 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', '-Mt2', '-e "print t2::id()"'], stderr => 1),
+     qr/^t2pmc$/,
+     "Ensure -Irun/flib loads pmc");
+
+like(runperl(switches => ['-Irun/flib/', '-Mt2', '-e "print t2::id()"'], stderr => 1),
+     qr/^t2pmc$/,
+     "Ensure -Irun/flib/ loads pmc");