Fix XML-RPC handling of undefined and empty values

ⓘ Normalize undefined and empty XML-RPC values during encoding and parsing, preventing uninitialized-value warnings and uncontrolled error-log growth.

https://github.com/webmin/webmin/issues/2793
This commit is contained in:
Ilia Ross
2026-07-13 15:07:49 +02:00
parent f564a3127d
commit 4601f268a0

View File

@@ -18,7 +18,7 @@ my ($base64) = &find_xmls("base64", $value, 1);
my ($struct) = &find_xmls("struct", $value, 1);
my ($array) = &find_xmls("array", $value, 1);
if ($scalar) {
return $scalar->[1]->[2];
return $scalar->[1]->[2] // "";
}
elsif ($date) {
# Need to decode date
@@ -26,7 +26,7 @@ elsif ($date) {
}
elsif ($base64) {
# Convert to binary
return &decode_base64($base64->[1]->[2]);
return &decode_base64($base64->[1]->[2] // "");
}
elsif ($struct) {
# Parse member names and values
@@ -35,7 +35,7 @@ elsif ($struct) {
my ($name) = &find_xmls("name", $member, 1);
my ($value) = &find_xmls("value", $member, 1);
my $perlv = &parse_xml_value($value);
$rv{$name->[1]->[2]} = $perlv;
$rv{$name->[1]->[2] // ""} = $perlv;
}
return \%rv;
}
@@ -51,7 +51,7 @@ elsif ($array) {
}
else {
# Fallback - just a string directly in the value
return $value->[1]->[2];
return $value->[1]->[2] // "";
}
}
@@ -60,6 +60,7 @@ else {
sub encode_xml_value
{
my ($perlv) = @_;
$perlv = "" if (!defined($perlv));
if (ref($perlv) eq "ARRAY") {
# Convert to array XML format
my $xmlrv = "<array>\n<data>\n";