1
0
Fork 0
mirror of https://codeberg.org/demostf/parser.git synced 2026-06-04 02:24:12 +02:00

handle mallformed utf8 gameevent values

This commit is contained in:
Robin Appelman 2020-01-20 12:30:05 +01:00
commit 6599a5d6d2
8 changed files with 201 additions and 9 deletions

View file

@ -9,12 +9,15 @@ use crate::demo::gamevent::{
GameEvent, GameEventDefinition, GameEventEntry, GameEventValue, GameEventValueType,
RawGameEvent,
};
use crate::demo::handle_utf8_error;
use crate::demo::parser::ParseBitSkip;
use crate::{GameEventError, Parse, ParseError, ParserState, ReadResult, Result, Stream};
fn read_event_value(stream: &mut Stream, definition: &GameEventEntry) -> Result<GameEventValue> {
Ok(match definition.kind {
GameEventValueType::String => GameEventValue::String(stream.read()?),
GameEventValueType::String => {
GameEventValue::String(stream.read().or_else(handle_utf8_error)?)
}
GameEventValueType::Float => GameEventValue::Float(stream.read()?),
GameEventValueType::Long => GameEventValue::Long(stream.read()?),
GameEventValueType::Short => GameEventValue::Short(stream.read()?),

View file

@ -3,6 +3,7 @@ use num_enum::TryFromPrimitive;
use serde::{Deserialize, Serialize};
use std::convert::TryFrom;
use crate::demo::handle_utf8_error;
use crate::demo::parser::ParseBitSkip;
use crate::{ParseError, ReadResult, Result, Stream};
@ -145,13 +146,6 @@ pub struct SayText2Message {
pub text: String,
}
fn handle_utf8_error(error: ReadError) -> ReadResult<String> {
match error {
ReadError::Utf8Error(_) => Ok("-- Malformed utf8 --".into()),
_ => Err(error),
}
}
impl BitRead<LittleEndian> for SayText2Message {
fn read(stream: &mut Stream) -> ReadResult<Self> {
let client = stream.read()?;