Skip to content

Commit 8ef1c52

Browse files
committed
Fixes RT 70986 and provides test
1 parent 1ac2792 commit 8ef1c52

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

Generator.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1390,7 +1390,7 @@ sub escape {
13901390
$_[0] =~ s/\\>/>/g;
13911391
}
13921392
if ($f & ESCAPE_ATTR) {
1393-
$_[0] =~ s/([^\\]|^)"/$1"/g;
1393+
$_[0] =~ s/(?<!\\)"/&quot;/g;
13941394
$_[0] =~ s/\\"/"/g;
13951395
if ($f & ESCAPE_APOS) {
13961396
$_[0] =~ s/([^\\]|^)'/$1&apos;/g;

t/Issue-70986.t

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
use Test::More qw/ tests 12 /;
2+
3+
use XML::Generator;
4+
$s=XML::Generator->new( qw/ escape unescaped conformance strict pretty 2 /);
5+
6+
my $xml = $s->testme({ message => 'x"y'});
7+
ok($xml eq '<testme message="x&quot;y" />');
8+
9+
$xml = $s->testme({ message => 'x\"y'});
10+
ok($xml eq '<testme message="x"y" />');
11+
12+
$xml = $s->testme({ message => 'x""y' });
13+
ok($xml eq '<testme message="x&quot;&quot;y" />');
14+
15+
$xml = $s->testme({ message => '"x""y' });
16+
ok($xml eq '<testme message="&quot;x&quot;&quot;y" />');
17+
18+
$xml = $s->testme({message => 'x"\"y'});
19+
ok($xml eq '<testme message="x&quot;"y" />');
20+
21+
$xml = $s->testme({message => 'x\"\"y'});
22+
ok($xml eq '<testme message="x""y" />');
23+
24+
$s=XML::Generator->new( qw/ escape always conformance strict pretty 2 /);
25+
$xml = $s->testme({ message => 'x"y'});
26+
ok($xml eq '<testme message="x&quot;y" />');
27+
28+
$xml = $s->testme({ message => 'x\"y'});
29+
ok($xml eq '<testme message="x\&quot;y" />');
30+
31+
$xml = $s->testme({ message => 'x""y' });
32+
ok($xml eq '<testme message="x&quot;&quot;y" />');
33+
34+
$xml = $s->testme({ message => '"x""y' });
35+
ok($xml eq '<testme message="&quot;x&quot;&quot;y" />');
36+
37+
$xml = $s->testme({message => 'x"\"y'});
38+
ok($xml eq '<testme message="x&quot;\&quot;y" />');
39+
40+
$xml = $s->testme({message => 'x\"\"y'});
41+
ok($xml eq '<testme message="x\&quot;\&quot;y" />');
42+
done_testing;

0 commit comments

Comments
 (0)