Configurations registered as UTF-8 will be decoded after reading to Perl's internal string format and then contain wide characters. The Digest::SHA::sha1_hex() function croaks on wide characters, so encode again before calling the function if there are wide characters.
Signed-off-by: Fiona Ebner <[email protected]> --- Changes in v3: * use strict 'UTF-8' encoding. src/PVE/SectionConfig.pm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/PVE/SectionConfig.pm b/src/PVE/SectionConfig.pm index 84ff81a..ed5a632 100644 --- a/src/PVE/SectionConfig.pm +++ b/src/PVE/SectionConfig.pm @@ -103,6 +103,7 @@ use warnings; use Carp; use Digest::SHA; +use Encode qw(encode); use PVE::Exception qw(raise_param_exc); use PVE::JSONSchema qw(get_standard_option); @@ -1214,7 +1215,11 @@ sub parse_config { $raw = '' if !defined($raw); - my $digest = Digest::SHA::sha1_hex($raw); + my $bytes = $raw; + # Digest::SHA croaks on wide characters + $bytes = encode('UTF-8', $raw) if $raw =~ /[^\x00-\xFF]/; + + my $digest = Digest::SHA::sha1_hex($bytes); my $pri = 1; -- 2.47.3
