Skip to content

Commit efefde9

Browse files
committed
🚑️ zv: Check signature before serializing struct as a u8
This fixes a regression that was exposed by 56cbb1f. Fixes #1417.
1 parent 4f7a52e commit efefde9

File tree

2 files changed

+4
-10
lines changed

2 files changed

+4
-10
lines changed

zvariant/src/dbus/ser.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -326,22 +326,19 @@ where
326326
}
327327

328328
fn serialize_struct(self, _name: &'static str, len: usize) -> Result<Self::SerializeStruct> {
329-
if len == 0 {
330-
return StructSerializer::unit(self).map(StructSeqSerializer::Struct);
331-
}
332-
333329
self.0
334330
.add_padding(self.0.signature.alignment(self.0.ctxt.format()))?;
335331
match &self.0.signature {
336332
Signature::Variant => StructSerializer::variant(self).map(StructSeqSerializer::Struct),
337333
Signature::Array(_) => self.serialize_seq(Some(len)).map(StructSeqSerializer::Seq),
334+
Signature::U8 => StructSerializer::unit(self).map(StructSeqSerializer::Struct),
338335
Signature::Structure(_) => {
339336
StructSerializer::structure(self).map(StructSeqSerializer::Struct)
340337
}
341338
Signature::Dict { .. } => self.serialize_map(Some(len)).map(StructSeqSerializer::Map),
342339
_ => Err(Error::SignatureMismatch(
343340
self.0.signature.clone(),
344-
"a struct, array or variant".to_string(),
341+
"a struct, array, u8 or variant".to_string(),
345342
)),
346343
}
347344
}

zvariant/src/gvariant/ser.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -327,23 +327,20 @@ where
327327
}
328328

329329
fn serialize_struct(self, _name: &'static str, len: usize) -> Result<Self::SerializeStruct> {
330-
if len == 0 {
331-
return StructSerializer::unit(self).map(StructSeqSerializer::Struct);
332-
}
333-
334330
self.0
335331
.add_padding(self.0.signature.alignment(self.0.ctxt.format()))?;
336332
match &self.0.signature {
337333
Signature::Variant => StructSerializer::variant(self).map(StructSeqSerializer::Struct),
338334
Signature::Array(_) => self.serialize_seq(Some(len)).map(StructSeqSerializer::Seq),
335+
Signature::U8 => StructSerializer::unit(self).map(StructSeqSerializer::Struct),
339336
Signature::Structure(_) => {
340337
StructSerializer::structure(self).map(StructSeqSerializer::Struct)
341338
}
342339
Signature::Dict { .. } => self.serialize_map(Some(len)).map(StructSeqSerializer::Map),
343340
_ => {
344341
return Err(Error::SignatureMismatch(
345342
self.0.signature.clone(),
346-
"a struct, array or variant".to_string(),
343+
"a struct, array, u8 or variant".to_string(),
347344
));
348345
}
349346
}

0 commit comments

Comments
 (0)