]> git.vpit.fr Git - perl/modules/indirect.git/commitdiff
Fix a rare edge case for package whose names are prefix of 'main'
authorVincent Pit <vince@profvince.com>
Sun, 19 Oct 2008 23:42:54 +0000 (01:42 +0200)
committerVincent Pit <vince@profvince.com>
Sun, 19 Oct 2008 23:45:01 +0000 (01:45 +0200)
indirect.xs
t/20-bad.t

index c6e18e7204dbde48f30b5bdafebe646e988ad044..f8312ac889a9fe5982ee33dcc28d35d0bbe7fd02 100644 (file)
@@ -183,15 +183,15 @@ STATIC OP *indirect_ck_rv2sv(pTHX_ OP *o) {
    const char *stash = HvNAME_get(PL_curstash);
    STRLEN stashlen = HvNAMELEN_get(PL_curstash);
 
-   if ((len < stashlen + 2) || strnNE(name, stash, stashlen)) {
+   if ((len < stashlen + 2) || strnNE(name, stash, stashlen)
+       || name[stashlen] != ':' || name[stashlen+1] != ':') {
     /* Failed again ? Try to remove main */
     stash = "main";
     stashlen = 4;
-    if ((len < stashlen + 2) || strnNE(name, stash, stashlen))
+    if ((len < stashlen + 2) || strnNE(name, stash, stashlen)
+        || name[stashlen] != ':' || name[stashlen+1] != ':')
      goto done;
    }
-   if (name[stashlen] != ':' || name[stashlen+1] != ':')
-    goto done;
 
    sv_setpvn(sv, "$", 1);
    stashlen += 2;
index 01f6a283943ae950aef2cbf377fccb4009c2b8bc..a545108a6583d1dbd67747c038b34b601c2c2ad3 100644 (file)
@@ -9,7 +9,7 @@ package main;
 use strict;
 use warnings;
 
-use Test::More tests => 46 * 6 + 2;
+use Test::More tests => 47 * 6 + 2;
 
 my ($obj, $x);
 our ($y, $bloop);
@@ -163,6 +163,9 @@ meh $main::bloop;
 package sploosh;
 meh $bloop;
 ####
+package ma;
+meh $bloop;
+####
 package sploosh;
 our $sploosh;
 package main;