matrix-fuzz

git clone git://archive.git.mtrnord.blog/MTRNord/matrix-fuzz.git
Log | Files | Refs | README | LICENSE

commit e6f1a4011125086c5bf82cd4953be089aee4debc
parent c52fc1f1482c1c4e8acd5e3a257065b632107189
Author: MTRNord <mtrnord1@gmail.com>
Date:   Fri, 12 Aug 2022 19:19:29 +0200

Cleanup

Diffstat:
Msrc/lib.rs | 10++++------
Msrc/types.rs | 161+------------------------------------------------------------------------------
Asrc/types/create_room.rs | 160+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 166 insertions(+), 165 deletions(-)

diff --git a/src/lib.rs b/src/lib.rs @@ -3,11 +3,9 @@ #![allow(dead_code)] #![allow(clippy::too_many_arguments)] -use std::collections::HashMap; - -use once_cell::sync::OnceCell; - use crate::types::{Flow, LoginGet, LoginPost}; +use once_cell::sync::OnceCell; +use std::collections::HashMap; mod secrets; mod types; @@ -63,7 +61,7 @@ fn login() -> String { mod tests { use reqwest::header::{HeaderValue, CONTENT_TYPE}; - use crate::types::{CreateRoomMagic, CreateRoomMagicJSON}; + use crate::types::create_room::{CreateRoomMagic, CreateRoomMagicJSON}; #[test] #[no_coverage] @@ -130,7 +128,7 @@ mod tests { #[cfg(all(fuzzing, test))] mod tests { - use crate::types::{CreateRoomMagic, CreateRoomMagicJSON}; + use crate::types::create_room::{CreateRoomMagic, CreateRoomMagicJSON}; fn create_room(data: &CreateRoomMagic) -> bool { // FIXME: We probably should set it to null and not do a false positive diff --git a/src/types.rs b/src/types.rs @@ -1,6 +1,6 @@ -use fuzzcheck::DefaultMutator; +pub mod create_room; + use serde::{Deserialize, Serialize}; -use std::collections::HashMap; #[derive(Debug, Serialize, Deserialize)] pub struct LoginGet { @@ -19,160 +19,3 @@ pub struct LoginPost { pub access_token: String, pub home_server: String, } - -#[derive(Clone, Serialize, Deserialize, Debug, Default)] -pub struct CreateRoomMagicJSON { - #[serde(skip_serializing_if = "Option::is_none")] - pub creation_content: Option<HashMap<String, String>>, - #[serde(skip_serializing_if = "Option::is_none")] - pub initial_state: Option<Vec<StateEventJSON>>, - #[serde(skip_serializing_if = "Option::is_none")] - pub invite: Option<Vec<String>>, - // Due to https://github.com/matrix-org/synapse/issues/13512 - //#[serde(skip_serializing_if = "Option::is_none")] - //pub invite_3pid: Option<Vec<Invite3pid>>, - #[serde(skip_serializing_if = "Option::is_none")] - pub is_direct: Option<bool>, - #[serde(skip_serializing_if = "Option::is_none")] - pub name: Option<String>, - #[serde(skip_serializing_if = "Option::is_none")] - pub preset: Option<String>, - #[serde(skip_serializing_if = "Option::is_none")] - pub room_alias_name: Option<String>, - #[serde(skip_serializing_if = "Option::is_none")] - pub room_version: Option<String>, - #[serde(skip_serializing_if = "Option::is_none")] - pub topic: Option<String>, - #[serde(skip_serializing_if = "Option::is_none")] - pub visibility: Option<String>, -} - -// FIXME: This is stupid hacky. -impl From<&CreateRoomMagic> for CreateRoomMagicJSON { - #[no_coverage] - fn from(item: &CreateRoomMagic) -> Self { - let mut creation_content = HashMap::new(); - if let Some(mut creation_content_keys) = item.creation_content_keys.clone() { - if let Some(mut creation_content_values) = item.creation_content_values.clone() { - if creation_content_keys.len() > creation_content_values.len() { - creation_content_keys.truncate(creation_content_values.len()); - } else { - creation_content_values.truncate(creation_content_keys.len()); - } - for (key, value) in creation_content_keys - .iter() - .zip(creation_content_values.iter()) - { - creation_content.insert(key.to_string(), value.to_string()); - } - } - } - - CreateRoomMagicJSON { - invite: item.invite.clone(), - initial_state: item - .initial_state - .clone() - .map(|initial_state| initial_state.into_iter().map(Into::into).collect()), - is_direct: item.is_direct, - name: item.name.clone(), - preset: item.preset.clone(), - room_alias_name: item.room_alias_name.clone(), - room_version: item.room_version.clone(), - topic: item.topic.clone(), - visibility: item.visibility.clone(), - creation_content: if item.creation_content_keys.is_none() - || item.creation_content_values.is_none() - { - None - } else { - Some(creation_content) - }, - } - } -} - -#[derive(Clone, Serialize, Deserialize, Debug, Default, DefaultMutator)] -pub struct CreateRoomMagic { - #[serde(skip_serializing_if = "Option::is_none")] - pub creation_content_keys: Option<Vec<String>>, - #[serde(skip_serializing_if = "Option::is_none")] - pub creation_content_values: Option<Vec<String>>, - #[serde(skip_serializing_if = "Option::is_none")] - pub initial_state: Option<Vec<StateEvent>>, - #[serde(skip_serializing_if = "Option::is_none")] - pub invite: Option<Vec<String>>, - // Due to https://github.com/matrix-org/synapse/issues/13512 - //#[serde(skip_serializing_if = "Option::is_none")] - //pub invite_3pid: Option<Vec<Invite3pid>>, - #[serde(skip_serializing_if = "Option::is_none")] - pub is_direct: Option<bool>, - #[serde(skip_serializing_if = "Option::is_none")] - pub name: Option<String>, - #[serde(skip_serializing_if = "Option::is_none")] - pub preset: Option<String>, - #[serde(skip_serializing_if = "Option::is_none")] - pub room_alias_name: Option<String>, - #[serde(skip_serializing_if = "Option::is_none")] - pub room_version: Option<String>, - #[serde(skip_serializing_if = "Option::is_none")] - pub topic: Option<String>, - #[serde(skip_serializing_if = "Option::is_none")] - pub visibility: Option<String>, -} - -#[derive(Clone, Serialize, Deserialize, Debug, DefaultMutator, Default)] -pub struct Invite3pid { - pub address: String, - pub id_access_token: String, - pub id_server: String, - pub medium: String, -} - -#[derive(Clone, Serialize, Deserialize, Debug, Default)] -pub struct StateEventJSON { - pub content: HashMap<String, String>, - #[serde(rename = "type")] - pub _type: String, - pub state_key: String, -} - -// FIXME: This is stupid hacky. -impl From<StateEvent> for StateEventJSON { - #[no_coverage] - fn from(item: StateEvent) -> Self { - let mut content = HashMap::new(); - let mut item_clone = item.clone(); - if item_clone.content_keys.len() > item_clone.content_values.len() { - item_clone - .content_keys - .truncate(item_clone.content_values.len()); - } else { - item_clone - .content_values - .truncate(item_clone.content_keys.len()); - } - for (key, value) in item_clone - .content_keys - .iter() - .zip(item_clone.content_values.iter()) - { - content.insert(key.to_string(), value.to_string()); - } - - StateEventJSON { - content, - _type: item._type.clone(), - state_key: item.state_key, - } - } -} - -#[derive(Clone, Serialize, Deserialize, Debug, DefaultMutator, Default)] -pub struct StateEvent { - pub content_keys: Vec<String>, - pub content_values: Vec<String>, - #[serde(rename = "type")] - pub _type: String, - pub state_key: String, -} diff --git a/src/types/create_room.rs b/src/types/create_room.rs @@ -0,0 +1,160 @@ +use fuzzcheck::DefaultMutator; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; + +#[derive(Clone, Serialize, Deserialize, Debug, Default)] +pub struct CreateRoomMagicJSON { + #[serde(skip_serializing_if = "Option::is_none")] + pub creation_content: Option<HashMap<String, String>>, + #[serde(skip_serializing_if = "Option::is_none")] + pub initial_state: Option<Vec<StateEventJSON>>, + #[serde(skip_serializing_if = "Option::is_none")] + pub invite: Option<Vec<String>>, + // Due to https://github.com/matrix-org/synapse/issues/13512 + //#[serde(skip_serializing_if = "Option::is_none")] + //pub invite_3pid: Option<Vec<Invite3pid>>, + #[serde(skip_serializing_if = "Option::is_none")] + pub is_direct: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub name: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] + pub preset: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] + pub room_alias_name: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] + pub room_version: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] + pub topic: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] + pub visibility: Option<String>, +} + +// FIXME: This is stupid hacky. +impl From<&CreateRoomMagic> for CreateRoomMagicJSON { + #[no_coverage] + fn from(item: &CreateRoomMagic) -> Self { + let mut creation_content = HashMap::new(); + if let Some(mut creation_content_keys) = item.creation_content_keys.clone() { + if let Some(mut creation_content_values) = item.creation_content_values.clone() { + if creation_content_keys.len() > creation_content_values.len() { + creation_content_keys.truncate(creation_content_values.len()); + } else { + creation_content_values.truncate(creation_content_keys.len()); + } + for (key, value) in creation_content_keys + .iter() + .zip(creation_content_values.iter()) + { + creation_content.insert(key.to_string(), value.to_string()); + } + } + } + + CreateRoomMagicJSON { + invite: item.invite.clone(), + initial_state: item + .initial_state + .clone() + .map(|initial_state| initial_state.into_iter().map(Into::into).collect()), + is_direct: item.is_direct, + name: item.name.clone(), + preset: item.preset.clone(), + room_alias_name: item.room_alias_name.clone(), + room_version: item.room_version.clone(), + topic: item.topic.clone(), + visibility: item.visibility.clone(), + creation_content: if item.creation_content_keys.is_none() + || item.creation_content_values.is_none() + { + None + } else { + Some(creation_content) + }, + } + } +} + +#[derive(Clone, Serialize, Deserialize, Debug, Default, DefaultMutator)] +pub struct CreateRoomMagic { + #[serde(skip_serializing_if = "Option::is_none")] + pub creation_content_keys: Option<Vec<String>>, + #[serde(skip_serializing_if = "Option::is_none")] + pub creation_content_values: Option<Vec<String>>, + #[serde(skip_serializing_if = "Option::is_none")] + pub initial_state: Option<Vec<StateEvent>>, + #[serde(skip_serializing_if = "Option::is_none")] + pub invite: Option<Vec<String>>, + // Due to https://github.com/matrix-org/synapse/issues/13512 + //#[serde(skip_serializing_if = "Option::is_none")] + //pub invite_3pid: Option<Vec<Invite3pid>>, + #[serde(skip_serializing_if = "Option::is_none")] + pub is_direct: Option<bool>, + #[serde(skip_serializing_if = "Option::is_none")] + pub name: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] + pub preset: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] + pub room_alias_name: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] + pub room_version: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] + pub topic: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] + pub visibility: Option<String>, +} + +#[derive(Clone, Serialize, Deserialize, Debug, DefaultMutator, Default)] +pub struct Invite3pid { + pub address: String, + pub id_access_token: String, + pub id_server: String, + pub medium: String, +} + +#[derive(Clone, Serialize, Deserialize, Debug, Default)] +pub struct StateEventJSON { + pub content: HashMap<String, String>, + #[serde(rename = "type")] + pub _type: String, + pub state_key: String, +} + +// FIXME: This is stupid hacky. +impl From<StateEvent> for StateEventJSON { + #[no_coverage] + fn from(item: StateEvent) -> Self { + let mut content = HashMap::new(); + let mut item_clone = item.clone(); + if item_clone.content_keys.len() > item_clone.content_values.len() { + item_clone + .content_keys + .truncate(item_clone.content_values.len()); + } else { + item_clone + .content_values + .truncate(item_clone.content_keys.len()); + } + for (key, value) in item_clone + .content_keys + .iter() + .zip(item_clone.content_values.iter()) + { + content.insert(key.to_string(), value.to_string()); + } + + StateEventJSON { + content, + _type: item._type.clone(), + state_key: item.state_key, + } + } +} + +#[derive(Clone, Serialize, Deserialize, Debug, DefaultMutator, Default)] +pub struct StateEvent { + pub content_keys: Vec<String>, + pub content_values: Vec<String>, + #[serde(rename = "type")] + pub _type: String, + pub state_key: String, +}