Fix to normalized XML-RPC scalar tag names
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled

https://github.com/webmin/webmin/pull/2811
This commit is contained in:
Ilia Ross
2026-08-05 15:17:21 +02:00
parent 3be9ada0c8
commit 137fbd5768
2 changed files with 14 additions and 5 deletions

View File

@@ -228,6 +228,14 @@ subtest 'parse_xml_value' => sub {
'<array><data><value><int>1</int></value><value><string>x</string></value></data></array>'));
is(ref($a), 'ARRAY', 'array -> arrayref');
is_deeply($a, [1, 'x'], 'array elements parsed in order');
# Scalar tags must retain their type when a nested value is later encoded.
require JSON::PP;
my $typed = parse_xml_value(value_tree(
'<struct><member><name>integer</name><value><int>1800</int></value></member><member><name>boolean</name><value><boolean>1</boolean></value></member><member><name>double</name><value><double>2.5</double></value></member><member><name>string</name><value><string>1800</string></value></member></struct>'));
is(JSON::PP->new->canonical->encode($typed),
'{"boolean":1,"double":2.5,"integer":1800,"string":"1800"}',
'nested scalar types preserved for JSON');
};
# Round-trip: encode_xml_value then parse_xml_value should reproduce the

View File

@@ -18,13 +18,14 @@ my ($base64) = &find_xmls("base64", $value, 1);
my ($struct) = &find_xmls("struct", $value, 1);
my ($array) = &find_xmls("array", $value, 1);
if ($scalar) {
my ($type, $content) = ($scalar->[0], $scalar->[1]->[2] // "");
my ($type, $content) = ($scalar->[0], $scalar->[1]->[2] // "");
$type = lc($type);
return int($content) if ($type eq "int" || $type eq "i4");
return $content ? 1 : 0 if ($type eq "boolean");
return $content + 0.0 if ($type eq "double");
return int($content) if ($type eq "int" || $type eq "i4");
return $content ? 1 : 0 if ($type eq "boolean");
return $content + 0.0 if ($type eq "double");
return $content;
return $content;
}
elsif ($date) {
# Need to decode date