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 529811FF189 for ; Thu, 4 Sep 2025 12:03:39 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 35E832A90D; Thu, 4 Sep 2025 12:03:55 +0200 (CEST) Date: Thu, 4 Sep 2025 12:03:21 +0200 From: Wolfgang Bumiller To: Stefan Hanreich Message-ID: <2kiemxwkfycndgxtsf5lw47ym6t2c2jx3ivzd5gh7jruvq2lm2@qtaz5k6ykuan> References: <20250904081900.12655-1-s.hanreich@proxmox.com> <20250904081900.12655-2-s.hanreich@proxmox.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20250904081900.12655-2-s.hanreich@proxmox.com> X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1756980185180 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.075 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 SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pdm-devel] applied: [PATCH proxmox v4 1/2] schema: use i64 for minimum / maximum / default integer values X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Datacenter Manager development discussion Cc: pdm-devel@lists.proxmox.com Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" applied, thanks On Thu, Sep 04, 2025 at 10:18:26AM +0200, Stefan Hanreich wrote: > IntegerSchema used isize for the minimum / maximum parameters. On 32 > bit targets (wasm for instance) API defintions with minimum / maximum > sizes outside the i32 range would fail. > > This also changes the u64 deserialize to fail if it encounters a value > that cannot be represented as i64 instead of simply casting it to i64 > and moving on. > > Signed-off-by: Stefan Hanreich > --- > proxmox-schema/src/de/mod.rs | 3 +-- > proxmox-schema/src/de/verify.rs | 13 ++++++++----- > proxmox-schema/src/schema.rs | 18 +++++++++--------- > 3 files changed, 18 insertions(+), 16 deletions(-) > > diff --git a/proxmox-schema/src/de/mod.rs b/proxmox-schema/src/de/mod.rs > index eca835e3..1f14503e 100644 > --- a/proxmox-schema/src/de/mod.rs > +++ b/proxmox-schema/src/de/mod.rs > @@ -173,8 +173,7 @@ impl<'de> de::Deserializer<'de> for SchemaDeserializer<'de, '_> { > .map_err(|_| Error::msg(format!("not a boolean: {:?}", self.input)))?, > ), > Schema::Integer(schema) => { > - // FIXME: isize vs explicit i64, needs fixing in schema check_constraints api > - let value: isize = self > + let value: i64 = self > .input > .parse() > .map_err(|_| Error::msg(format!("not an integer: {:?}", self.input)))?; > diff --git a/proxmox-schema/src/de/verify.rs b/proxmox-schema/src/de/verify.rs > index 67a8c9e8..917f956b 100644 > --- a/proxmox-schema/src/de/verify.rs > +++ b/proxmox-schema/src/de/verify.rs > @@ -170,7 +170,7 @@ impl<'de> de::Visitor<'de> for Visitor { > > fn visit_i64(self, v: i64) -> Result { > match self.0 { > - Schema::Integer(schema) => match schema.check_constraints(v as isize) { > + Schema::Integer(schema) => match schema.check_constraints(v) { > Ok(()) => Ok(Verifier), > Err(err) => Err(E::custom(err)), > }, > @@ -180,10 +180,13 @@ impl<'de> de::Visitor<'de> for Visitor { > > fn visit_u64(self, v: u64) -> Result { > match self.0 { > - Schema::Integer(schema) => match schema.check_constraints(v as isize) { > - Ok(()) => Ok(Verifier), > - Err(err) => Err(E::custom(err)), > - }, > + Schema::Integer(schema) => { > + let val = v.try_into().or_else(|err| Err(E::custom(err)))?; > + match schema.check_constraints(val) { > + Ok(()) => Ok(Verifier), > + Err(err) => Err(E::custom(err)), > + } > + } > _ => Err(E::invalid_type(Unexpected::Unsigned(v), &self)), > } > } > diff --git a/proxmox-schema/src/schema.rs b/proxmox-schema/src/schema.rs > index 1b26c45b..e4ad971b 100644 > --- a/proxmox-schema/src/schema.rs > +++ b/proxmox-schema/src/schema.rs > @@ -228,11 +228,11 @@ impl BooleanSchema { > pub struct IntegerSchema { > pub description: &'static str, > /// Optional minimum. > - pub minimum: Option, > + pub minimum: Option, > /// Optional maximum. > - pub maximum: Option, > + pub maximum: Option, > /// Optional default. > - pub default: Option, > + pub default: Option, > } > > impl IntegerSchema { > @@ -250,17 +250,17 @@ impl IntegerSchema { > self > } > > - pub const fn default(mut self, default: isize) -> Self { > + pub const fn default(mut self, default: i64) -> Self { > self.default = Some(default); > self > } > > - pub const fn minimum(mut self, minimum: isize) -> Self { > + pub const fn minimum(mut self, minimum: i64) -> Self { > self.minimum = Some(minimum); > self > } > > - pub const fn maximum(mut self, maximum: isize) -> Self { > + pub const fn maximum(mut self, maximum: i64) -> Self { > self.maximum = Some(maximum); > self > } > @@ -269,7 +269,7 @@ impl IntegerSchema { > Schema::Integer(self) > } > > - pub fn check_constraints(&self, value: isize) -> Result<(), Error> { > + pub fn check_constraints(&self, value: i64) -> Result<(), Error> { > if let Some(minimum) = self.minimum { > if value < minimum { > bail!( > @@ -296,7 +296,7 @@ impl IntegerSchema { > /// Verify JSON value using an `IntegerSchema`. > pub fn verify_json(&self, data: &Value) -> Result<(), Error> { > if let Some(value) = data.as_i64() { > - self.check_constraints(value as isize) > + self.check_constraints(value) > } else { > bail!("Expected integer value."); > } > @@ -1406,7 +1406,7 @@ impl Schema { > Value::Bool(res) > } > Schema::Integer(integer_schema) => { > - let res: isize = value_str.parse()?; > + let res: i64 = value_str.parse()?; > integer_schema.check_constraints(res)?; > Value::Number(res.into()) > } > -- > 2.47.2 _______________________________________________ pdm-devel mailing list pdm-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel