Re: BUG: newlines within attributes?

Bruno Postle <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.petal
Message-ID <[email protected]>
On Fri 09-Sep-2005 at 18:13 +0100, Mark Holland wrote:
>
> I, and the guys doing Petal here, don't tend to split Petal attributes 
> across lines, so I'm sure it's something that could go unnoticed...

We have lots of stuff like this:

  <div petal:define="a string: ay;
                     b string: bee;
                     c string: cee;">

..but the Petal canonicaliser splits the attribute on the 
semi-colons and turns it into three separate statements, which then 
pass through the system happily.

The bug seems to be that the canonicaliser assumes that the 
code-generator can accept tags that span multiple lines.  Whereas 
the code-generator assumes that all canonicalised tags are on a 
single line.

Since I can think of no reason why we shouldn't allow newlines to 
pass through, this patch fixes the code-generator and is less 
intrusive than the previous one:

Index: lib/Petal/CodeGenerator.pm
===================================================================
RCS file: /var/spool/cvs/Petal/lib/Petal/CodeGenerator.pm,v
retrieving revision 1.46
diff -u -r1.46 CodeGenerator.pm
--- lib/Petal/CodeGenerator.pm  9 Jul 2004 11:09:34 -0000       1.46
+++ lib/Petal/CodeGenerator.pm  10 Sep 2005 20:06:10 -0000
@@ -162,9 +162,9 @@

     foreach $token (@{$tokens})
     {
-        if ($token =~ /$PI_RE/)
+        if ($token =~ /$PI_RE/s)
         {
-           ($token_name) = $token =~ /$PI_RE/;
+           ($token_name) = $token =~ /$PI_RE/s;
            my @atts1 = $token =~ /(\S+)\=\"(.*?)\"/gos;
            my @atts2 = $token =~ /(\S+)\=\'(.*?)\'/gos;
            %token_hash = (@atts1, @atts2);
091_attribute-newline.t (text/plain, 483 B)
#!/usr/bin/perl
use warnings;
use strict;
use lib ('lib');
use Test::More 'no_plan';
use Petal;

$Petal::BASE_DIR     = './t/data/';
$Petal::DISK_CACHE   = 0;
$Petal::MEMORY_CACHE = 0;
$Petal::TAINT        = 1;

my $string = Petal->new ('attribute-newline.xml')->process ();
like ($string, '/>apple</', '');
like ($string, '/>orange</', '');
like ($string, '/>plum</', '');
like ($string, '/>pear</', '');
like ($string, '/>ay bee cee</', '');
like ($string, '/>ex why zed</', '');
attribute-newline.xml (text/plain, 640 B)
<stuff xmlns:petal="http://purl.org/petal/1.0/">

<div petal:define="foo
string: apple">$foo</div>
<div petal:define="bar string: orange">$bar</div>

<div petal:content="string:
plum">xxx</div>
<div petal:content="string: pear">xxx</div>

<div petal:define="
         a string: ay;
         b string: bee;
         c string: cee;
      "><span petal:replace="a" /> <span petal:replace="b" /> <span petal:replace="c" /></div>

<div petal:define="
         x
         string: ex;
         y string:
         why;
         z string: zed;
      "><span petal:replace="x" /> <span petal:replace="y" /> <span petal:replace="z" /></div>

</stuff>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.