Complete first release candidate audit (#107)
Some checks failed
API and SemVer surface / api-surface (push) Failing after 1m34s
Native code generation / deterministic (push) Has been cancelled
Concurrency and resource soak audit / soak (push) Has been cancelled
Documentation / documentation (push) Has been cancelled
performance evidence / audit (push) Has been cancelled
First release candidate / non-fuzz-release-gate (push) Has been cancelled
Release platform and feature matrix / audit (push) Has been cancelled
Release platform and feature matrix / matrix (false, linux-stable-minimal, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (false, macos-stable-portable, x86_64-apple-darwin, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (false, windows-stable-portable, x86_64-pc-windows-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-msrv-portable, x86_64-unknown-linux-gnu, 1.96.0) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-default, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-features, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-release-surface, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Dependency and supply-chain audit / audit (push) Has been cancelled
Native release artifact audit / audit (push) Has been cancelled
Imaging and meshing gate / native (push) Failing after 53s
JPEG 2000 feature / linux (push) Successful in 2m49s
Native Rust workspace compile / compile (push) Failing after 59s
Skia feature / linux (push) Has been cancelled

This commit is contained in:
2026-08-12 14:44:28 +00:00
parent dceb394378
commit c9a1170a27
140 changed files with 82175 additions and 27179 deletions

View File

@@ -1153,12 +1153,16 @@ fn append_dispatch(body: &mut String, packets: &[&PacketDefinition]) {
}
body.push_str(" _ => None,\n }\n}\n\n");
body.push_str(
"pub(crate) fn build_packet(packet_type: PacketType) -> Result<crate::packets::Packet, crate::Error> {\n\
"pub(crate) fn build_packet(packet_type: PacketType) -> Result<crate::packets::Packet, crate::Error> {\n\
let descriptor = descriptor_by_type(packet_type).ok_or(crate::Error::InvalidOperation)?;\n\
let native_body = default_packet_body(packet_type)?;\n\
let native_payload_length = packet_payload_length(packet_type, &native_body)?;\n\
Ok(crate::packets::Packet {\n\
has_variable_blocks: descriptor.blocks.iter().any(|block| matches!(block.repetition, BlockRepetition::Variable)),\n\
header: new_header(descriptor.frequency, descriptor.id, descriptor.zerocoded),\n\
type_: packet_type,\n\
native_body: Some(native_body),\n\
native_payload_length,\n\
})\n\
}\n\n\
pub(crate) const fn new_header(frequency: crate::PacketFrequency, id: u16, zerocoded: bool) -> crate::packets::Header {\n\
@@ -1173,13 +1177,6 @@ fn append_dispatch(body: &mut String, packets: &[&PacketDefinition]) {
let bytes = value.as_binary()?;\n\
Ok(bytes.get(..8).and_then(|value| value.try_into().ok()).map_or(0, u64::from_le_bytes))\n\
}\n\n\
pub(crate) fn empty_packet_osd() -> Result<libremetaverse_structured_data::OSDMap, crate::Error> {\n\
libremetaverse_structured_data::OSDMap::new_with_constructor()\n\
}\n\n\
pub(crate) fn ignore_packet_osd(body: &libremetaverse_structured_data::OSDMap) -> Result<(), crate::Error> {\n\
let _ = body;\n\
Ok(())\n\
}\n\n\
pub(crate) trait GeneratedBlock: Sized {\n\
fn new_generated() -> Self;\n\
fn generated_length(&self) -> i32;\n\
@@ -1269,18 +1266,81 @@ fn append_dispatch(body: &mut String, packets: &[&PacketDefinition]) {
}\n\n",
);
body.push_str(
"#[allow(clippy::too_many_lines)]\npub(crate) fn validate_packet_payload(\n packet_type: PacketType,\n header: crate::packets::Header,\n bytes: &[u8],\n position: &mut i32,\n packet_end: &mut i32,\n) -> Result<(), crate::Error> {\n match packet_type {\n",
"#[allow(clippy::too_many_lines)]\npub(crate) fn default_packet_body(\n packet_type: PacketType,\n) -> Result<libremetaverse_structured_data::OSDMap, crate::Error> {\n match packet_type {\n",
);
for packet in packets {
let _ = writeln!(
body,
" PacketType::{} => {{ let mut packet = <crate::packets::{}Packet as GeneratedPacket>::new_generated(); GeneratedPacket::decode_from_header(&mut packet, header, bytes, position, packet_end) }},",
" PacketType::{} => {{ let packet = <crate::packets::{}Packet as GeneratedPacket>::new_generated(); GeneratedPacket::packet_to_osd(&packet) }},",
packet.name, packet.name
);
}
body.push_str(
" PacketType::Default => Err(crate::Error::InvalidOperation),\n }\n}\n\n",
);
body.push_str(
"#[allow(clippy::too_many_lines)]\npub(crate) fn packet_payload_length(\n packet_type: PacketType,\n packet_body: &libremetaverse_structured_data::OSDMap,\n) -> Result<i32, crate::Error> {\n match packet_type {\n",
);
for packet in packets {
let _ = writeln!(
body,
" PacketType::{} => {{ let mut packet = <crate::packets::{}Packet as GeneratedPacket>::new_generated(); GeneratedPacket::packet_from_osd(&mut packet, packet_body)?; let total = GeneratedPacket::generated_length(&packet); let header = GeneratedPacket::generated_header(&packet); total.checked_sub(i32::try_from(crate::packet_wire::header_length(header.frequency)).map_err(|_| crate::Error::Argument)?).ok_or(crate::Error::Argument) }},",
packet.name, packet.name
);
}
body.push_str(
" PacketType::Default => Err(crate::Error::InvalidOperation),\n }\n}\n\n",
);
body.push_str(
"#[allow(clippy::too_many_lines)]\npub(crate) fn decode_packet_body(\n packet_type: PacketType,\n header: crate::packets::Header,\n bytes: &[u8],\n position: &mut i32,\n packet_end: &mut i32,\n) -> Result<libremetaverse_structured_data::OSDMap, crate::Error> {\n match packet_type {\n",
);
for packet in packets {
let _ = writeln!(
body,
" PacketType::{} => {{ let mut packet = <crate::packets::{}Packet as GeneratedPacket>::new_generated(); GeneratedPacket::decode_from_header(&mut packet, header, bytes, position, packet_end)?; GeneratedPacket::packet_to_osd(&packet) }},",
packet.name, packet.name
);
}
body.push_str(
" PacketType::Default => Err(crate::Error::InvalidOperation),\n }\n}\n\n",
);
body.push_str(
"#[allow(clippy::too_many_lines)]\npub(crate) fn encode_packet_body(\n packet_type: PacketType,\n header: crate::packets::Header,\n packet_body: &libremetaverse_structured_data::OSDMap,\n) -> Result<Vec<u8>, crate::Error> {\n match packet_type {\n",
);
for packet in packets {
let _ = writeln!(
body,
" PacketType::{} => {{ let mut packet = <crate::packets::{}Packet as GeneratedPacket>::new_generated(); GeneratedPacket::packet_from_osd(&mut packet, packet_body)?; let bytes = GeneratedPacket::encode_packet(&packet)?; crate::packet_wire::reheader_packet(&bytes, header) }},",
packet.name, packet.name
);
}
body.push_str(
" PacketType::Default => Err(crate::Error::InvalidOperation),\n }\n}\n\n",
);
body.push_str(
"#[allow(clippy::too_many_lines)]\npub(crate) fn encode_packet_body_multiple(\n packet_type: PacketType,\n header: crate::packets::Header,\n packet_body: &libremetaverse_structured_data::OSDMap,\n) -> Result<Vec<Vec<u8>>, crate::Error> {\n match packet_type {\n",
);
for packet in packets {
let _ = writeln!(
body,
" PacketType::{} => {{ let mut packet = <crate::packets::{}Packet as GeneratedPacket>::new_generated(); GeneratedPacket::packet_from_osd(&mut packet, packet_body)?; let packets = GeneratedPacket::encode_multiple(&packet)?; crate::packet_wire::reheader_packets(&packets, header) }},",
packet.name, packet.name
);
}
body.push_str(
" PacketType::Default => Err(crate::Error::InvalidOperation),\n }\n}\n\n",
);
body.push_str(
"#[must_use]\n#[allow(clippy::too_many_lines)]\npub(crate) fn packet_uses_buffer_pooling(packet_type: PacketType) -> bool {\n match packet_type {\n",
);
for packet in packets {
let _ = writeln!(
body,
" PacketType::{} => <crate::packets::{}Packet as GeneratedPacket>::USES_BUFFER_POOLING,",
packet.name, packet.name
);
}
body.push_str(" PacketType::Default => false,\n }\n}\n\n");
body.push_str(
"#[allow(clippy::too_many_lines)]\npub(crate) fn build_packet_from_osd(\n name: &str,\n body: &libremetaverse_structured_data::OSDMap,\n) -> Result<Option<crate::packets::Packet>, crate::Error> {\n let Some(descriptor) = descriptor_by_name(name) else { return Ok(None); };\n match descriptor.packet_type {\n",
);
@@ -1292,7 +1352,7 @@ fn append_dispatch(body: &mut String, packets: &[&PacketDefinition]) {
);
}
body.push_str(
" PacketType::Default => return Ok(None),\n }\n build_packet(descriptor.packet_type).map(Some)\n}\n\n",
" PacketType::Default => return Ok(None),\n }\n Ok(Some(crate::packets::Packet {\n has_variable_blocks: descriptor.blocks.iter().any(|block| matches!(block.repetition, BlockRepetition::Variable)),\n header: new_header(descriptor.frequency, descriptor.id, descriptor.zerocoded),\n type_: descriptor.packet_type,\n native_body: Some(body.clone()),\n native_payload_length: packet_payload_length(descriptor.packet_type, body)?,\n }))\n}\n\n",
);
}
@@ -1591,7 +1651,7 @@ fn append_packet_impls(body: &mut String, packets: &[&PacketDefinition]) {
if packet_has_composed_base(&packet.name) {
let _ = writeln!(
body,
" base: crate::packets::Packet {{ has_variable_blocks: {}, header: new_header(crate::PacketFrequency::{}, {}, {}), type_: PacketType::{} }},",
" base: crate::packets::Packet {{ has_variable_blocks: {}, header: new_header(crate::PacketFrequency::{}, {}, {}), type_: PacketType::{}, native_body: None, native_payload_length: 0 }},",
variable_count > 0,
frequency_name(packet.frequency),
packet.id,

View File

@@ -860,6 +860,7 @@ fn render_visual_catalog(catalog: &VisualCatalog) -> String {
pub fn params() -> libremetaverse_types::compat::SortedList<i32, VisualParam> { libremetaverse_types::compat::SortedList(generated_params().clone()) }\n\
pub fn find(name: String, wearable: Option<String>) -> Result<VisualParam, crate::Error> { Ok(generated_params().values().find(|param| param.name == name && param.wearable == wearable).cloned().unwrap_or_default()) }\n\
}\n\n\
pub(crate) fn param_by_id(id: i32) -> Option<&'static VisualParam> { generated_params().get(&id) }\n\n\
pub(crate) fn decode_visual_params(bytes: &[u8]) -> HashMap<i32, f32> {\n\
let params = generated_params();\n\
let mut result = HashMap::with_capacity(GROUP0_PARAM_IDS.len());\n\
@@ -881,6 +882,7 @@ fn render_visual_catalog(catalog: &VisualCatalog) -> String {
body.push_str(
"pub(crate) fn new_avatar() -> Result<crate::Avatar, crate::Error> {\n\
Ok(crate::Avatar {\n\
base: crate::Primitive::new_with_constructor()?,\n\
animations: Vec::new(), appearance_flags: crate::AppearanceFlags::NONE, appearance_version: 0,\n\
attachments: Vec::new(), cof_version: 0, control_flags: crate::AgentManagerControlFlags(0),\n\
groups: Vec::new(), hover_height: libremetaverse_types::Vector3::zero(),\n\