From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 7EAA91FF144 for ; Tue, 10 Mar 2026 09:40:29 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 318A01395B; Tue, 10 Mar 2026 09:40:22 +0100 (CET) Message-ID: <6e243473-d6f0-4db9-b6f8-af3972d81d5e@proxmox.com> Date: Tue, 10 Mar 2026 09:40:09 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Beta Subject: Re: [PATCH common v3 2/5] section config: prepare for supporting UTF-8 encoded configurations To: Fiona Ebner , pve-devel@lists.proxmox.com References: <20260309154344.165878-1-f.ebner@proxmox.com> <20260309154344.165878-3-f.ebner@proxmox.com> Content-Language: en-US From: Dominik Csapak In-Reply-To: <20260309154344.165878-3-f.ebner@proxmox.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1773131984949 X-SPAM-LEVEL: Spam detection results: 0 AWL -1.026 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.408 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.819 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.903 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: PGBZXSVRMYPQHW5IO5W4I37LC45OIUX4 X-Message-ID-Hash: PGBZXSVRMYPQHW5IO5W4I37LC45OIUX4 X-MailFrom: d.csapak@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: On 3/9/26 4:43 PM, Fiona Ebner wrote: > 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. just to clarify, it will only contain wide characters if it contains code points bigger than 0xFF, but e.g. the symbol 'Ä' would be codepoint U+00C4 so even on decode it's smaller than 0xFF. (in utf-8 bytes it'd be 0xC3 0x84) it does not play a role here since we only want to be consistent within the parser + api, but in some cases it can make a difference e.g. when we calculate the digest on a value that is always utf8 encoded. i don't think this distinction warrants a new version, but if there is a new version, a better wording can maybe avoid confusion for a future reader of that commit message. > > Signed-off-by: Fiona Ebner > --- > > 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; >