mirror of
https://codeberg.org/demostf/parser.git
synced 2026-06-03 18:24:05 +02:00
handle malformed utf8 in names and cvars
This commit is contained in:
parent
5f470fefe2
commit
d12cf35e47
9 changed files with 41 additions and 13 deletions
|
|
@ -130,11 +130,3 @@ pub struct CmdKeyValuesMessage {
|
|||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for CmdKeyValuesMessage{}
|
||||
|
||||
#[derive(BitRead, Debug)]
|
||||
pub struct SetConVarMessage {
|
||||
#[size_bits = 8]
|
||||
vars: HashMap<String, String>,
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for SetConVarMessage{}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ use crate::demo::message::stringtable::*;
|
|||
use crate::demo::message::tempentities::*;
|
||||
use crate::demo::message::usermessage::*;
|
||||
use crate::demo::message::voice::*;
|
||||
use crate::demo::message::setconvar::*;
|
||||
use crate::demo::parser::ParseBitSkip;
|
||||
|
||||
pub mod bspdecal;
|
||||
|
|
@ -25,6 +26,7 @@ pub mod stringtable;
|
|||
pub mod tempentities;
|
||||
pub mod usermessage;
|
||||
pub mod voice;
|
||||
pub mod setconvar;
|
||||
|
||||
#[derive(Primitive, Debug, Clone, Copy, PartialEq, Eq, Serialize_repr, Deserialize_repr)]
|
||||
#[repr(u8)]
|
||||
|
|
|
|||
27
src/demo/message/setconvar.rs
Normal file
27
src/demo/message/setconvar.rs
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
use bitstream_reader::{BitRead, BitReadSized, LittleEndian, BitSkip};
|
||||
|
||||
use crate::demo::message::stringtable::log_base2;
|
||||
use crate::{ReadResult, Stream};
|
||||
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct SetConVarMessage {
|
||||
vars: Vec<(String, String)>,
|
||||
}
|
||||
|
||||
impl BitRead<LittleEndian> for SetConVarMessage {
|
||||
fn read(stream: &mut Stream) -> ReadResult<Self> {
|
||||
let count: u8 = stream.read()?;
|
||||
let mut vars: Vec<(String, String)> = Vec::with_capacity(count as usize);
|
||||
for _ in 0..count {
|
||||
let key = stream.read().unwrap_or_else(|_| "Malformed cvar name".to_string());
|
||||
let value = stream.read().unwrap_or_else(|_| "Malformed cvar value".to_string());
|
||||
vars.push((key, value));
|
||||
}
|
||||
Ok(SetConVarMessage {
|
||||
vars
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for SetConVarMessage {}
|
||||
|
|
@ -268,7 +268,7 @@ impl Analyser {
|
|||
}
|
||||
|
||||
fn parse_user_info(&mut self, text: &String, mut data: Stream) -> ReadResult<()> {
|
||||
let name: String = data.read_sized(32)?;
|
||||
let name: String = data.read_sized(32).unwrap_or("Malformed Name".into());
|
||||
let user_id = UserId((data.read::<u32>()? & 255) as u8);
|
||||
let steam_id: String = data.read()?;
|
||||
let entity_id: Option<u32> = text.parse().ok();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue