Login
RT #67116 - Crash in RegularExpressions::ProhibitUnusedCapture
authorTom Wyant <harryfmudd@comcast.net>
Thu, 31 Mar 2011 15:31:33 +0000 (15:31 +0000)
committerTom Wyant <harryfmudd@comcast.net>
Thu, 31 Mar 2011 15:31:33 +0000 (15:31 +0000)
This turned out to be a bug in the work that taught the policy to look
inside here documents -- the code assumed that the PPI::Token::HereDoc
heredoc() method returned the here document as a string, when it
actually returned an array. The self-test only passed because it used
one-line here documents.

Mea culpa, mea maxima culpa.

I'm afraid this is going to need another release. My apologies.

Changes
lib/Perl/Critic/Policy/RegularExpressions/ProhibitUnusedCapture.pm
t/RegularExpressions/ProhibitUnusedCapture.run

diff --git a/Changes b/Changes
index 1fbd37d..21feb02 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,6 +1,8 @@
 [1.xxx] Released on 2011-xx-xx
 
     Minor bits:
+    * Fatal error in RegularExpressions::ProhibitUnusedCapture here
+      document check.  RT #67116.
     * Internal POD error in Documentation::RequirePodLinksIncludeText.  Patch
       by Salvatore Bonaccorso.  RT #67012
 
index 038639a..cd111cd 100644 (file)
@@ -19,7 +19,8 @@ use Scalar::Util qw(refaddr);
 
 use Perl::Critic::Exception::Fatal::Internal qw{ throw_internal };
 use Perl::Critic::Utils qw{
-    :booleans :severities hashify precedence_of split_nodes_on_comma
+    :booleans :characters :severities hashify precedence_of
+    split_nodes_on_comma
 };
 use base 'Perl::Critic::Policy';
 
@@ -515,7 +516,8 @@ sub _mark_magic {
     if ( $elem->isa( 'PPI::Token::HereDoc' ) ) {
         $elem->content() =~ m/ \A << \s* ' /sxm
             or _mark_magic_in_content(
-            $elem->heredoc(), $re, $captures, $named_captures, $doc );
+            join( $EMPTY, $elem->heredoc() ), $re, $captures,
+            $named_captures, $doc );
         return;
     }
 
index 342c2d2..231f89b 100644 (file)
@@ -536,6 +536,19 @@ if ( /(a)/ || /(b)/ and /(c)/ ) {
 
 #-----------------------------------------------------------------------------
 
+## name RT #67116 - Incorrect check of here document.
+## failures 1
+## cut
+
+$x !~ /()/;
+<<X;
+.
+.
+.
+X
+
+#-----------------------------------------------------------------------------
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4