From bd310c38e820be65136bd529a15ae25ead2333ab Mon Sep 17 00:00:00 2001 From: Henri Chataing Date: Wed, 21 Oct 2026 10:29:46 +0000 Subject: [PATCH] cxx: Return serialization status from Builder::Serialize --- pdl-compiler/scripts/packet_runtime.h | 2 +- pdl-compiler/src/backends/cxx.rs | 82 +- pdl-compiler/tests/generated/cxx/be_backend.h | 911 ++++++++++++++---- pdl-compiler/tests/generated/cxx/le_backend.h | 911 ++++++++++++++---- 4 files changed, 1489 insertions(+), 417 deletions(-) diff --git a/pdl-compiler/scripts/packet_runtime.h b/pdl-compiler/scripts/packet_runtime.h index 555d092f..d8846d1d 100644 --- a/pdl-compiler/scripts/packet_runtime.h +++ b/pdl-compiler/scripts/packet_runtime.h @@ -125,7 +125,7 @@ class Builder { /// Method implemented by generated packet builders. /// The packet fields are concatenated to the output vector. - virtual void Serialize(std::vector&) const {} + virtual bool Serialize(std::vector&) const { return true; } /// Method implemented by generated packet builders. /// Returns the size of the serialized packet in bytes. diff --git a/pdl-compiler/src/backends/cxx.rs b/pdl-compiler/src/backends/cxx.rs index 64f7708a..3817105d 100644 --- a/pdl-compiler/src/backends/cxx.rs +++ b/pdl-compiler/src/backends/cxx.rs @@ -1431,12 +1431,18 @@ impl<'a> FieldSerializer<'a> { match &field.desc { ast::FieldDesc::Scalar { width, .. } => { let ty = get_cxx_scalar_type(*width); + let var_expr = field_var.as_ref().unwrap(); + if !matches!(*width, 8 | 16 | 32 | 64) { + self.append(&format!("if (*{} > {}) {{", var_expr, mask(*width))); + self.append(" return false;"); + self.append("}"); + } self.append(&format!( "pdl::packet::Builder::write_{}<{}, {}>(output, *{});", byteorder, ty, width / 8, - field_var.as_ref().unwrap() + var_expr )); } ast::FieldDesc::Typedef { type_id, .. } => { @@ -1453,9 +1459,11 @@ impl<'a> FieldSerializer<'a> { )); } else { self.append(&format!( - "{0}->Serialize(output);", + "if (!{0}->Serialize(output)) {{", field_var.as_ref().unwrap() )); + self.append(" return false;"); + self.append("}"); } } _ => {} @@ -1466,8 +1474,16 @@ impl<'a> FieldSerializer<'a> { let width = self.schema.field_size(field.key).static_().unwrap(); let shift = self.shift; match &field.desc { - ast::FieldDesc::Scalar { .. } => { - self.values.push((format!("{} & {}", field_var.unwrap(), mask(width)), shift)); + ast::FieldDesc::Scalar { id, .. } => { + let var_expr = field_var.unwrap(); + if !parent_constraints.iter().any(|c| c.id == *id) + && !matches!(width, 8 | 16 | 32 | 64) + { + self.append(&format!("if ({} > {}) {{", var_expr, mask(width))); + self.append(" return false;"); + self.append("}"); + } + self.values.push((format!("{} & {}", var_expr, mask(width)), shift)); } ast::FieldDesc::FixedScalar { value, .. } => { self.values.push((format!("{:#x}", value), shift)); @@ -1490,7 +1506,7 @@ impl<'a> FieldSerializer<'a> { self.values.push((field_var.unwrap(), shift)); } } - ast::FieldDesc::Size { field_id, .. } => { + ast::FieldDesc::Size { field_id, width, .. } => { let field_name = if field_id == "_payload_" || field_id == "_body_" { "payload" } else { @@ -1498,17 +1514,28 @@ impl<'a> FieldSerializer<'a> { }; let size_expr = self.get_payload_field_size(var, field_id, decl); self.append(&format!("size_t {field_name}_size = {size_expr};")); + if *width < 64 { + self.append(&format!("if ({field_name}_size > {}) {{", mask(*width))); + self.append(" return false;"); + self.append("}"); + } self.values.push((format!("{}_size", field_name), shift)); } - ast::FieldDesc::Count { field_id, .. } => { + ast::FieldDesc::Count { field_id, width, .. } => { let f = self .scope .iter_fields(decl) .find(|f| f.id() == Some(field_id)) .expect("Field not found"); - self.values.push((format!("{}.size()", get_field_expr(f)), shift)); + let array_expr = get_field_expr(f); + if *width < 64 { + self.append(&format!("if ({array_expr}.size() > {}) {{", mask(*width))); + self.append(" return false;"); + self.append("}"); + } + self.values.push((format!("{array_expr}.size()"), shift)); } - ast::FieldDesc::ElementSize { field_id, .. } => { + ast::FieldDesc::ElementSize { field_id, width, .. } => { let f = self .scope .iter_fields(decl) @@ -1526,6 +1553,23 @@ impl<'a> FieldSerializer<'a> { _ => format!("{array_expr}.empty() ? 0 : {array_expr}[0].GetSize()"), }; self.append(&format!("size_t {field_name}_element_size = {size_expr};")); + if !matches!(element_size, analyzer::ElementSize::Static(_)) { + self.append(&format!("for (auto const& element : {array_expr}) {{")); + self.append(&format!( + " if (element.GetSize() != {field_name}_element_size) {{" + )); + self.append(" return false;"); + self.append(" }"); + self.append("}"); + } + if *width < 64 { + self.append(&format!( + "if ({field_name}_element_size > {}) {{", + mask(*width) + )); + self.append(" return false;"); + self.append("}"); + } self.values.push((format!("{}_element_size", field_name), shift)); } ast::FieldDesc::Flag { .. } => { @@ -1555,7 +1599,11 @@ impl<'a> FieldSerializer<'a> { let backing_type = get_cxx_scalar_type(*width); self.append(&format!("pdl::packet::Builder::write_{}<{}, {}>(output, static_cast<{}>(element));", byteorder, backing_type, width / 8, backing_type)); } - _ => self.append("element.Serialize(output);"), + _ => { + self.append("if (!element.Serialize(output)) {"); + self.append(" return false;"); + self.append("}"); + } } } else { let element_width = width.unwrap(); @@ -1567,6 +1615,12 @@ impl<'a> FieldSerializer<'a> { } if let Some(ps) = padded_size { let ps_bytes = ps / 8; + self.append(&format!( + "if (output.size() - {0}_start > {1}) {{", + id, ps_bytes + )); + self.append(" return false;"); + self.append("}"); self.append(&format!( "if (output.size() - {0}_start < {1}) {{", id, ps_bytes @@ -1601,7 +1655,9 @@ impl<'a> FieldSerializer<'a> { field_var.unwrap() )); } else { - self.append(&format!("{}.Serialize(output);", field_var.unwrap())); + self.append(&format!("if (!{}.Serialize(output)) {{", field_var.unwrap())); + self.append(" return false;"); + self.append("}"); } } ast::FieldDesc::Size { field_id, width, .. } => { @@ -2136,6 +2192,7 @@ fn generate_packet_builder( for f in &all_fields { serializer.serialize(f, decl, None); } + serializer.append("return true;"); let field_serializers = serializer.code; let mut variable_widths = Vec::new(); @@ -2278,7 +2335,7 @@ public: {class_name}({class_name}&&) = default; {class_name}& operator=({class_name} const&) = default; - void Serialize(std::vector& output) const override {{ + bool Serialize(std::vector& output) const override {{ {field_serializers} }} @@ -2399,6 +2456,7 @@ fn generate_struct_declaration( for f in decl.fields() { serializer.serialize(f, decl, None); } + serializer.append("return true;"); let field_serializers = serializer.code; let mut variable_widths = Vec::new(); @@ -2540,7 +2598,7 @@ public: {struct_parse_code} }} - void Serialize(std::vector& output) const override {{ + bool Serialize(std::vector& output) const override {{ {field_serializers} }} diff --git a/pdl-compiler/tests/generated/cxx/be_backend.h b/pdl-compiler/tests/generated/cxx/be_backend.h index 039e02fd..01049312 100644 --- a/pdl-compiler/tests/generated/cxx/be_backend.h +++ b/pdl-compiler/tests/generated/cxx/be_backend.h @@ -192,8 +192,9 @@ class SizedStruct : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(a_ & 0xff))); + return true; } size_t GetSize() const override { @@ -235,12 +236,16 @@ class UnsizedStruct : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 1); + if (array_size > 0x3) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_size))); for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -275,10 +280,11 @@ class UnknownSizeStruct : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -355,11 +361,15 @@ class ScalarParentBuilder : public pdl::packet::Builder { ScalarParentBuilder(ScalarParentBuilder&&) = default; ScalarParentBuilder& operator=(ScalarParentBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(a_ & 0xff))); size_t payload_size = payload_.size(); + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(payload_size))); output.insert(output.end(), payload_.begin(), payload_.end()); + return true; } size_t GetSize() const override { @@ -441,11 +451,15 @@ class EnumParentBuilder : public pdl::packet::Builder { EnumParentBuilder(EnumParentBuilder&&) = default; EnumParentBuilder& operator=(EnumParentBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(static_cast(a_)))); size_t payload_size = payload_.size(); + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(payload_size))); output.insert(output.end(), payload_.begin(), payload_.end()); + return true; } size_t GetSize() const override { @@ -521,11 +535,15 @@ class EmptyParentBuilder : public pdl::packet::Builder { EmptyParentBuilder(EmptyParentBuilder&&) = default; EmptyParentBuilder& operator=(EmptyParentBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(a_ & 0xff))); size_t payload_size = payload_.size(); + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(payload_size))); output.insert(output.end(), payload_.begin(), payload_.end()); + return true; } size_t GetSize() const override { @@ -597,8 +615,15 @@ class Packet_Scalar_FieldBuilder : public pdl::packet::Builder { Packet_Scalar_FieldBuilder(Packet_Scalar_FieldBuilder&&) = default; Packet_Scalar_FieldBuilder& operator=(Packet_Scalar_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (a_ > 0x7f) { + return false; + } + if (c_ > 0x1ffffffffffffff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(a_ & 0x7f)) | (static_cast(c_ & 0x1ffffffffffffff) << 7)); + return true; } size_t GetSize() const override { @@ -673,8 +698,12 @@ class Packet_Enum_FieldBuilder : public pdl::packet::Builder { Packet_Enum_FieldBuilder(Packet_Enum_FieldBuilder&&) = default; Packet_Enum_FieldBuilder& operator=(Packet_Enum_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (c_ > 0x1ffffffffffffff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(static_cast(a_))) | (static_cast(c_ & 0x1ffffffffffffff) << 7)); + return true; } size_t GetSize() const override { @@ -745,8 +774,15 @@ class Packet_Reserved_FieldBuilder : public pdl::packet::Builder { Packet_Reserved_FieldBuilder(Packet_Reserved_FieldBuilder&&) = default; Packet_Reserved_FieldBuilder& operator=(Packet_Reserved_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (a_ > 0x7f) { + return false; + } + if (c_ > 0x7fffffffffffff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(a_ & 0x7f)) | (static_cast(c_ & 0x7fffffffffffff) << 9)); + return true; } size_t GetSize() const override { @@ -834,12 +870,19 @@ class Packet_Size_FieldBuilder : public pdl::packet::Builder { Packet_Size_FieldBuilder(Packet_Size_FieldBuilder&&) = default; Packet_Size_FieldBuilder& operator=(Packet_Size_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t b_size = (b_.size() * 1); + if (b_size > 0x7) { + return false; + } + if (a_ > 0x1fffffffffffffff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(b_size)) | (static_cast(a_ & 0x1fffffffffffffff) << 3)); for (auto const& element : b_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -925,11 +968,18 @@ class Packet_Count_FieldBuilder : public pdl::packet::Builder { Packet_Count_FieldBuilder(Packet_Count_FieldBuilder&&) = default; Packet_Count_FieldBuilder& operator=(Packet_Count_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (b_.size() > 0x7) { + return false; + } + if (a_ > 0x1fffffffffffffff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(b_.size())) | (static_cast(a_ & 0x1fffffffffffffff) << 3)); for (auto const& element : b_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -1000,8 +1050,12 @@ class Packet_FixedScalar_FieldBuilder : public pdl::packet::Builder { Packet_FixedScalar_FieldBuilder(Packet_FixedScalar_FieldBuilder&&) = default; Packet_FixedScalar_FieldBuilder& operator=(Packet_FixedScalar_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (b_ > 0x1ffffffffffffff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(0x7)) | (static_cast(b_ & 0x1ffffffffffffff) << 7)); + return true; } size_t GetSize() const override { @@ -1070,8 +1124,12 @@ class Packet_FixedEnum_FieldBuilder : public pdl::packet::Builder { Packet_FixedEnum_FieldBuilder(Packet_FixedEnum_FieldBuilder&&) = default; Packet_FixedEnum_FieldBuilder& operator=(Packet_FixedEnum_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (b_ > 0x1ffffffffffffff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(Enum7::A)) | (static_cast(b_ & 0x1ffffffffffffff) << 7)); + return true; } size_t GetSize() const override { @@ -1143,10 +1201,14 @@ class Packet_Payload_Field_VariableSizeBuilder : public pdl::packet::Builder { Packet_Payload_Field_VariableSizeBuilder(Packet_Payload_Field_VariableSizeBuilder&&) = default; Packet_Payload_Field_VariableSizeBuilder& operator=(Packet_Payload_Field_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t payload_size = payload_.size(); + if (payload_size > 0x7) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(payload_size))); output.insert(output.end(), payload_.begin(), payload_.end()); + return true; } size_t GetSize() const override { @@ -1219,10 +1281,14 @@ class Packet_Payload_Field_SizeModifierBuilder : public pdl::packet::Builder { Packet_Payload_Field_SizeModifierBuilder(Packet_Payload_Field_SizeModifierBuilder&&) = default; Packet_Payload_Field_SizeModifierBuilder& operator=(Packet_Payload_Field_SizeModifierBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t payload_size = (payload_.size() +2); + if (payload_size > 0x7) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(payload_size))); output.insert(output.end(), payload_.begin(), payload_.end()); + return true; } size_t GetSize() const override { @@ -1296,9 +1362,10 @@ class Packet_Payload_Field_UnknownSizeBuilder : public pdl::packet::Builder { Packet_Payload_Field_UnknownSizeBuilder(Packet_Payload_Field_UnknownSizeBuilder&&) = default; Packet_Payload_Field_UnknownSizeBuilder& operator=(Packet_Payload_Field_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { output.insert(output.end(), payload_.begin(), payload_.end()); pdl::packet::Builder::write_be(output, (static_cast(a_ & 0xffff))); + return true; } size_t GetSize() const override { @@ -1371,9 +1438,10 @@ class Packet_Payload_Field_UnknownSize_TerminalBuilder : public pdl::packet::Bui Packet_Payload_Field_UnknownSize_TerminalBuilder(Packet_Payload_Field_UnknownSize_TerminalBuilder&&) = default; Packet_Payload_Field_UnknownSize_TerminalBuilder& operator=(Packet_Payload_Field_UnknownSize_TerminalBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(a_ & 0xffff))); output.insert(output.end(), payload_.begin(), payload_.end()); + return true; } size_t GetSize() const override { @@ -1446,10 +1514,14 @@ class Packet_Body_Field_VariableSizeBuilder : public pdl::packet::Builder { Packet_Body_Field_VariableSizeBuilder(Packet_Body_Field_VariableSizeBuilder&&) = default; Packet_Body_Field_VariableSizeBuilder& operator=(Packet_Body_Field_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t payload_size = payload_.size(); + if (payload_size > 0x7) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(payload_size))); output.insert(output.end(), payload_.begin(), payload_.end()); + return true; } size_t GetSize() const override { @@ -1523,9 +1595,10 @@ class Packet_Body_Field_UnknownSizeBuilder : public pdl::packet::Builder { Packet_Body_Field_UnknownSizeBuilder(Packet_Body_Field_UnknownSizeBuilder&&) = default; Packet_Body_Field_UnknownSizeBuilder& operator=(Packet_Body_Field_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { output.insert(output.end(), payload_.begin(), payload_.end()); pdl::packet::Builder::write_be(output, (static_cast(a_ & 0xffff))); + return true; } size_t GetSize() const override { @@ -1598,9 +1671,10 @@ class Packet_Body_Field_UnknownSize_TerminalBuilder : public pdl::packet::Builde Packet_Body_Field_UnknownSize_TerminalBuilder(Packet_Body_Field_UnknownSize_TerminalBuilder&&) = default; Packet_Body_Field_UnknownSize_TerminalBuilder& operator=(Packet_Body_Field_UnknownSize_TerminalBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(a_ & 0xffff))); output.insert(output.end(), payload_.begin(), payload_.end()); + return true; } size_t GetSize() const override { @@ -1666,8 +1740,9 @@ class Packet_ScalarGroup_FieldBuilder : public pdl::packet::Builder { Packet_ScalarGroup_FieldBuilder(Packet_ScalarGroup_FieldBuilder&&) = default; Packet_ScalarGroup_FieldBuilder& operator=(Packet_ScalarGroup_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(0x2a))); + return true; } size_t GetSize() const override { @@ -1732,8 +1807,9 @@ class Packet_EnumGroup_FieldBuilder : public pdl::packet::Builder { Packet_EnumGroup_FieldBuilder(Packet_EnumGroup_FieldBuilder&&) = default; Packet_EnumGroup_FieldBuilder& operator=(Packet_EnumGroup_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(Enum16::A))); + return true; } size_t GetSize() const override { @@ -1799,9 +1875,14 @@ class Packet_Struct_FieldBuilder : public pdl::packet::Builder { Packet_Struct_FieldBuilder(Packet_Struct_FieldBuilder&&) = default; Packet_Struct_FieldBuilder& operator=(Packet_Struct_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - a_.Serialize(output); - b_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!a_.Serialize(output)) { + return false; + } + if (!b_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -1876,10 +1957,11 @@ class Packet_Array_Field_ByteElement_ConstantSizeBuilder : public pdl::packet::B Packet_Array_Field_ByteElement_ConstantSizeBuilder(Packet_Array_Field_ByteElement_ConstantSizeBuilder&&) = default; Packet_Array_Field_ByteElement_ConstantSizeBuilder& operator=(Packet_Array_Field_ByteElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -1962,12 +2044,16 @@ class Packet_Array_Field_ByteElement_VariableSizeBuilder : public pdl::packet::B Packet_Array_Field_ByteElement_VariableSizeBuilder(Packet_Array_Field_ByteElement_VariableSizeBuilder&&) = default; Packet_Array_Field_ByteElement_VariableSizeBuilder& operator=(Packet_Array_Field_ByteElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 1); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_size))); for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2048,11 +2134,15 @@ class Packet_Array_Field_ByteElement_VariableCountBuilder : public pdl::packet:: Packet_Array_Field_ByteElement_VariableCountBuilder(Packet_Array_Field_ByteElement_VariableCountBuilder&&) = default; Packet_Array_Field_ByteElement_VariableCountBuilder& operator=(Packet_Array_Field_ByteElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_.size()))); for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2127,10 +2217,11 @@ class Packet_Array_Field_ByteElement_UnknownSizeBuilder : public pdl::packet::Bu Packet_Array_Field_ByteElement_UnknownSizeBuilder(Packet_Array_Field_ByteElement_UnknownSizeBuilder&&) = default; Packet_Array_Field_ByteElement_UnknownSizeBuilder& operator=(Packet_Array_Field_ByteElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2204,10 +2295,11 @@ class Packet_Array_Field_ScalarElement_ConstantSizeBuilder : public pdl::packet: Packet_Array_Field_ScalarElement_ConstantSizeBuilder(Packet_Array_Field_ScalarElement_ConstantSizeBuilder&&) = default; Packet_Array_Field_ScalarElement_ConstantSizeBuilder& operator=(Packet_Array_Field_ScalarElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2290,12 +2382,16 @@ class Packet_Array_Field_ScalarElement_VariableSizeBuilder : public pdl::packet: Packet_Array_Field_ScalarElement_VariableSizeBuilder(Packet_Array_Field_ScalarElement_VariableSizeBuilder&&) = default; Packet_Array_Field_ScalarElement_VariableSizeBuilder& operator=(Packet_Array_Field_ScalarElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 2); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_size))); for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2376,11 +2472,15 @@ class Packet_Array_Field_ScalarElement_VariableCountBuilder : public pdl::packet Packet_Array_Field_ScalarElement_VariableCountBuilder(Packet_Array_Field_ScalarElement_VariableCountBuilder&&) = default; Packet_Array_Field_ScalarElement_VariableCountBuilder& operator=(Packet_Array_Field_ScalarElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_.size()))); for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2455,10 +2555,11 @@ class Packet_Array_Field_ScalarElement_UnknownSizeBuilder : public pdl::packet:: Packet_Array_Field_ScalarElement_UnknownSizeBuilder(Packet_Array_Field_ScalarElement_UnknownSizeBuilder&&) = default; Packet_Array_Field_ScalarElement_UnknownSizeBuilder& operator=(Packet_Array_Field_ScalarElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2532,10 +2633,11 @@ class Packet_Array_Field_EnumElement_ConstantSizeBuilder : public pdl::packet::B Packet_Array_Field_EnumElement_ConstantSizeBuilder(Packet_Array_Field_EnumElement_ConstantSizeBuilder&&) = default; Packet_Array_Field_EnumElement_ConstantSizeBuilder& operator=(Packet_Array_Field_EnumElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2618,12 +2720,16 @@ class Packet_Array_Field_EnumElement_VariableSizeBuilder : public pdl::packet::B Packet_Array_Field_EnumElement_VariableSizeBuilder(Packet_Array_Field_EnumElement_VariableSizeBuilder&&) = default; Packet_Array_Field_EnumElement_VariableSizeBuilder& operator=(Packet_Array_Field_EnumElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 2); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_size))); for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2704,11 +2810,15 @@ class Packet_Array_Field_EnumElement_VariableCountBuilder : public pdl::packet:: Packet_Array_Field_EnumElement_VariableCountBuilder(Packet_Array_Field_EnumElement_VariableCountBuilder&&) = default; Packet_Array_Field_EnumElement_VariableCountBuilder& operator=(Packet_Array_Field_EnumElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_.size()))); for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2783,10 +2893,11 @@ class Packet_Array_Field_EnumElement_UnknownSizeBuilder : public pdl::packet::Bu Packet_Array_Field_EnumElement_UnknownSizeBuilder(Packet_Array_Field_EnumElement_UnknownSizeBuilder&&) = default; Packet_Array_Field_EnumElement_UnknownSizeBuilder& operator=(Packet_Array_Field_EnumElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2860,10 +2971,13 @@ class Packet_Array_Field_SizedElement_ConstantSizeBuilder : public pdl::packet:: Packet_Array_Field_SizedElement_ConstantSizeBuilder(Packet_Array_Field_SizedElement_ConstantSizeBuilder&&) = default; Packet_Array_Field_SizedElement_ConstantSizeBuilder& operator=(Packet_Array_Field_SizedElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -2948,12 +3062,18 @@ class Packet_Array_Field_SizedElement_VariableSizeBuilder : public pdl::packet:: Packet_Array_Field_SizedElement_VariableSizeBuilder(Packet_Array_Field_SizedElement_VariableSizeBuilder&&) = default; Packet_Array_Field_SizedElement_VariableSizeBuilder& operator=(Packet_Array_Field_SizedElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = std::accumulate(array_.begin(), array_.end(), static_cast(0), [](size_t s, auto const& element) { return s + element.GetSize(); }); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3036,11 +3156,17 @@ class Packet_Array_Field_SizedElement_VariableCountBuilder : public pdl::packet: Packet_Array_Field_SizedElement_VariableCountBuilder(Packet_Array_Field_SizedElement_VariableCountBuilder&&) = default; Packet_Array_Field_SizedElement_VariableCountBuilder& operator=(Packet_Array_Field_SizedElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_.size()))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3117,10 +3243,13 @@ class Packet_Array_Field_SizedElement_UnknownSizeBuilder : public pdl::packet::B Packet_Array_Field_SizedElement_UnknownSizeBuilder(Packet_Array_Field_SizedElement_UnknownSizeBuilder&&) = default; Packet_Array_Field_SizedElement_UnknownSizeBuilder& operator=(Packet_Array_Field_SizedElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3197,10 +3326,13 @@ class Packet_Array_Field_UnsizedElement_ConstantSizeBuilder : public pdl::packet Packet_Array_Field_UnsizedElement_ConstantSizeBuilder(Packet_Array_Field_UnsizedElement_ConstantSizeBuilder&&) = default; Packet_Array_Field_UnsizedElement_ConstantSizeBuilder& operator=(Packet_Array_Field_UnsizedElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3282,12 +3414,18 @@ class Packet_Array_Field_UnsizedElement_VariableSizeBuilder : public pdl::packet Packet_Array_Field_UnsizedElement_VariableSizeBuilder(Packet_Array_Field_UnsizedElement_VariableSizeBuilder&&) = default; Packet_Array_Field_UnsizedElement_VariableSizeBuilder& operator=(Packet_Array_Field_UnsizedElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = std::accumulate(array_.begin(), array_.end(), static_cast(0), [](size_t s, auto const& element) { return s + element.GetSize(); }); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3373,11 +3511,17 @@ class Packet_Array_Field_UnsizedElement_VariableCountBuilder : public pdl::packe Packet_Array_Field_UnsizedElement_VariableCountBuilder(Packet_Array_Field_UnsizedElement_VariableCountBuilder&&) = default; Packet_Array_Field_UnsizedElement_VariableCountBuilder& operator=(Packet_Array_Field_UnsizedElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_.size()))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3457,10 +3601,13 @@ class Packet_Array_Field_UnsizedElement_UnknownSizeBuilder : public pdl::packet: Packet_Array_Field_UnsizedElement_UnknownSizeBuilder(Packet_Array_Field_UnsizedElement_UnknownSizeBuilder&&) = default; Packet_Array_Field_UnsizedElement_UnknownSizeBuilder& operator=(Packet_Array_Field_UnsizedElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3543,12 +3690,18 @@ class Packet_Array_Field_UnsizedElement_SizeModifierBuilder : public pdl::packet Packet_Array_Field_UnsizedElement_SizeModifierBuilder(Packet_Array_Field_UnsizedElement_SizeModifierBuilder&&) = default; Packet_Array_Field_UnsizedElement_SizeModifierBuilder& operator=(Packet_Array_Field_UnsizedElement_SizeModifierBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (std::accumulate(array_.begin(), array_.end(), static_cast(0), [](size_t s, auto const& element) { return s + element.GetSize(); }) +2); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3637,16 +3790,23 @@ class Packet_Array_Field_SizedElement_VariableSize_PaddedBuilder : public pdl::p Packet_Array_Field_SizedElement_VariableSize_PaddedBuilder(Packet_Array_Field_SizedElement_VariableSize_PaddedBuilder&&) = default; Packet_Array_Field_SizedElement_VariableSize_PaddedBuilder& operator=(Packet_Array_Field_SizedElement_VariableSize_PaddedBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 2); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_size))); size_t array_start = output.size(); for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + if (output.size() - array_start > 16) { + return false; + } if (output.size() - array_start < 16) { output.resize(array_start + 16, 0); } + return true; } size_t GetSize() const override { @@ -3736,15 +3896,24 @@ class Packet_Array_Field_UnsizedElement_VariableCount_PaddedBuilder : public pdl Packet_Array_Field_UnsizedElement_VariableCount_PaddedBuilder(Packet_Array_Field_UnsizedElement_VariableCount_PaddedBuilder&&) = default; Packet_Array_Field_UnsizedElement_VariableCount_PaddedBuilder& operator=(Packet_Array_Field_UnsizedElement_VariableCount_PaddedBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_.size()))); size_t array_start = output.size(); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } + } + if (output.size() - array_start > 16) { + return false; } if (output.size() - array_start < 16) { output.resize(array_start + 16, 0); } + return true; } size_t GetSize() const override { @@ -3830,12 +3999,23 @@ class Packet_Array_Field_VariableElementSize_ConstantSizeBuilder : public pdl::p Packet_Array_Field_VariableElementSize_ConstantSizeBuilder(Packet_Array_Field_VariableElementSize_ConstantSizeBuilder&&) = default; Packet_Array_Field_VariableElementSize_ConstantSizeBuilder& operator=(Packet_Array_Field_VariableElementSize_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_element_size = array_.empty() ? 0 : array_[0].GetSize(); + for (auto const& element : array_) { + if (element.GetSize() != array_element_size) { + return false; + } + } + if (array_element_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_element_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3942,17 +4122,31 @@ class Packet_Array_Field_VariableElementSize_VariableSizeBuilder : public pdl::p Packet_Array_Field_VariableElementSize_VariableSizeBuilder(Packet_Array_Field_VariableElementSize_VariableSizeBuilder&&) = default; Packet_Array_Field_VariableElementSize_VariableSizeBuilder& operator=(Packet_Array_Field_VariableElementSize_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = std::accumulate(array_.begin(), array_.end(), static_cast(0), [](size_t s, auto const& element) { return s + element.GetSize(); }); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_size))); size_t array_element_size = array_.empty() ? 0 : array_[0].GetSize(); + for (auto const& element : array_) { + if (element.GetSize() != array_element_size) { + return false; + } + } + if (array_element_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_element_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } for (auto const& element : tail_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -4061,16 +4255,30 @@ class Packet_Array_Field_VariableElementSize_VariableCountBuilder : public pdl:: Packet_Array_Field_VariableElementSize_VariableCountBuilder(Packet_Array_Field_VariableElementSize_VariableCountBuilder&&) = default; Packet_Array_Field_VariableElementSize_VariableCountBuilder& operator=(Packet_Array_Field_VariableElementSize_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_.size()))); size_t array_element_size = array_.empty() ? 0 : array_[0].GetSize(); + for (auto const& element : array_) { + if (element.GetSize() != array_element_size) { + return false; + } + } + if (array_element_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_element_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } for (auto const& element : tail_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -4157,12 +4365,23 @@ class Packet_Array_Field_VariableElementSize_UnknownSizeBuilder : public pdl::pa Packet_Array_Field_VariableElementSize_UnknownSizeBuilder(Packet_Array_Field_VariableElementSize_UnknownSizeBuilder&&) = default; Packet_Array_Field_VariableElementSize_UnknownSizeBuilder& operator=(Packet_Array_Field_VariableElementSize_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_element_size = array_.empty() ? 0 : array_[0].GetSize(); + for (auto const& element : array_) { + if (element.GetSize() != array_element_size) { + return false; + } + } + if (array_element_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_element_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -4245,14 +4464,18 @@ class Packet_Optional_Scalar_FieldBuilder : public pdl::packet::Builder { Packet_Optional_Scalar_FieldBuilder(Packet_Optional_Scalar_FieldBuilder&&) = default; Packet_Optional_Scalar_FieldBuilder& operator=(Packet_Optional_Scalar_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast((a_.has_value() ? 0 : 1))) | (static_cast((b_.has_value() ? 1 : 0)) << 1)); if ((a_.has_value() ? 0 : 1) == 0) { + if (*a_ > 0xffffff) { + return false; + } pdl::packet::Builder::write_be(output, *a_); } if ((b_.has_value() ? 1 : 0) == 1) { pdl::packet::Builder::write_be(output, *b_); } + return true; } size_t GetSize() const override { @@ -4343,7 +4566,7 @@ class Packet_Optional_Enum_FieldBuilder : public pdl::packet::Builder { Packet_Optional_Enum_FieldBuilder(Packet_Optional_Enum_FieldBuilder&&) = default; Packet_Optional_Enum_FieldBuilder& operator=(Packet_Optional_Enum_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast((a_.has_value() ? 0 : 1))) | (static_cast((b_.has_value() ? 1 : 0)) << 1)); if ((a_.has_value() ? 0 : 1) == 0) { pdl::packet::Builder::write_be(output, static_cast(*a_)); @@ -4351,6 +4574,7 @@ class Packet_Optional_Enum_FieldBuilder : public pdl::packet::Builder { if ((b_.has_value() ? 1 : 0) == 1) { pdl::packet::Builder::write_be(output, static_cast(*b_)); } + return true; } size_t GetSize() const override { @@ -4433,14 +4657,19 @@ class Packet_Optional_Struct_FieldBuilder : public pdl::packet::Builder { Packet_Optional_Struct_FieldBuilder(Packet_Optional_Struct_FieldBuilder&&) = default; Packet_Optional_Struct_FieldBuilder& operator=(Packet_Optional_Struct_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast((a_.has_value() ? 0 : 1))) | (static_cast((b_.has_value() ? 1 : 0)) << 1)); if ((a_.has_value() ? 0 : 1) == 0) { - a_->Serialize(output); + if (!a_->Serialize(output)) { + return false; + } } if ((b_.has_value() ? 1 : 0) == 1) { - b_->Serialize(output); + if (!b_->Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -4511,11 +4740,15 @@ class ScalarChild_ABuilder : public pdl::packet::Builder { ScalarChild_ABuilder(ScalarChild_ABuilder&&) = default; ScalarChild_ABuilder& operator=(ScalarChild_ABuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(0x0 & 0xff))); size_t payload_size = 1; + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(payload_size))); pdl::packet::Builder::write_be(output, (static_cast(b_ & 0xff))); + return true; } size_t GetSize() const override { @@ -4586,11 +4819,15 @@ class ScalarChild_BBuilder : public pdl::packet::Builder { ScalarChild_BBuilder(ScalarChild_BBuilder&&) = default; ScalarChild_BBuilder& operator=(ScalarChild_BBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(0x1 & 0xff))); size_t payload_size = 2; + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(payload_size))); pdl::packet::Builder::write_be(output, (static_cast(c_ & 0xffff))); + return true; } size_t GetSize() const override { @@ -4661,11 +4898,15 @@ class EnumChild_ABuilder : public pdl::packet::Builder { EnumChild_ABuilder(EnumChild_ABuilder&&) = default; EnumChild_ABuilder& operator=(EnumChild_ABuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(static_cast(Enum16::A)))); size_t payload_size = 1; + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(payload_size))); pdl::packet::Builder::write_be(output, (static_cast(b_ & 0xff))); + return true; } size_t GetSize() const override { @@ -4736,11 +4977,15 @@ class EnumChild_BBuilder : public pdl::packet::Builder { EnumChild_BBuilder(EnumChild_BBuilder&&) = default; EnumChild_BBuilder& operator=(EnumChild_BBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(static_cast(Enum16::B)))); size_t payload_size = 2; + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(payload_size))); pdl::packet::Builder::write_be(output, (static_cast(c_ & 0xffff))); + return true; } size_t GetSize() const override { @@ -4811,11 +5056,15 @@ class AliasedChild_ABuilder : public pdl::packet::Builder { AliasedChild_ABuilder(AliasedChild_ABuilder&&) = default; AliasedChild_ABuilder& operator=(AliasedChild_ABuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(0x2 & 0xff))); size_t payload_size = 1; + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(payload_size))); pdl::packet::Builder::write_be(output, (static_cast(b_ & 0xff))); + return true; } size_t GetSize() const override { @@ -4886,11 +5135,15 @@ class AliasedChild_BBuilder : public pdl::packet::Builder { AliasedChild_BBuilder(AliasedChild_BBuilder&&) = default; AliasedChild_BBuilder& operator=(AliasedChild_BBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(0x3 & 0xff))); size_t payload_size = 2; + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(payload_size))); pdl::packet::Builder::write_be(output, (static_cast(c_ & 0xffff))); + return true; } size_t GetSize() const override { @@ -4924,8 +5177,15 @@ class Struct_Scalar_Field : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (a_ > 0x7f) { + return false; + } + if (c_ > 0x1ffffffffffffff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(a_ & 0x7f)) | (static_cast(c_ & 0x1ffffffffffffff) << 7)); + return true; } size_t GetSize() const override { @@ -4963,8 +5223,12 @@ class Struct_Enum_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (c_ > 0x1ffffffffffffff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(static_cast(a_))) | (static_cast(c_ & 0x1ffffffffffffff) << 7)); + return true; } size_t GetSize() const override { @@ -5027,8 +5291,11 @@ class Struct_Enum_FieldBuilder : public pdl::packet::Builder { Struct_Enum_FieldBuilder(Struct_Enum_FieldBuilder&&) = default; Struct_Enum_FieldBuilder& operator=(Struct_Enum_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5061,8 +5328,15 @@ class Struct_Reserved_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (a_ > 0x7f) { + return false; + } + if (c_ > 0x7fffffffffffff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(a_ & 0x7f)) | (static_cast(c_ & 0x7fffffffffffff) << 9)); + return true; } size_t GetSize() const override { @@ -5125,8 +5399,11 @@ class Struct_Reserved_FieldBuilder : public pdl::packet::Builder { Struct_Reserved_FieldBuilder(Struct_Reserved_FieldBuilder&&) = default; Struct_Reserved_FieldBuilder& operator=(Struct_Reserved_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5169,12 +5446,19 @@ class Struct_Size_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t b_size = (b_.size() * 1); + if (b_size > 0x7) { + return false; + } + if (a_ > 0x1fffffffffffffff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(b_size)) | (static_cast(a_ & 0x1fffffffffffffff) << 3)); for (auto const& element : b_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -5238,8 +5522,11 @@ class Struct_Size_FieldBuilder : public pdl::packet::Builder { Struct_Size_FieldBuilder(Struct_Size_FieldBuilder&&) = default; Struct_Size_FieldBuilder& operator=(Struct_Size_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5278,11 +5565,18 @@ class Struct_Count_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (b_.size() > 0x7) { + return false; + } + if (a_ > 0x1fffffffffffffff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(b_.size())) | (static_cast(a_ & 0x1fffffffffffffff) << 3)); for (auto const& element : b_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -5346,8 +5640,11 @@ class Struct_Count_FieldBuilder : public pdl::packet::Builder { Struct_Count_FieldBuilder(Struct_Count_FieldBuilder&&) = default; Struct_Count_FieldBuilder& operator=(Struct_Count_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5382,8 +5679,12 @@ class Struct_FixedScalar_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (b_ > 0x1ffffffffffffff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(0x7)) | (static_cast(b_ & 0x1ffffffffffffff) << 7)); + return true; } size_t GetSize() const override { @@ -5445,8 +5746,11 @@ class Struct_FixedScalar_FieldBuilder : public pdl::packet::Builder { Struct_FixedScalar_FieldBuilder(Struct_FixedScalar_FieldBuilder&&) = default; Struct_FixedScalar_FieldBuilder& operator=(Struct_FixedScalar_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5481,8 +5785,12 @@ class Struct_FixedEnum_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (b_ > 0x1ffffffffffffff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(Enum7::A)) | (static_cast(b_ & 0x1ffffffffffffff) << 7)); + return true; } size_t GetSize() const override { @@ -5544,8 +5852,11 @@ class Struct_FixedEnum_FieldBuilder : public pdl::packet::Builder { Struct_FixedEnum_FieldBuilder(Struct_FixedEnum_FieldBuilder&&) = default; Struct_FixedEnum_FieldBuilder& operator=(Struct_FixedEnum_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5578,8 +5889,9 @@ class Struct_ScalarGroup_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(0x2a))); + return true; } size_t GetSize() const override { @@ -5641,8 +5953,11 @@ class Struct_ScalarGroup_FieldBuilder : public pdl::packet::Builder { Struct_ScalarGroup_FieldBuilder(Struct_ScalarGroup_FieldBuilder&&) = default; Struct_ScalarGroup_FieldBuilder& operator=(Struct_ScalarGroup_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5675,8 +5990,9 @@ class Struct_EnumGroup_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(Enum16::A))); + return true; } size_t GetSize() const override { @@ -5738,8 +6054,11 @@ class Struct_EnumGroup_FieldBuilder : public pdl::packet::Builder { Struct_EnumGroup_FieldBuilder(Struct_EnumGroup_FieldBuilder&&) = default; Struct_EnumGroup_FieldBuilder& operator=(Struct_EnumGroup_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5805,9 +6124,14 @@ class Struct_Struct_FieldBuilder : public pdl::packet::Builder { Struct_Struct_FieldBuilder(Struct_Struct_FieldBuilder&&) = default; Struct_Struct_FieldBuilder& operator=(Struct_Struct_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - a_.Serialize(output); - b_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!a_.Serialize(output)) { + return false; + } + if (!b_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5841,10 +6165,11 @@ class Struct_Array_Field_ByteElement_ConstantSize_ : public pdl::packet::Builder return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -5906,8 +6231,11 @@ class Struct_Array_Field_ByteElement_ConstantSizeBuilder : public pdl::packet::B Struct_Array_Field_ByteElement_ConstantSizeBuilder(Struct_Array_Field_ByteElement_ConstantSizeBuilder&&) = default; Struct_Array_Field_ByteElement_ConstantSizeBuilder& operator=(Struct_Array_Field_ByteElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5949,12 +6277,16 @@ class Struct_Array_Field_ByteElement_VariableSize_ : public pdl::packet::Builder return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 1); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_size))); for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6017,8 +6349,11 @@ class Struct_Array_Field_ByteElement_VariableSizeBuilder : public pdl::packet::B Struct_Array_Field_ByteElement_VariableSizeBuilder(Struct_Array_Field_ByteElement_VariableSizeBuilder&&) = default; Struct_Array_Field_ByteElement_VariableSizeBuilder& operator=(Struct_Array_Field_ByteElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6056,11 +6391,15 @@ class Struct_Array_Field_ByteElement_VariableCount_ : public pdl::packet::Builde return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_.size()))); for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6123,8 +6462,11 @@ class Struct_Array_Field_ByteElement_VariableCountBuilder : public pdl::packet:: Struct_Array_Field_ByteElement_VariableCountBuilder(Struct_Array_Field_ByteElement_VariableCountBuilder&&) = default; Struct_Array_Field_ByteElement_VariableCountBuilder& operator=(Struct_Array_Field_ByteElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6158,10 +6500,11 @@ class Struct_Array_Field_ByteElement_UnknownSize_ : public pdl::packet::Builder return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6223,8 +6566,11 @@ class Struct_Array_Field_ByteElement_UnknownSizeBuilder : public pdl::packet::Bu Struct_Array_Field_ByteElement_UnknownSizeBuilder(Struct_Array_Field_ByteElement_UnknownSizeBuilder&&) = default; Struct_Array_Field_ByteElement_UnknownSizeBuilder& operator=(Struct_Array_Field_ByteElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6257,10 +6603,11 @@ class Struct_Array_Field_ScalarElement_ConstantSize_ : public pdl::packet::Build return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6322,8 +6669,11 @@ class Struct_Array_Field_ScalarElement_ConstantSizeBuilder : public pdl::packet: Struct_Array_Field_ScalarElement_ConstantSizeBuilder(Struct_Array_Field_ScalarElement_ConstantSizeBuilder&&) = default; Struct_Array_Field_ScalarElement_ConstantSizeBuilder& operator=(Struct_Array_Field_ScalarElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6365,12 +6715,16 @@ class Struct_Array_Field_ScalarElement_VariableSize_ : public pdl::packet::Build return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 2); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_size))); for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6433,8 +6787,11 @@ class Struct_Array_Field_ScalarElement_VariableSizeBuilder : public pdl::packet: Struct_Array_Field_ScalarElement_VariableSizeBuilder(Struct_Array_Field_ScalarElement_VariableSizeBuilder&&) = default; Struct_Array_Field_ScalarElement_VariableSizeBuilder& operator=(Struct_Array_Field_ScalarElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6472,11 +6829,15 @@ class Struct_Array_Field_ScalarElement_VariableCount_ : public pdl::packet::Buil return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_.size()))); for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6539,8 +6900,11 @@ class Struct_Array_Field_ScalarElement_VariableCountBuilder : public pdl::packet Struct_Array_Field_ScalarElement_VariableCountBuilder(Struct_Array_Field_ScalarElement_VariableCountBuilder&&) = default; Struct_Array_Field_ScalarElement_VariableCountBuilder& operator=(Struct_Array_Field_ScalarElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6574,10 +6938,11 @@ class Struct_Array_Field_ScalarElement_UnknownSize_ : public pdl::packet::Builde return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6639,8 +7004,11 @@ class Struct_Array_Field_ScalarElement_UnknownSizeBuilder : public pdl::packet:: Struct_Array_Field_ScalarElement_UnknownSizeBuilder(Struct_Array_Field_ScalarElement_UnknownSizeBuilder&&) = default; Struct_Array_Field_ScalarElement_UnknownSizeBuilder& operator=(Struct_Array_Field_ScalarElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6677,10 +7045,11 @@ class Struct_Array_Field_EnumElement_ConstantSize_ : public pdl::packet::Builder return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6742,8 +7111,11 @@ class Struct_Array_Field_EnumElement_ConstantSizeBuilder : public pdl::packet::B Struct_Array_Field_EnumElement_ConstantSizeBuilder(Struct_Array_Field_EnumElement_ConstantSizeBuilder&&) = default; Struct_Array_Field_EnumElement_ConstantSizeBuilder& operator=(Struct_Array_Field_EnumElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6789,12 +7161,16 @@ class Struct_Array_Field_EnumElement_VariableSize_ : public pdl::packet::Builder return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 2); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_size))); for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6857,8 +7233,11 @@ class Struct_Array_Field_EnumElement_VariableSizeBuilder : public pdl::packet::B Struct_Array_Field_EnumElement_VariableSizeBuilder(Struct_Array_Field_EnumElement_VariableSizeBuilder&&) = default; Struct_Array_Field_EnumElement_VariableSizeBuilder& operator=(Struct_Array_Field_EnumElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6900,11 +7279,15 @@ class Struct_Array_Field_EnumElement_VariableCount_ : public pdl::packet::Builde return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_.size()))); for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6967,8 +7350,11 @@ class Struct_Array_Field_EnumElement_VariableCountBuilder : public pdl::packet:: Struct_Array_Field_EnumElement_VariableCountBuilder(Struct_Array_Field_EnumElement_VariableCountBuilder&&) = default; Struct_Array_Field_EnumElement_VariableCountBuilder& operator=(Struct_Array_Field_EnumElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7006,10 +7392,11 @@ class Struct_Array_Field_EnumElement_UnknownSize_ : public pdl::packet::Builder return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -7071,8 +7458,11 @@ class Struct_Array_Field_EnumElement_UnknownSizeBuilder : public pdl::packet::Bu Struct_Array_Field_EnumElement_UnknownSizeBuilder(Struct_Array_Field_EnumElement_UnknownSizeBuilder&&) = default; Struct_Array_Field_EnumElement_UnknownSizeBuilder& operator=(Struct_Array_Field_EnumElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7109,10 +7499,13 @@ class Struct_Array_Field_SizedElement_ConstantSize_ : public pdl::packet::Builde return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -7174,8 +7567,11 @@ class Struct_Array_Field_SizedElement_ConstantSizeBuilder : public pdl::packet:: Struct_Array_Field_SizedElement_ConstantSizeBuilder(Struct_Array_Field_SizedElement_ConstantSizeBuilder&&) = default; Struct_Array_Field_SizedElement_ConstantSizeBuilder& operator=(Struct_Array_Field_SizedElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7221,12 +7617,18 @@ class Struct_Array_Field_SizedElement_VariableSize_ : public pdl::packet::Builde return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = std::accumulate(array_.begin(), array_.end(), static_cast(0), [](size_t s, auto const& element) { return s + element.GetSize(); }); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -7289,8 +7691,11 @@ class Struct_Array_Field_SizedElement_VariableSizeBuilder : public pdl::packet:: Struct_Array_Field_SizedElement_VariableSizeBuilder(Struct_Array_Field_SizedElement_VariableSizeBuilder&&) = default; Struct_Array_Field_SizedElement_VariableSizeBuilder& operator=(Struct_Array_Field_SizedElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7332,11 +7737,17 @@ class Struct_Array_Field_SizedElement_VariableCount_ : public pdl::packet::Build return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_.size()))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -7399,8 +7810,11 @@ class Struct_Array_Field_SizedElement_VariableCountBuilder : public pdl::packet: Struct_Array_Field_SizedElement_VariableCountBuilder(Struct_Array_Field_SizedElement_VariableCountBuilder&&) = default; Struct_Array_Field_SizedElement_VariableCountBuilder& operator=(Struct_Array_Field_SizedElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7438,10 +7852,13 @@ class Struct_Array_Field_SizedElement_UnknownSize_ : public pdl::packet::Builder return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -7503,8 +7920,11 @@ class Struct_Array_Field_SizedElement_UnknownSizeBuilder : public pdl::packet::B Struct_Array_Field_SizedElement_UnknownSizeBuilder(Struct_Array_Field_SizedElement_UnknownSizeBuilder&&) = default; Struct_Array_Field_SizedElement_UnknownSizeBuilder& operator=(Struct_Array_Field_SizedElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7538,10 +7958,13 @@ class Struct_Array_Field_UnsizedElement_ConstantSize_ : public pdl::packet::Buil return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -7603,8 +8026,11 @@ class Struct_Array_Field_UnsizedElement_ConstantSizeBuilder : public pdl::packet Struct_Array_Field_UnsizedElement_ConstantSizeBuilder(Struct_Array_Field_UnsizedElement_ConstantSizeBuilder&&) = default; Struct_Array_Field_UnsizedElement_ConstantSizeBuilder& operator=(Struct_Array_Field_UnsizedElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7648,12 +8074,18 @@ class Struct_Array_Field_UnsizedElement_VariableSize_ : public pdl::packet::Buil return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = std::accumulate(array_.begin(), array_.end(), static_cast(0), [](size_t s, auto const& element) { return s + element.GetSize(); }); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -7716,8 +8148,11 @@ class Struct_Array_Field_UnsizedElement_VariableSizeBuilder : public pdl::packet Struct_Array_Field_UnsizedElement_VariableSizeBuilder(Struct_Array_Field_UnsizedElement_VariableSizeBuilder&&) = default; Struct_Array_Field_UnsizedElement_VariableSizeBuilder& operator=(Struct_Array_Field_UnsizedElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7756,11 +8191,17 @@ class Struct_Array_Field_UnsizedElement_VariableCount_ : public pdl::packet::Bui return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_.size()))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -7823,8 +8264,11 @@ class Struct_Array_Field_UnsizedElement_VariableCountBuilder : public pdl::packe Struct_Array_Field_UnsizedElement_VariableCountBuilder(Struct_Array_Field_UnsizedElement_VariableCountBuilder&&) = default; Struct_Array_Field_UnsizedElement_VariableCountBuilder& operator=(Struct_Array_Field_UnsizedElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7858,10 +8302,13 @@ class Struct_Array_Field_UnsizedElement_UnknownSize_ : public pdl::packet::Build return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -7923,8 +8370,11 @@ class Struct_Array_Field_UnsizedElement_UnknownSizeBuilder : public pdl::packet: Struct_Array_Field_UnsizedElement_UnknownSizeBuilder(Struct_Array_Field_UnsizedElement_UnknownSizeBuilder&&) = default; Struct_Array_Field_UnsizedElement_UnknownSizeBuilder& operator=(Struct_Array_Field_UnsizedElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7969,12 +8419,18 @@ class Struct_Array_Field_UnsizedElement_SizeModifier_ : public pdl::packet::Buil return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (std::accumulate(array_.begin(), array_.end(), static_cast(0), [](size_t s, auto const& element) { return s + element.GetSize(); }) +2); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -8037,8 +8493,11 @@ class Struct_Array_Field_UnsizedElement_SizeModifierBuilder : public pdl::packet Struct_Array_Field_UnsizedElement_SizeModifierBuilder(Struct_Array_Field_UnsizedElement_SizeModifierBuilder&&) = default; Struct_Array_Field_UnsizedElement_SizeModifierBuilder& operator=(Struct_Array_Field_UnsizedElement_SizeModifierBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -8085,16 +8544,23 @@ class Struct_Array_Field_SizedElement_VariableSize_Padded_ : public pdl::packet: return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 2); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_size))); size_t array_start = output.size(); for (auto const& element : array_) { pdl::packet::Builder::write_be(output, static_cast(element)); } + if (output.size() - array_start > 16) { + return false; + } if (output.size() - array_start < 16) { output.resize(array_start + 16, 0); } + return true; } size_t GetSize() const override { @@ -8157,8 +8623,11 @@ class Struct_Array_Field_SizedElement_VariableSize_PaddedBuilder : public pdl::p Struct_Array_Field_SizedElement_VariableSize_PaddedBuilder(Struct_Array_Field_SizedElement_VariableSize_PaddedBuilder&&) = default; Struct_Array_Field_SizedElement_VariableSize_PaddedBuilder& operator=(Struct_Array_Field_SizedElement_VariableSize_PaddedBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -8201,15 +8670,24 @@ class Struct_Array_Field_UnsizedElement_VariableCount_Padded_ : public pdl::pack return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xff) { + return false; + } pdl::packet::Builder::write_be(output, (static_cast(array_.size()))); size_t array_start = output.size(); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } + } + if (output.size() - array_start > 16) { + return false; } if (output.size() - array_start < 16) { output.resize(array_start + 16, 0); } + return true; } size_t GetSize() const override { @@ -8272,8 +8750,11 @@ class Struct_Array_Field_UnsizedElement_VariableCount_PaddedBuilder : public pdl Struct_Array_Field_UnsizedElement_VariableCount_PaddedBuilder(Struct_Array_Field_UnsizedElement_VariableCount_PaddedBuilder&&) = default; Struct_Array_Field_UnsizedElement_VariableCount_PaddedBuilder& operator=(Struct_Array_Field_UnsizedElement_VariableCount_PaddedBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -8318,14 +8799,18 @@ class Struct_Optional_Scalar_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast((a_.has_value() ? 0 : 1))) | (static_cast((b_.has_value() ? 1 : 0)) << 1)); if ((a_.has_value() ? 0 : 1) == 0) { + if (*a_ > 0xffffff) { + return false; + } pdl::packet::Builder::write_be(output, *a_); } if ((b_.has_value() ? 1 : 0) == 1) { pdl::packet::Builder::write_be(output, *b_); } + return true; } size_t GetSize() const override { @@ -8388,8 +8873,11 @@ class Struct_Optional_Scalar_FieldBuilder : public pdl::packet::Builder { Struct_Optional_Scalar_FieldBuilder(Struct_Optional_Scalar_FieldBuilder&&) = default; Struct_Optional_Scalar_FieldBuilder& operator=(Struct_Optional_Scalar_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -8442,7 +8930,7 @@ class Struct_Optional_Enum_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast((a_.has_value() ? 0 : 1))) | (static_cast((b_.has_value() ? 1 : 0)) << 1)); if ((a_.has_value() ? 0 : 1) == 0) { pdl::packet::Builder::write_be(output, static_cast(*a_)); @@ -8450,6 +8938,7 @@ class Struct_Optional_Enum_Field_ : public pdl::packet::Builder { if ((b_.has_value() ? 1 : 0) == 1) { pdl::packet::Builder::write_be(output, static_cast(*b_)); } + return true; } size_t GetSize() const override { @@ -8512,8 +9001,11 @@ class Struct_Optional_Enum_FieldBuilder : public pdl::packet::Builder { Struct_Optional_Enum_FieldBuilder(Struct_Optional_Enum_FieldBuilder&&) = default; Struct_Optional_Enum_FieldBuilder& operator=(Struct_Optional_Enum_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -8558,14 +9050,19 @@ class Struct_Optional_Struct_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast((a_.has_value() ? 0 : 1))) | (static_cast((b_.has_value() ? 1 : 0)) << 1)); if ((a_.has_value() ? 0 : 1) == 0) { - a_->Serialize(output); + if (!a_->Serialize(output)) { + return false; + } } if ((b_.has_value() ? 1 : 0) == 1) { - b_->Serialize(output); + if (!b_->Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -8628,8 +9125,11 @@ class Struct_Optional_Struct_FieldBuilder : public pdl::packet::Builder { Struct_Optional_Struct_FieldBuilder(Struct_Optional_Struct_FieldBuilder&&) = default; Struct_Optional_Struct_FieldBuilder& operator=(Struct_Optional_Struct_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -8724,8 +9224,9 @@ class Enum_Incomplete_Truncated_ClosedBuilder : public pdl::packet::Builder { Enum_Incomplete_Truncated_ClosedBuilder(Enum_Incomplete_Truncated_ClosedBuilder&&) = default; Enum_Incomplete_Truncated_ClosedBuilder& operator=(Enum_Incomplete_Truncated_ClosedBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(static_cast(e_)))); + return true; } size_t GetSize() const override { @@ -8806,8 +9307,9 @@ class Enum_Incomplete_Truncated_OpenBuilder : public pdl::packet::Builder { Enum_Incomplete_Truncated_OpenBuilder(Enum_Incomplete_Truncated_OpenBuilder&&) = default; Enum_Incomplete_Truncated_OpenBuilder& operator=(Enum_Incomplete_Truncated_OpenBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(static_cast(e_)))); + return true; } size_t GetSize() const override { @@ -8895,8 +9397,9 @@ class Enum_Incomplete_Truncated_Closed_WithRangeBuilder : public pdl::packet::Bu Enum_Incomplete_Truncated_Closed_WithRangeBuilder(Enum_Incomplete_Truncated_Closed_WithRangeBuilder&&) = default; Enum_Incomplete_Truncated_Closed_WithRangeBuilder& operator=(Enum_Incomplete_Truncated_Closed_WithRangeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(static_cast(e_)))); + return true; } size_t GetSize() const override { @@ -8975,8 +9478,9 @@ class Enum_Incomplete_Truncated_Open_WithRangeBuilder : public pdl::packet::Buil Enum_Incomplete_Truncated_Open_WithRangeBuilder(Enum_Incomplete_Truncated_Open_WithRangeBuilder&&) = default; Enum_Incomplete_Truncated_Open_WithRangeBuilder& operator=(Enum_Incomplete_Truncated_Open_WithRangeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(static_cast(e_)))); + return true; } size_t GetSize() const override { @@ -9089,8 +9593,9 @@ class Enum_Complete_TruncatedBuilder : public pdl::packet::Builder { Enum_Complete_TruncatedBuilder(Enum_Complete_TruncatedBuilder&&) = default; Enum_Complete_TruncatedBuilder& operator=(Enum_Complete_TruncatedBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(static_cast(e_)))); + return true; } size_t GetSize() const override { @@ -9178,8 +9683,9 @@ class Enum_Complete_Truncated_WithRangeBuilder : public pdl::packet::Builder { Enum_Complete_Truncated_WithRangeBuilder(Enum_Complete_Truncated_WithRangeBuilder&&) = default; Enum_Complete_Truncated_WithRangeBuilder& operator=(Enum_Complete_Truncated_WithRangeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(static_cast(e_)))); + return true; } size_t GetSize() const override { @@ -9269,8 +9775,9 @@ class Enum_Complete_WithRangeBuilder : public pdl::packet::Builder { Enum_Complete_WithRangeBuilder(Enum_Complete_WithRangeBuilder&&) = default; Enum_Complete_WithRangeBuilder& operator=(Enum_Complete_WithRangeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_be(output, (static_cast(static_cast(e_)))); + return true; } size_t GetSize() const override { diff --git a/pdl-compiler/tests/generated/cxx/le_backend.h b/pdl-compiler/tests/generated/cxx/le_backend.h index 25738d00..6091ac58 100644 --- a/pdl-compiler/tests/generated/cxx/le_backend.h +++ b/pdl-compiler/tests/generated/cxx/le_backend.h @@ -192,8 +192,9 @@ class SizedStruct : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(a_ & 0xff))); + return true; } size_t GetSize() const override { @@ -235,12 +236,16 @@ class UnsizedStruct : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 1); + if (array_size > 0x3) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_size))); for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -275,10 +280,11 @@ class UnknownSizeStruct : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -355,11 +361,15 @@ class ScalarParentBuilder : public pdl::packet::Builder { ScalarParentBuilder(ScalarParentBuilder&&) = default; ScalarParentBuilder& operator=(ScalarParentBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(a_ & 0xff))); size_t payload_size = payload_.size(); + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(payload_size))); output.insert(output.end(), payload_.begin(), payload_.end()); + return true; } size_t GetSize() const override { @@ -441,11 +451,15 @@ class EnumParentBuilder : public pdl::packet::Builder { EnumParentBuilder(EnumParentBuilder&&) = default; EnumParentBuilder& operator=(EnumParentBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(static_cast(a_)))); size_t payload_size = payload_.size(); + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(payload_size))); output.insert(output.end(), payload_.begin(), payload_.end()); + return true; } size_t GetSize() const override { @@ -521,11 +535,15 @@ class EmptyParentBuilder : public pdl::packet::Builder { EmptyParentBuilder(EmptyParentBuilder&&) = default; EmptyParentBuilder& operator=(EmptyParentBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(a_ & 0xff))); size_t payload_size = payload_.size(); + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(payload_size))); output.insert(output.end(), payload_.begin(), payload_.end()); + return true; } size_t GetSize() const override { @@ -597,8 +615,15 @@ class Packet_Scalar_FieldBuilder : public pdl::packet::Builder { Packet_Scalar_FieldBuilder(Packet_Scalar_FieldBuilder&&) = default; Packet_Scalar_FieldBuilder& operator=(Packet_Scalar_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (a_ > 0x7f) { + return false; + } + if (c_ > 0x1ffffffffffffff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(a_ & 0x7f)) | (static_cast(c_ & 0x1ffffffffffffff) << 7)); + return true; } size_t GetSize() const override { @@ -673,8 +698,12 @@ class Packet_Enum_FieldBuilder : public pdl::packet::Builder { Packet_Enum_FieldBuilder(Packet_Enum_FieldBuilder&&) = default; Packet_Enum_FieldBuilder& operator=(Packet_Enum_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (c_ > 0x1ffffffffffffff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(static_cast(a_))) | (static_cast(c_ & 0x1ffffffffffffff) << 7)); + return true; } size_t GetSize() const override { @@ -745,8 +774,15 @@ class Packet_Reserved_FieldBuilder : public pdl::packet::Builder { Packet_Reserved_FieldBuilder(Packet_Reserved_FieldBuilder&&) = default; Packet_Reserved_FieldBuilder& operator=(Packet_Reserved_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (a_ > 0x7f) { + return false; + } + if (c_ > 0x7fffffffffffff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(a_ & 0x7f)) | (static_cast(c_ & 0x7fffffffffffff) << 9)); + return true; } size_t GetSize() const override { @@ -834,12 +870,19 @@ class Packet_Size_FieldBuilder : public pdl::packet::Builder { Packet_Size_FieldBuilder(Packet_Size_FieldBuilder&&) = default; Packet_Size_FieldBuilder& operator=(Packet_Size_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t b_size = (b_.size() * 1); + if (b_size > 0x7) { + return false; + } + if (a_ > 0x1fffffffffffffff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(b_size)) | (static_cast(a_ & 0x1fffffffffffffff) << 3)); for (auto const& element : b_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -925,11 +968,18 @@ class Packet_Count_FieldBuilder : public pdl::packet::Builder { Packet_Count_FieldBuilder(Packet_Count_FieldBuilder&&) = default; Packet_Count_FieldBuilder& operator=(Packet_Count_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (b_.size() > 0x7) { + return false; + } + if (a_ > 0x1fffffffffffffff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(b_.size())) | (static_cast(a_ & 0x1fffffffffffffff) << 3)); for (auto const& element : b_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -1000,8 +1050,12 @@ class Packet_FixedScalar_FieldBuilder : public pdl::packet::Builder { Packet_FixedScalar_FieldBuilder(Packet_FixedScalar_FieldBuilder&&) = default; Packet_FixedScalar_FieldBuilder& operator=(Packet_FixedScalar_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (b_ > 0x1ffffffffffffff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(0x7)) | (static_cast(b_ & 0x1ffffffffffffff) << 7)); + return true; } size_t GetSize() const override { @@ -1070,8 +1124,12 @@ class Packet_FixedEnum_FieldBuilder : public pdl::packet::Builder { Packet_FixedEnum_FieldBuilder(Packet_FixedEnum_FieldBuilder&&) = default; Packet_FixedEnum_FieldBuilder& operator=(Packet_FixedEnum_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (b_ > 0x1ffffffffffffff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(Enum7::A)) | (static_cast(b_ & 0x1ffffffffffffff) << 7)); + return true; } size_t GetSize() const override { @@ -1143,10 +1201,14 @@ class Packet_Payload_Field_VariableSizeBuilder : public pdl::packet::Builder { Packet_Payload_Field_VariableSizeBuilder(Packet_Payload_Field_VariableSizeBuilder&&) = default; Packet_Payload_Field_VariableSizeBuilder& operator=(Packet_Payload_Field_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t payload_size = payload_.size(); + if (payload_size > 0x7) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(payload_size))); output.insert(output.end(), payload_.begin(), payload_.end()); + return true; } size_t GetSize() const override { @@ -1219,10 +1281,14 @@ class Packet_Payload_Field_SizeModifierBuilder : public pdl::packet::Builder { Packet_Payload_Field_SizeModifierBuilder(Packet_Payload_Field_SizeModifierBuilder&&) = default; Packet_Payload_Field_SizeModifierBuilder& operator=(Packet_Payload_Field_SizeModifierBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t payload_size = (payload_.size() +2); + if (payload_size > 0x7) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(payload_size))); output.insert(output.end(), payload_.begin(), payload_.end()); + return true; } size_t GetSize() const override { @@ -1296,9 +1362,10 @@ class Packet_Payload_Field_UnknownSizeBuilder : public pdl::packet::Builder { Packet_Payload_Field_UnknownSizeBuilder(Packet_Payload_Field_UnknownSizeBuilder&&) = default; Packet_Payload_Field_UnknownSizeBuilder& operator=(Packet_Payload_Field_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { output.insert(output.end(), payload_.begin(), payload_.end()); pdl::packet::Builder::write_le(output, (static_cast(a_ & 0xffff))); + return true; } size_t GetSize() const override { @@ -1371,9 +1438,10 @@ class Packet_Payload_Field_UnknownSize_TerminalBuilder : public pdl::packet::Bui Packet_Payload_Field_UnknownSize_TerminalBuilder(Packet_Payload_Field_UnknownSize_TerminalBuilder&&) = default; Packet_Payload_Field_UnknownSize_TerminalBuilder& operator=(Packet_Payload_Field_UnknownSize_TerminalBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(a_ & 0xffff))); output.insert(output.end(), payload_.begin(), payload_.end()); + return true; } size_t GetSize() const override { @@ -1446,10 +1514,14 @@ class Packet_Body_Field_VariableSizeBuilder : public pdl::packet::Builder { Packet_Body_Field_VariableSizeBuilder(Packet_Body_Field_VariableSizeBuilder&&) = default; Packet_Body_Field_VariableSizeBuilder& operator=(Packet_Body_Field_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t payload_size = payload_.size(); + if (payload_size > 0x7) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(payload_size))); output.insert(output.end(), payload_.begin(), payload_.end()); + return true; } size_t GetSize() const override { @@ -1523,9 +1595,10 @@ class Packet_Body_Field_UnknownSizeBuilder : public pdl::packet::Builder { Packet_Body_Field_UnknownSizeBuilder(Packet_Body_Field_UnknownSizeBuilder&&) = default; Packet_Body_Field_UnknownSizeBuilder& operator=(Packet_Body_Field_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { output.insert(output.end(), payload_.begin(), payload_.end()); pdl::packet::Builder::write_le(output, (static_cast(a_ & 0xffff))); + return true; } size_t GetSize() const override { @@ -1598,9 +1671,10 @@ class Packet_Body_Field_UnknownSize_TerminalBuilder : public pdl::packet::Builde Packet_Body_Field_UnknownSize_TerminalBuilder(Packet_Body_Field_UnknownSize_TerminalBuilder&&) = default; Packet_Body_Field_UnknownSize_TerminalBuilder& operator=(Packet_Body_Field_UnknownSize_TerminalBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(a_ & 0xffff))); output.insert(output.end(), payload_.begin(), payload_.end()); + return true; } size_t GetSize() const override { @@ -1666,8 +1740,9 @@ class Packet_ScalarGroup_FieldBuilder : public pdl::packet::Builder { Packet_ScalarGroup_FieldBuilder(Packet_ScalarGroup_FieldBuilder&&) = default; Packet_ScalarGroup_FieldBuilder& operator=(Packet_ScalarGroup_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(0x2a))); + return true; } size_t GetSize() const override { @@ -1732,8 +1807,9 @@ class Packet_EnumGroup_FieldBuilder : public pdl::packet::Builder { Packet_EnumGroup_FieldBuilder(Packet_EnumGroup_FieldBuilder&&) = default; Packet_EnumGroup_FieldBuilder& operator=(Packet_EnumGroup_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(Enum16::A))); + return true; } size_t GetSize() const override { @@ -1799,9 +1875,14 @@ class Packet_Struct_FieldBuilder : public pdl::packet::Builder { Packet_Struct_FieldBuilder(Packet_Struct_FieldBuilder&&) = default; Packet_Struct_FieldBuilder& operator=(Packet_Struct_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - a_.Serialize(output); - b_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!a_.Serialize(output)) { + return false; + } + if (!b_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -1876,10 +1957,11 @@ class Packet_Array_Field_ByteElement_ConstantSizeBuilder : public pdl::packet::B Packet_Array_Field_ByteElement_ConstantSizeBuilder(Packet_Array_Field_ByteElement_ConstantSizeBuilder&&) = default; Packet_Array_Field_ByteElement_ConstantSizeBuilder& operator=(Packet_Array_Field_ByteElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -1962,12 +2044,16 @@ class Packet_Array_Field_ByteElement_VariableSizeBuilder : public pdl::packet::B Packet_Array_Field_ByteElement_VariableSizeBuilder(Packet_Array_Field_ByteElement_VariableSizeBuilder&&) = default; Packet_Array_Field_ByteElement_VariableSizeBuilder& operator=(Packet_Array_Field_ByteElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 1); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_size))); for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2048,11 +2134,15 @@ class Packet_Array_Field_ByteElement_VariableCountBuilder : public pdl::packet:: Packet_Array_Field_ByteElement_VariableCountBuilder(Packet_Array_Field_ByteElement_VariableCountBuilder&&) = default; Packet_Array_Field_ByteElement_VariableCountBuilder& operator=(Packet_Array_Field_ByteElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_.size()))); for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2127,10 +2217,11 @@ class Packet_Array_Field_ByteElement_UnknownSizeBuilder : public pdl::packet::Bu Packet_Array_Field_ByteElement_UnknownSizeBuilder(Packet_Array_Field_ByteElement_UnknownSizeBuilder&&) = default; Packet_Array_Field_ByteElement_UnknownSizeBuilder& operator=(Packet_Array_Field_ByteElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2204,10 +2295,11 @@ class Packet_Array_Field_ScalarElement_ConstantSizeBuilder : public pdl::packet: Packet_Array_Field_ScalarElement_ConstantSizeBuilder(Packet_Array_Field_ScalarElement_ConstantSizeBuilder&&) = default; Packet_Array_Field_ScalarElement_ConstantSizeBuilder& operator=(Packet_Array_Field_ScalarElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2290,12 +2382,16 @@ class Packet_Array_Field_ScalarElement_VariableSizeBuilder : public pdl::packet: Packet_Array_Field_ScalarElement_VariableSizeBuilder(Packet_Array_Field_ScalarElement_VariableSizeBuilder&&) = default; Packet_Array_Field_ScalarElement_VariableSizeBuilder& operator=(Packet_Array_Field_ScalarElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 2); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_size))); for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2376,11 +2472,15 @@ class Packet_Array_Field_ScalarElement_VariableCountBuilder : public pdl::packet Packet_Array_Field_ScalarElement_VariableCountBuilder(Packet_Array_Field_ScalarElement_VariableCountBuilder&&) = default; Packet_Array_Field_ScalarElement_VariableCountBuilder& operator=(Packet_Array_Field_ScalarElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_.size()))); for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2455,10 +2555,11 @@ class Packet_Array_Field_ScalarElement_UnknownSizeBuilder : public pdl::packet:: Packet_Array_Field_ScalarElement_UnknownSizeBuilder(Packet_Array_Field_ScalarElement_UnknownSizeBuilder&&) = default; Packet_Array_Field_ScalarElement_UnknownSizeBuilder& operator=(Packet_Array_Field_ScalarElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2532,10 +2633,11 @@ class Packet_Array_Field_EnumElement_ConstantSizeBuilder : public pdl::packet::B Packet_Array_Field_EnumElement_ConstantSizeBuilder(Packet_Array_Field_EnumElement_ConstantSizeBuilder&&) = default; Packet_Array_Field_EnumElement_ConstantSizeBuilder& operator=(Packet_Array_Field_EnumElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2618,12 +2720,16 @@ class Packet_Array_Field_EnumElement_VariableSizeBuilder : public pdl::packet::B Packet_Array_Field_EnumElement_VariableSizeBuilder(Packet_Array_Field_EnumElement_VariableSizeBuilder&&) = default; Packet_Array_Field_EnumElement_VariableSizeBuilder& operator=(Packet_Array_Field_EnumElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 2); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_size))); for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2704,11 +2810,15 @@ class Packet_Array_Field_EnumElement_VariableCountBuilder : public pdl::packet:: Packet_Array_Field_EnumElement_VariableCountBuilder(Packet_Array_Field_EnumElement_VariableCountBuilder&&) = default; Packet_Array_Field_EnumElement_VariableCountBuilder& operator=(Packet_Array_Field_EnumElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_.size()))); for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2783,10 +2893,11 @@ class Packet_Array_Field_EnumElement_UnknownSizeBuilder : public pdl::packet::Bu Packet_Array_Field_EnumElement_UnknownSizeBuilder(Packet_Array_Field_EnumElement_UnknownSizeBuilder&&) = default; Packet_Array_Field_EnumElement_UnknownSizeBuilder& operator=(Packet_Array_Field_EnumElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -2860,10 +2971,13 @@ class Packet_Array_Field_SizedElement_ConstantSizeBuilder : public pdl::packet:: Packet_Array_Field_SizedElement_ConstantSizeBuilder(Packet_Array_Field_SizedElement_ConstantSizeBuilder&&) = default; Packet_Array_Field_SizedElement_ConstantSizeBuilder& operator=(Packet_Array_Field_SizedElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -2948,12 +3062,18 @@ class Packet_Array_Field_SizedElement_VariableSizeBuilder : public pdl::packet:: Packet_Array_Field_SizedElement_VariableSizeBuilder(Packet_Array_Field_SizedElement_VariableSizeBuilder&&) = default; Packet_Array_Field_SizedElement_VariableSizeBuilder& operator=(Packet_Array_Field_SizedElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = std::accumulate(array_.begin(), array_.end(), static_cast(0), [](size_t s, auto const& element) { return s + element.GetSize(); }); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3036,11 +3156,17 @@ class Packet_Array_Field_SizedElement_VariableCountBuilder : public pdl::packet: Packet_Array_Field_SizedElement_VariableCountBuilder(Packet_Array_Field_SizedElement_VariableCountBuilder&&) = default; Packet_Array_Field_SizedElement_VariableCountBuilder& operator=(Packet_Array_Field_SizedElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_.size()))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3117,10 +3243,13 @@ class Packet_Array_Field_SizedElement_UnknownSizeBuilder : public pdl::packet::B Packet_Array_Field_SizedElement_UnknownSizeBuilder(Packet_Array_Field_SizedElement_UnknownSizeBuilder&&) = default; Packet_Array_Field_SizedElement_UnknownSizeBuilder& operator=(Packet_Array_Field_SizedElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3197,10 +3326,13 @@ class Packet_Array_Field_UnsizedElement_ConstantSizeBuilder : public pdl::packet Packet_Array_Field_UnsizedElement_ConstantSizeBuilder(Packet_Array_Field_UnsizedElement_ConstantSizeBuilder&&) = default; Packet_Array_Field_UnsizedElement_ConstantSizeBuilder& operator=(Packet_Array_Field_UnsizedElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3282,12 +3414,18 @@ class Packet_Array_Field_UnsizedElement_VariableSizeBuilder : public pdl::packet Packet_Array_Field_UnsizedElement_VariableSizeBuilder(Packet_Array_Field_UnsizedElement_VariableSizeBuilder&&) = default; Packet_Array_Field_UnsizedElement_VariableSizeBuilder& operator=(Packet_Array_Field_UnsizedElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = std::accumulate(array_.begin(), array_.end(), static_cast(0), [](size_t s, auto const& element) { return s + element.GetSize(); }); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3373,11 +3511,17 @@ class Packet_Array_Field_UnsizedElement_VariableCountBuilder : public pdl::packe Packet_Array_Field_UnsizedElement_VariableCountBuilder(Packet_Array_Field_UnsizedElement_VariableCountBuilder&&) = default; Packet_Array_Field_UnsizedElement_VariableCountBuilder& operator=(Packet_Array_Field_UnsizedElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_.size()))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3457,10 +3601,13 @@ class Packet_Array_Field_UnsizedElement_UnknownSizeBuilder : public pdl::packet: Packet_Array_Field_UnsizedElement_UnknownSizeBuilder(Packet_Array_Field_UnsizedElement_UnknownSizeBuilder&&) = default; Packet_Array_Field_UnsizedElement_UnknownSizeBuilder& operator=(Packet_Array_Field_UnsizedElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3543,12 +3690,18 @@ class Packet_Array_Field_UnsizedElement_SizeModifierBuilder : public pdl::packet Packet_Array_Field_UnsizedElement_SizeModifierBuilder(Packet_Array_Field_UnsizedElement_SizeModifierBuilder&&) = default; Packet_Array_Field_UnsizedElement_SizeModifierBuilder& operator=(Packet_Array_Field_UnsizedElement_SizeModifierBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (std::accumulate(array_.begin(), array_.end(), static_cast(0), [](size_t s, auto const& element) { return s + element.GetSize(); }) +2); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3637,16 +3790,23 @@ class Packet_Array_Field_SizedElement_VariableSize_PaddedBuilder : public pdl::p Packet_Array_Field_SizedElement_VariableSize_PaddedBuilder(Packet_Array_Field_SizedElement_VariableSize_PaddedBuilder&&) = default; Packet_Array_Field_SizedElement_VariableSize_PaddedBuilder& operator=(Packet_Array_Field_SizedElement_VariableSize_PaddedBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 2); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_size))); size_t array_start = output.size(); for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + if (output.size() - array_start > 16) { + return false; + } if (output.size() - array_start < 16) { output.resize(array_start + 16, 0); } + return true; } size_t GetSize() const override { @@ -3736,15 +3896,24 @@ class Packet_Array_Field_UnsizedElement_VariableCount_PaddedBuilder : public pdl Packet_Array_Field_UnsizedElement_VariableCount_PaddedBuilder(Packet_Array_Field_UnsizedElement_VariableCount_PaddedBuilder&&) = default; Packet_Array_Field_UnsizedElement_VariableCount_PaddedBuilder& operator=(Packet_Array_Field_UnsizedElement_VariableCount_PaddedBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_.size()))); size_t array_start = output.size(); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } + } + if (output.size() - array_start > 16) { + return false; } if (output.size() - array_start < 16) { output.resize(array_start + 16, 0); } + return true; } size_t GetSize() const override { @@ -3830,12 +3999,23 @@ class Packet_Array_Field_VariableElementSize_ConstantSizeBuilder : public pdl::p Packet_Array_Field_VariableElementSize_ConstantSizeBuilder(Packet_Array_Field_VariableElementSize_ConstantSizeBuilder&&) = default; Packet_Array_Field_VariableElementSize_ConstantSizeBuilder& operator=(Packet_Array_Field_VariableElementSize_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_element_size = array_.empty() ? 0 : array_[0].GetSize(); + for (auto const& element : array_) { + if (element.GetSize() != array_element_size) { + return false; + } + } + if (array_element_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_element_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -3942,17 +4122,31 @@ class Packet_Array_Field_VariableElementSize_VariableSizeBuilder : public pdl::p Packet_Array_Field_VariableElementSize_VariableSizeBuilder(Packet_Array_Field_VariableElementSize_VariableSizeBuilder&&) = default; Packet_Array_Field_VariableElementSize_VariableSizeBuilder& operator=(Packet_Array_Field_VariableElementSize_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = std::accumulate(array_.begin(), array_.end(), static_cast(0), [](size_t s, auto const& element) { return s + element.GetSize(); }); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_size))); size_t array_element_size = array_.empty() ? 0 : array_[0].GetSize(); + for (auto const& element : array_) { + if (element.GetSize() != array_element_size) { + return false; + } + } + if (array_element_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_element_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } for (auto const& element : tail_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -4061,16 +4255,30 @@ class Packet_Array_Field_VariableElementSize_VariableCountBuilder : public pdl:: Packet_Array_Field_VariableElementSize_VariableCountBuilder(Packet_Array_Field_VariableElementSize_VariableCountBuilder&&) = default; Packet_Array_Field_VariableElementSize_VariableCountBuilder& operator=(Packet_Array_Field_VariableElementSize_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_.size()))); size_t array_element_size = array_.empty() ? 0 : array_[0].GetSize(); + for (auto const& element : array_) { + if (element.GetSize() != array_element_size) { + return false; + } + } + if (array_element_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_element_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } for (auto const& element : tail_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -4157,12 +4365,23 @@ class Packet_Array_Field_VariableElementSize_UnknownSizeBuilder : public pdl::pa Packet_Array_Field_VariableElementSize_UnknownSizeBuilder(Packet_Array_Field_VariableElementSize_UnknownSizeBuilder&&) = default; Packet_Array_Field_VariableElementSize_UnknownSizeBuilder& operator=(Packet_Array_Field_VariableElementSize_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_element_size = array_.empty() ? 0 : array_[0].GetSize(); + for (auto const& element : array_) { + if (element.GetSize() != array_element_size) { + return false; + } + } + if (array_element_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_element_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -4245,14 +4464,18 @@ class Packet_Optional_Scalar_FieldBuilder : public pdl::packet::Builder { Packet_Optional_Scalar_FieldBuilder(Packet_Optional_Scalar_FieldBuilder&&) = default; Packet_Optional_Scalar_FieldBuilder& operator=(Packet_Optional_Scalar_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast((a_.has_value() ? 0 : 1))) | (static_cast((b_.has_value() ? 1 : 0)) << 1)); if ((a_.has_value() ? 0 : 1) == 0) { + if (*a_ > 0xffffff) { + return false; + } pdl::packet::Builder::write_le(output, *a_); } if ((b_.has_value() ? 1 : 0) == 1) { pdl::packet::Builder::write_le(output, *b_); } + return true; } size_t GetSize() const override { @@ -4343,7 +4566,7 @@ class Packet_Optional_Enum_FieldBuilder : public pdl::packet::Builder { Packet_Optional_Enum_FieldBuilder(Packet_Optional_Enum_FieldBuilder&&) = default; Packet_Optional_Enum_FieldBuilder& operator=(Packet_Optional_Enum_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast((a_.has_value() ? 0 : 1))) | (static_cast((b_.has_value() ? 1 : 0)) << 1)); if ((a_.has_value() ? 0 : 1) == 0) { pdl::packet::Builder::write_le(output, static_cast(*a_)); @@ -4351,6 +4574,7 @@ class Packet_Optional_Enum_FieldBuilder : public pdl::packet::Builder { if ((b_.has_value() ? 1 : 0) == 1) { pdl::packet::Builder::write_le(output, static_cast(*b_)); } + return true; } size_t GetSize() const override { @@ -4433,14 +4657,19 @@ class Packet_Optional_Struct_FieldBuilder : public pdl::packet::Builder { Packet_Optional_Struct_FieldBuilder(Packet_Optional_Struct_FieldBuilder&&) = default; Packet_Optional_Struct_FieldBuilder& operator=(Packet_Optional_Struct_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast((a_.has_value() ? 0 : 1))) | (static_cast((b_.has_value() ? 1 : 0)) << 1)); if ((a_.has_value() ? 0 : 1) == 0) { - a_->Serialize(output); + if (!a_->Serialize(output)) { + return false; + } } if ((b_.has_value() ? 1 : 0) == 1) { - b_->Serialize(output); + if (!b_->Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -4511,11 +4740,15 @@ class ScalarChild_ABuilder : public pdl::packet::Builder { ScalarChild_ABuilder(ScalarChild_ABuilder&&) = default; ScalarChild_ABuilder& operator=(ScalarChild_ABuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(0x0 & 0xff))); size_t payload_size = 1; + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(payload_size))); pdl::packet::Builder::write_le(output, (static_cast(b_ & 0xff))); + return true; } size_t GetSize() const override { @@ -4586,11 +4819,15 @@ class ScalarChild_BBuilder : public pdl::packet::Builder { ScalarChild_BBuilder(ScalarChild_BBuilder&&) = default; ScalarChild_BBuilder& operator=(ScalarChild_BBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(0x1 & 0xff))); size_t payload_size = 2; + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(payload_size))); pdl::packet::Builder::write_le(output, (static_cast(c_ & 0xffff))); + return true; } size_t GetSize() const override { @@ -4661,11 +4898,15 @@ class EnumChild_ABuilder : public pdl::packet::Builder { EnumChild_ABuilder(EnumChild_ABuilder&&) = default; EnumChild_ABuilder& operator=(EnumChild_ABuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(static_cast(Enum16::A)))); size_t payload_size = 1; + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(payload_size))); pdl::packet::Builder::write_le(output, (static_cast(b_ & 0xff))); + return true; } size_t GetSize() const override { @@ -4736,11 +4977,15 @@ class EnumChild_BBuilder : public pdl::packet::Builder { EnumChild_BBuilder(EnumChild_BBuilder&&) = default; EnumChild_BBuilder& operator=(EnumChild_BBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(static_cast(Enum16::B)))); size_t payload_size = 2; + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(payload_size))); pdl::packet::Builder::write_le(output, (static_cast(c_ & 0xffff))); + return true; } size_t GetSize() const override { @@ -4811,11 +5056,15 @@ class AliasedChild_ABuilder : public pdl::packet::Builder { AliasedChild_ABuilder(AliasedChild_ABuilder&&) = default; AliasedChild_ABuilder& operator=(AliasedChild_ABuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(0x2 & 0xff))); size_t payload_size = 1; + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(payload_size))); pdl::packet::Builder::write_le(output, (static_cast(b_ & 0xff))); + return true; } size_t GetSize() const override { @@ -4886,11 +5135,15 @@ class AliasedChild_BBuilder : public pdl::packet::Builder { AliasedChild_BBuilder(AliasedChild_BBuilder&&) = default; AliasedChild_BBuilder& operator=(AliasedChild_BBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(0x3 & 0xff))); size_t payload_size = 2; + if (payload_size > 0xff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(payload_size))); pdl::packet::Builder::write_le(output, (static_cast(c_ & 0xffff))); + return true; } size_t GetSize() const override { @@ -4924,8 +5177,15 @@ class Struct_Scalar_Field : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (a_ > 0x7f) { + return false; + } + if (c_ > 0x1ffffffffffffff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(a_ & 0x7f)) | (static_cast(c_ & 0x1ffffffffffffff) << 7)); + return true; } size_t GetSize() const override { @@ -4963,8 +5223,12 @@ class Struct_Enum_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (c_ > 0x1ffffffffffffff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(static_cast(a_))) | (static_cast(c_ & 0x1ffffffffffffff) << 7)); + return true; } size_t GetSize() const override { @@ -5027,8 +5291,11 @@ class Struct_Enum_FieldBuilder : public pdl::packet::Builder { Struct_Enum_FieldBuilder(Struct_Enum_FieldBuilder&&) = default; Struct_Enum_FieldBuilder& operator=(Struct_Enum_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5061,8 +5328,15 @@ class Struct_Reserved_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (a_ > 0x7f) { + return false; + } + if (c_ > 0x7fffffffffffff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(a_ & 0x7f)) | (static_cast(c_ & 0x7fffffffffffff) << 9)); + return true; } size_t GetSize() const override { @@ -5125,8 +5399,11 @@ class Struct_Reserved_FieldBuilder : public pdl::packet::Builder { Struct_Reserved_FieldBuilder(Struct_Reserved_FieldBuilder&&) = default; Struct_Reserved_FieldBuilder& operator=(Struct_Reserved_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5169,12 +5446,19 @@ class Struct_Size_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t b_size = (b_.size() * 1); + if (b_size > 0x7) { + return false; + } + if (a_ > 0x1fffffffffffffff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(b_size)) | (static_cast(a_ & 0x1fffffffffffffff) << 3)); for (auto const& element : b_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -5238,8 +5522,11 @@ class Struct_Size_FieldBuilder : public pdl::packet::Builder { Struct_Size_FieldBuilder(Struct_Size_FieldBuilder&&) = default; Struct_Size_FieldBuilder& operator=(Struct_Size_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5278,11 +5565,18 @@ class Struct_Count_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (b_.size() > 0x7) { + return false; + } + if (a_ > 0x1fffffffffffffff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(b_.size())) | (static_cast(a_ & 0x1fffffffffffffff) << 3)); for (auto const& element : b_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -5346,8 +5640,11 @@ class Struct_Count_FieldBuilder : public pdl::packet::Builder { Struct_Count_FieldBuilder(Struct_Count_FieldBuilder&&) = default; Struct_Count_FieldBuilder& operator=(Struct_Count_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5382,8 +5679,12 @@ class Struct_FixedScalar_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (b_ > 0x1ffffffffffffff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(0x7)) | (static_cast(b_ & 0x1ffffffffffffff) << 7)); + return true; } size_t GetSize() const override { @@ -5445,8 +5746,11 @@ class Struct_FixedScalar_FieldBuilder : public pdl::packet::Builder { Struct_FixedScalar_FieldBuilder(Struct_FixedScalar_FieldBuilder&&) = default; Struct_FixedScalar_FieldBuilder& operator=(Struct_FixedScalar_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5481,8 +5785,12 @@ class Struct_FixedEnum_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (b_ > 0x1ffffffffffffff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(Enum7::A)) | (static_cast(b_ & 0x1ffffffffffffff) << 7)); + return true; } size_t GetSize() const override { @@ -5544,8 +5852,11 @@ class Struct_FixedEnum_FieldBuilder : public pdl::packet::Builder { Struct_FixedEnum_FieldBuilder(Struct_FixedEnum_FieldBuilder&&) = default; Struct_FixedEnum_FieldBuilder& operator=(Struct_FixedEnum_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5578,8 +5889,9 @@ class Struct_ScalarGroup_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(0x2a))); + return true; } size_t GetSize() const override { @@ -5641,8 +5953,11 @@ class Struct_ScalarGroup_FieldBuilder : public pdl::packet::Builder { Struct_ScalarGroup_FieldBuilder(Struct_ScalarGroup_FieldBuilder&&) = default; Struct_ScalarGroup_FieldBuilder& operator=(Struct_ScalarGroup_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5675,8 +5990,9 @@ class Struct_EnumGroup_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(Enum16::A))); + return true; } size_t GetSize() const override { @@ -5738,8 +6054,11 @@ class Struct_EnumGroup_FieldBuilder : public pdl::packet::Builder { Struct_EnumGroup_FieldBuilder(Struct_EnumGroup_FieldBuilder&&) = default; Struct_EnumGroup_FieldBuilder& operator=(Struct_EnumGroup_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5805,9 +6124,14 @@ class Struct_Struct_FieldBuilder : public pdl::packet::Builder { Struct_Struct_FieldBuilder(Struct_Struct_FieldBuilder&&) = default; Struct_Struct_FieldBuilder& operator=(Struct_Struct_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - a_.Serialize(output); - b_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!a_.Serialize(output)) { + return false; + } + if (!b_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5841,10 +6165,11 @@ class Struct_Array_Field_ByteElement_ConstantSize_ : public pdl::packet::Builder return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -5906,8 +6231,11 @@ class Struct_Array_Field_ByteElement_ConstantSizeBuilder : public pdl::packet::B Struct_Array_Field_ByteElement_ConstantSizeBuilder(Struct_Array_Field_ByteElement_ConstantSizeBuilder&&) = default; Struct_Array_Field_ByteElement_ConstantSizeBuilder& operator=(Struct_Array_Field_ByteElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -5949,12 +6277,16 @@ class Struct_Array_Field_ByteElement_VariableSize_ : public pdl::packet::Builder return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 1); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_size))); for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6017,8 +6349,11 @@ class Struct_Array_Field_ByteElement_VariableSizeBuilder : public pdl::packet::B Struct_Array_Field_ByteElement_VariableSizeBuilder(Struct_Array_Field_ByteElement_VariableSizeBuilder&&) = default; Struct_Array_Field_ByteElement_VariableSizeBuilder& operator=(Struct_Array_Field_ByteElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6056,11 +6391,15 @@ class Struct_Array_Field_ByteElement_VariableCount_ : public pdl::packet::Builde return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_.size()))); for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6123,8 +6462,11 @@ class Struct_Array_Field_ByteElement_VariableCountBuilder : public pdl::packet:: Struct_Array_Field_ByteElement_VariableCountBuilder(Struct_Array_Field_ByteElement_VariableCountBuilder&&) = default; Struct_Array_Field_ByteElement_VariableCountBuilder& operator=(Struct_Array_Field_ByteElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6158,10 +6500,11 @@ class Struct_Array_Field_ByteElement_UnknownSize_ : public pdl::packet::Builder return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6223,8 +6566,11 @@ class Struct_Array_Field_ByteElement_UnknownSizeBuilder : public pdl::packet::Bu Struct_Array_Field_ByteElement_UnknownSizeBuilder(Struct_Array_Field_ByteElement_UnknownSizeBuilder&&) = default; Struct_Array_Field_ByteElement_UnknownSizeBuilder& operator=(Struct_Array_Field_ByteElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6257,10 +6603,11 @@ class Struct_Array_Field_ScalarElement_ConstantSize_ : public pdl::packet::Build return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6322,8 +6669,11 @@ class Struct_Array_Field_ScalarElement_ConstantSizeBuilder : public pdl::packet: Struct_Array_Field_ScalarElement_ConstantSizeBuilder(Struct_Array_Field_ScalarElement_ConstantSizeBuilder&&) = default; Struct_Array_Field_ScalarElement_ConstantSizeBuilder& operator=(Struct_Array_Field_ScalarElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6365,12 +6715,16 @@ class Struct_Array_Field_ScalarElement_VariableSize_ : public pdl::packet::Build return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 2); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_size))); for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6433,8 +6787,11 @@ class Struct_Array_Field_ScalarElement_VariableSizeBuilder : public pdl::packet: Struct_Array_Field_ScalarElement_VariableSizeBuilder(Struct_Array_Field_ScalarElement_VariableSizeBuilder&&) = default; Struct_Array_Field_ScalarElement_VariableSizeBuilder& operator=(Struct_Array_Field_ScalarElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6472,11 +6829,15 @@ class Struct_Array_Field_ScalarElement_VariableCount_ : public pdl::packet::Buil return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_.size()))); for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6539,8 +6900,11 @@ class Struct_Array_Field_ScalarElement_VariableCountBuilder : public pdl::packet Struct_Array_Field_ScalarElement_VariableCountBuilder(Struct_Array_Field_ScalarElement_VariableCountBuilder&&) = default; Struct_Array_Field_ScalarElement_VariableCountBuilder& operator=(Struct_Array_Field_ScalarElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6574,10 +6938,11 @@ class Struct_Array_Field_ScalarElement_UnknownSize_ : public pdl::packet::Builde return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6639,8 +7004,11 @@ class Struct_Array_Field_ScalarElement_UnknownSizeBuilder : public pdl::packet:: Struct_Array_Field_ScalarElement_UnknownSizeBuilder(Struct_Array_Field_ScalarElement_UnknownSizeBuilder&&) = default; Struct_Array_Field_ScalarElement_UnknownSizeBuilder& operator=(Struct_Array_Field_ScalarElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6677,10 +7045,11 @@ class Struct_Array_Field_EnumElement_ConstantSize_ : public pdl::packet::Builder return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6742,8 +7111,11 @@ class Struct_Array_Field_EnumElement_ConstantSizeBuilder : public pdl::packet::B Struct_Array_Field_EnumElement_ConstantSizeBuilder(Struct_Array_Field_EnumElement_ConstantSizeBuilder&&) = default; Struct_Array_Field_EnumElement_ConstantSizeBuilder& operator=(Struct_Array_Field_EnumElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6789,12 +7161,16 @@ class Struct_Array_Field_EnumElement_VariableSize_ : public pdl::packet::Builder return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 2); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_size))); for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6857,8 +7233,11 @@ class Struct_Array_Field_EnumElement_VariableSizeBuilder : public pdl::packet::B Struct_Array_Field_EnumElement_VariableSizeBuilder(Struct_Array_Field_EnumElement_VariableSizeBuilder&&) = default; Struct_Array_Field_EnumElement_VariableSizeBuilder& operator=(Struct_Array_Field_EnumElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -6900,11 +7279,15 @@ class Struct_Array_Field_EnumElement_VariableCount_ : public pdl::packet::Builde return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_.size()))); for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -6967,8 +7350,11 @@ class Struct_Array_Field_EnumElement_VariableCountBuilder : public pdl::packet:: Struct_Array_Field_EnumElement_VariableCountBuilder(Struct_Array_Field_EnumElement_VariableCountBuilder&&) = default; Struct_Array_Field_EnumElement_VariableCountBuilder& operator=(Struct_Array_Field_EnumElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7006,10 +7392,11 @@ class Struct_Array_Field_EnumElement_UnknownSize_ : public pdl::packet::Builder return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + return true; } size_t GetSize() const override { @@ -7071,8 +7458,11 @@ class Struct_Array_Field_EnumElement_UnknownSizeBuilder : public pdl::packet::Bu Struct_Array_Field_EnumElement_UnknownSizeBuilder(Struct_Array_Field_EnumElement_UnknownSizeBuilder&&) = default; Struct_Array_Field_EnumElement_UnknownSizeBuilder& operator=(Struct_Array_Field_EnumElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7109,10 +7499,13 @@ class Struct_Array_Field_SizedElement_ConstantSize_ : public pdl::packet::Builde return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -7174,8 +7567,11 @@ class Struct_Array_Field_SizedElement_ConstantSizeBuilder : public pdl::packet:: Struct_Array_Field_SizedElement_ConstantSizeBuilder(Struct_Array_Field_SizedElement_ConstantSizeBuilder&&) = default; Struct_Array_Field_SizedElement_ConstantSizeBuilder& operator=(Struct_Array_Field_SizedElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7221,12 +7617,18 @@ class Struct_Array_Field_SizedElement_VariableSize_ : public pdl::packet::Builde return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = std::accumulate(array_.begin(), array_.end(), static_cast(0), [](size_t s, auto const& element) { return s + element.GetSize(); }); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -7289,8 +7691,11 @@ class Struct_Array_Field_SizedElement_VariableSizeBuilder : public pdl::packet:: Struct_Array_Field_SizedElement_VariableSizeBuilder(Struct_Array_Field_SizedElement_VariableSizeBuilder&&) = default; Struct_Array_Field_SizedElement_VariableSizeBuilder& operator=(Struct_Array_Field_SizedElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7332,11 +7737,17 @@ class Struct_Array_Field_SizedElement_VariableCount_ : public pdl::packet::Build return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_.size()))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -7399,8 +7810,11 @@ class Struct_Array_Field_SizedElement_VariableCountBuilder : public pdl::packet: Struct_Array_Field_SizedElement_VariableCountBuilder(Struct_Array_Field_SizedElement_VariableCountBuilder&&) = default; Struct_Array_Field_SizedElement_VariableCountBuilder& operator=(Struct_Array_Field_SizedElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7438,10 +7852,13 @@ class Struct_Array_Field_SizedElement_UnknownSize_ : public pdl::packet::Builder return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -7503,8 +7920,11 @@ class Struct_Array_Field_SizedElement_UnknownSizeBuilder : public pdl::packet::B Struct_Array_Field_SizedElement_UnknownSizeBuilder(Struct_Array_Field_SizedElement_UnknownSizeBuilder&&) = default; Struct_Array_Field_SizedElement_UnknownSizeBuilder& operator=(Struct_Array_Field_SizedElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7538,10 +7958,13 @@ class Struct_Array_Field_UnsizedElement_ConstantSize_ : public pdl::packet::Buil return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -7603,8 +8026,11 @@ class Struct_Array_Field_UnsizedElement_ConstantSizeBuilder : public pdl::packet Struct_Array_Field_UnsizedElement_ConstantSizeBuilder(Struct_Array_Field_UnsizedElement_ConstantSizeBuilder&&) = default; Struct_Array_Field_UnsizedElement_ConstantSizeBuilder& operator=(Struct_Array_Field_UnsizedElement_ConstantSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7648,12 +8074,18 @@ class Struct_Array_Field_UnsizedElement_VariableSize_ : public pdl::packet::Buil return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = std::accumulate(array_.begin(), array_.end(), static_cast(0), [](size_t s, auto const& element) { return s + element.GetSize(); }); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -7716,8 +8148,11 @@ class Struct_Array_Field_UnsizedElement_VariableSizeBuilder : public pdl::packet Struct_Array_Field_UnsizedElement_VariableSizeBuilder(Struct_Array_Field_UnsizedElement_VariableSizeBuilder&&) = default; Struct_Array_Field_UnsizedElement_VariableSizeBuilder& operator=(Struct_Array_Field_UnsizedElement_VariableSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7756,11 +8191,17 @@ class Struct_Array_Field_UnsizedElement_VariableCount_ : public pdl::packet::Bui return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_.size()))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -7823,8 +8264,11 @@ class Struct_Array_Field_UnsizedElement_VariableCountBuilder : public pdl::packe Struct_Array_Field_UnsizedElement_VariableCountBuilder(Struct_Array_Field_UnsizedElement_VariableCountBuilder&&) = default; Struct_Array_Field_UnsizedElement_VariableCountBuilder& operator=(Struct_Array_Field_UnsizedElement_VariableCountBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7858,10 +8302,13 @@ class Struct_Array_Field_UnsizedElement_UnknownSize_ : public pdl::packet::Build return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -7923,8 +8370,11 @@ class Struct_Array_Field_UnsizedElement_UnknownSizeBuilder : public pdl::packet: Struct_Array_Field_UnsizedElement_UnknownSizeBuilder(Struct_Array_Field_UnsizedElement_UnknownSizeBuilder&&) = default; Struct_Array_Field_UnsizedElement_UnknownSizeBuilder& operator=(Struct_Array_Field_UnsizedElement_UnknownSizeBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -7969,12 +8419,18 @@ class Struct_Array_Field_UnsizedElement_SizeModifier_ : public pdl::packet::Buil return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (std::accumulate(array_.begin(), array_.end(), static_cast(0), [](size_t s, auto const& element) { return s + element.GetSize(); }) +2); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_size))); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -8037,8 +8493,11 @@ class Struct_Array_Field_UnsizedElement_SizeModifierBuilder : public pdl::packet Struct_Array_Field_UnsizedElement_SizeModifierBuilder(Struct_Array_Field_UnsizedElement_SizeModifierBuilder&&) = default; Struct_Array_Field_UnsizedElement_SizeModifierBuilder& operator=(Struct_Array_Field_UnsizedElement_SizeModifierBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -8085,16 +8544,23 @@ class Struct_Array_Field_SizedElement_VariableSize_Padded_ : public pdl::packet: return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { size_t array_size = (array_.size() * 2); + if (array_size > 0xf) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_size))); size_t array_start = output.size(); for (auto const& element : array_) { pdl::packet::Builder::write_le(output, static_cast(element)); } + if (output.size() - array_start > 16) { + return false; + } if (output.size() - array_start < 16) { output.resize(array_start + 16, 0); } + return true; } size_t GetSize() const override { @@ -8157,8 +8623,11 @@ class Struct_Array_Field_SizedElement_VariableSize_PaddedBuilder : public pdl::p Struct_Array_Field_SizedElement_VariableSize_PaddedBuilder(Struct_Array_Field_SizedElement_VariableSize_PaddedBuilder&&) = default; Struct_Array_Field_SizedElement_VariableSize_PaddedBuilder& operator=(Struct_Array_Field_SizedElement_VariableSize_PaddedBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -8201,15 +8670,24 @@ class Struct_Array_Field_UnsizedElement_VariableCount_Padded_ : public pdl::pack return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { + if (array_.size() > 0xff) { + return false; + } pdl::packet::Builder::write_le(output, (static_cast(array_.size()))); size_t array_start = output.size(); for (auto const& element : array_) { - element.Serialize(output); + if (!element.Serialize(output)) { + return false; + } + } + if (output.size() - array_start > 16) { + return false; } if (output.size() - array_start < 16) { output.resize(array_start + 16, 0); } + return true; } size_t GetSize() const override { @@ -8272,8 +8750,11 @@ class Struct_Array_Field_UnsizedElement_VariableCount_PaddedBuilder : public pdl Struct_Array_Field_UnsizedElement_VariableCount_PaddedBuilder(Struct_Array_Field_UnsizedElement_VariableCount_PaddedBuilder&&) = default; Struct_Array_Field_UnsizedElement_VariableCount_PaddedBuilder& operator=(Struct_Array_Field_UnsizedElement_VariableCount_PaddedBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -8318,14 +8799,18 @@ class Struct_Optional_Scalar_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast((a_.has_value() ? 0 : 1))) | (static_cast((b_.has_value() ? 1 : 0)) << 1)); if ((a_.has_value() ? 0 : 1) == 0) { + if (*a_ > 0xffffff) { + return false; + } pdl::packet::Builder::write_le(output, *a_); } if ((b_.has_value() ? 1 : 0) == 1) { pdl::packet::Builder::write_le(output, *b_); } + return true; } size_t GetSize() const override { @@ -8388,8 +8873,11 @@ class Struct_Optional_Scalar_FieldBuilder : public pdl::packet::Builder { Struct_Optional_Scalar_FieldBuilder(Struct_Optional_Scalar_FieldBuilder&&) = default; Struct_Optional_Scalar_FieldBuilder& operator=(Struct_Optional_Scalar_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -8442,7 +8930,7 @@ class Struct_Optional_Enum_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast((a_.has_value() ? 0 : 1))) | (static_cast((b_.has_value() ? 1 : 0)) << 1)); if ((a_.has_value() ? 0 : 1) == 0) { pdl::packet::Builder::write_le(output, static_cast(*a_)); @@ -8450,6 +8938,7 @@ class Struct_Optional_Enum_Field_ : public pdl::packet::Builder { if ((b_.has_value() ? 1 : 0) == 1) { pdl::packet::Builder::write_le(output, static_cast(*b_)); } + return true; } size_t GetSize() const override { @@ -8512,8 +9001,11 @@ class Struct_Optional_Enum_FieldBuilder : public pdl::packet::Builder { Struct_Optional_Enum_FieldBuilder(Struct_Optional_Enum_FieldBuilder&&) = default; Struct_Optional_Enum_FieldBuilder& operator=(Struct_Optional_Enum_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -8558,14 +9050,19 @@ class Struct_Optional_Struct_Field_ : public pdl::packet::Builder { return true; } - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast((a_.has_value() ? 0 : 1))) | (static_cast((b_.has_value() ? 1 : 0)) << 1)); if ((a_.has_value() ? 0 : 1) == 0) { - a_->Serialize(output); + if (!a_->Serialize(output)) { + return false; + } } if ((b_.has_value() ? 1 : 0) == 1) { - b_->Serialize(output); + if (!b_->Serialize(output)) { + return false; + } } + return true; } size_t GetSize() const override { @@ -8628,8 +9125,11 @@ class Struct_Optional_Struct_FieldBuilder : public pdl::packet::Builder { Struct_Optional_Struct_FieldBuilder(Struct_Optional_Struct_FieldBuilder&&) = default; Struct_Optional_Struct_FieldBuilder& operator=(Struct_Optional_Struct_FieldBuilder const&) = default; - void Serialize(std::vector& output) const override { - s_.Serialize(output); + bool Serialize(std::vector& output) const override { + if (!s_.Serialize(output)) { + return false; + } + return true; } size_t GetSize() const override { @@ -8724,8 +9224,9 @@ class Enum_Incomplete_Truncated_ClosedBuilder : public pdl::packet::Builder { Enum_Incomplete_Truncated_ClosedBuilder(Enum_Incomplete_Truncated_ClosedBuilder&&) = default; Enum_Incomplete_Truncated_ClosedBuilder& operator=(Enum_Incomplete_Truncated_ClosedBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(static_cast(e_)))); + return true; } size_t GetSize() const override { @@ -8806,8 +9307,9 @@ class Enum_Incomplete_Truncated_OpenBuilder : public pdl::packet::Builder { Enum_Incomplete_Truncated_OpenBuilder(Enum_Incomplete_Truncated_OpenBuilder&&) = default; Enum_Incomplete_Truncated_OpenBuilder& operator=(Enum_Incomplete_Truncated_OpenBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(static_cast(e_)))); + return true; } size_t GetSize() const override { @@ -8895,8 +9397,9 @@ class Enum_Incomplete_Truncated_Closed_WithRangeBuilder : public pdl::packet::Bu Enum_Incomplete_Truncated_Closed_WithRangeBuilder(Enum_Incomplete_Truncated_Closed_WithRangeBuilder&&) = default; Enum_Incomplete_Truncated_Closed_WithRangeBuilder& operator=(Enum_Incomplete_Truncated_Closed_WithRangeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(static_cast(e_)))); + return true; } size_t GetSize() const override { @@ -8975,8 +9478,9 @@ class Enum_Incomplete_Truncated_Open_WithRangeBuilder : public pdl::packet::Buil Enum_Incomplete_Truncated_Open_WithRangeBuilder(Enum_Incomplete_Truncated_Open_WithRangeBuilder&&) = default; Enum_Incomplete_Truncated_Open_WithRangeBuilder& operator=(Enum_Incomplete_Truncated_Open_WithRangeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(static_cast(e_)))); + return true; } size_t GetSize() const override { @@ -9089,8 +9593,9 @@ class Enum_Complete_TruncatedBuilder : public pdl::packet::Builder { Enum_Complete_TruncatedBuilder(Enum_Complete_TruncatedBuilder&&) = default; Enum_Complete_TruncatedBuilder& operator=(Enum_Complete_TruncatedBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(static_cast(e_)))); + return true; } size_t GetSize() const override { @@ -9178,8 +9683,9 @@ class Enum_Complete_Truncated_WithRangeBuilder : public pdl::packet::Builder { Enum_Complete_Truncated_WithRangeBuilder(Enum_Complete_Truncated_WithRangeBuilder&&) = default; Enum_Complete_Truncated_WithRangeBuilder& operator=(Enum_Complete_Truncated_WithRangeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(static_cast(e_)))); + return true; } size_t GetSize() const override { @@ -9269,8 +9775,9 @@ class Enum_Complete_WithRangeBuilder : public pdl::packet::Builder { Enum_Complete_WithRangeBuilder(Enum_Complete_WithRangeBuilder&&) = default; Enum_Complete_WithRangeBuilder& operator=(Enum_Complete_WithRangeBuilder const&) = default; - void Serialize(std::vector& output) const override { + bool Serialize(std::vector& output) const override { pdl::packet::Builder::write_le(output, (static_cast(static_cast(e_)))); + return true; } size_t GetSize() const override {