Skip to content

Commit 423c2cf

Browse files
committed
Fix RT issue 80273
1 parent 8ef1c52 commit 423c2cf

File tree

2 files changed

+86
-9
lines changed

2 files changed

+86
-9
lines changed

Generator.pm

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -708,9 +708,9 @@ sub xmlpi {
708708
while (my($k, $v) = each %atts) {
709709
$this->XML::Generator::util::ck_syntax($k);
710710
XML::Generator::util::escape($v,
711-
XML::Generator::util::ESCAPE_FILTER_INVALID_CHARS() |
712711
XML::Generator::util::ESCAPE_ATTR() |
713712
$this->{'escape'});
713+
XML::Generator::util::filter($v);
714714
$xml .= qq{ $k="$v"};
715715
}
716716
}
@@ -1133,9 +1133,7 @@ sub c_tag {
11331133
: $arg->{'pretty'}
11341134
? " " x $arg->{'pretty'}
11351135
: "";
1136-
if ($arg->{'filter_invalid_chars'}) {
1137-
$escape |= ESCAPE_FILTER_INVALID_CHARS;
1138-
}
1136+
my $filter = $arg->{'filter_invalid_chars'};
11391137

11401138
my $blessClass = $indent ? 'XML::Generator::pretty' : 'XML::Generator::overload';
11411139

@@ -1156,11 +1154,12 @@ sub c_tag {
11561154
}
11571155

11581156
# Deal with escaping if required
1159-
if ($escape) {
1157+
if ($escape || $filter) {
11601158
if ($attr) {
11611159
foreach my $key (keys %{$attr}) {
11621160
next unless defined($attr->{$key});
11631161
XML::Generator::util::escape($attr->{$key}, ESCAPE_ATTR() | $escape);
1162+
XML::Generator::util::filter($attr->{$key}) if ($filter);
11641163
}
11651164
}
11661165
for (@args) {
@@ -1171,7 +1170,8 @@ sub c_tag {
11711170
# un-ref it
11721171
$_ = $$_;
11731172
} elsif (! UNIVERSAL::isa($_, 'XML::Generator::overload') ) {
1174-
XML::Generator::util::escape($_, $escape);
1173+
XML::Generator::util::escape($_, $escape) if $escape ;
1174+
XML::Generator::util::filter($_) if $filter;
11751175
}
11761176
}
11771177
} else {
@@ -1401,9 +1401,6 @@ sub escape {
14011401
if ($f & ESCAPE_HIGH_BIT) {
14021402
$_[0] =~ s/([\200-\377])/'&#'.ord($1).';'/ge;
14031403
}
1404-
if ($f & ESCAPE_FILTER_INVALID_CHARS) {
1405-
filter($_[0]);
1406-
}
14071404
}
14081405

14091406
sub filter { $_[0] =~ tr/\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0B\x0C\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F\x7F\x80\x81\x82\x83\x84\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F//d }

t/Issue-80273.t

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
use strict;
2+
3+
use Test::More qw/ tests 1 /;
4+
5+
use XML::Generator;
6+
7+
my $XML = XML::Generator->new(conformance => "strict");
8+
9+
my $result = $XML->record(join "\n", map { my ($k, $v) = @{$_}; $XML->$k($v); }
10+
(
11+
[threat => 1],
12+
[desc => "godzilla"],
13+
[value => "http://y.ahoooooooooo.it/0weifjwef"],
14+
[detected => "2012-10-16 00:00:00"]
15+
));
16+
17+
my $expected_result = '<record><threat>1</threat>
18+
<desc>godzilla</desc>
19+
<value>http://y.ahoooooooooo.it/0weifjwef</value>
20+
<detected>2012-10-16 00:00:00</detected></record>';
21+
22+
ok($result eq $expected_result, 'Got expected results');
23+
exit;
24+
$XML = XML::Generator->new();
25+
26+
$result = $XML->record(
27+
join "\n", map { my ($k, $v) = @{$_}; $XML->$k($v); }
28+
(
29+
[threat => 1],
30+
[desc => "gozdilla"],
31+
[value => "http://y.ahoooooooooo.it/0weifjwef"],
32+
[detected => "2012-10-16 00:00:00"]
33+
));
34+
35+
$expected_result = '<record><threat>1</threat>
36+
<desc>gozdilla</desc>
37+
<value>http://y.ahoooooooooo.it/0weifjwef</value>
38+
<detected>2012-10-16 00:00:00</detected></record>';
39+
40+
ok($result eq $expected_result, 'Got expected results');
41+
42+
my $XML = XML::Generator->new(conformance => "strict", pretty => 1);
43+
44+
$result = $XML->record(
45+
map { my ($k, $v) = @{$_}; $XML->$k($v); }
46+
(
47+
[threat => 1],
48+
[desc => "godzilla"],
49+
[value => "http://y.ahoooooooooo.it/0weifjwef"],
50+
[detected => "2012-10-16 00:00:00"]
51+
));
52+
53+
$expected_result = '<record>
54+
<threat>1</threat>
55+
<desc>godzilla</desc>
56+
<value>http://y.ahoooooooooo.it/0weifjwef</value>
57+
<detected>2012-10-16 00:00:00</detected>
58+
</record>';
59+
60+
ok($result eq $expected_result, 'Got expected results');
61+
62+
$XML = XML::Generator->new(conformance => "strict", pretty => 1);
63+
64+
$result = $XML->record(
65+
map { my ($k, $v) = @{$_}; $XML->$k($v); }
66+
(
67+
[threat => 1],
68+
[desc => "godzilla"],
69+
[value => "http://y.ahoooooooooo.it/0weifjwef"],
70+
[detected => "2012-10-16 00:00:00"]
71+
));
72+
73+
$expected_result = '<record>
74+
<threat>1</threat>
75+
<desc>godzilla</desc>
76+
<value>http://y.ahoooooooooo.it/0weifjwef</value>
77+
<detected>2012-10-16 00:00:00</detected>
78+
</record>';
79+
80+
ok($result eq $expected_result, 'Got expected results');

0 commit comments

Comments
 (0)