Skip to content

Commit

Permalink
lenient script data
Browse files Browse the repository at this point in the history
  • Loading branch information
A1-Triard committed Oct 29, 2024
1 parent 79e706b commit 59c6ecc
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 6 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
edition = "2021"
name = "esl"
version = "0.19.2"
version = "0.19.3"
#rust-version = "nightly"
authors = ["warlock <internalmike@gmail.com>"]
description = "A library for reading, writing and processing ESM/ESP/ESS files."
Expand Down
4 changes: 2 additions & 2 deletions src/record.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ impl<'a> Serialize for FieldBodySerializer<'a> {
Err(S::Error::custom(format!("{} {} field should have byte list type", self.record_tag, self.field_tag)))
},
FieldType::ScriptData => if let Field::ScriptData(data) = self.field {
ValueWithSeed(data, ScriptDataSerde { code_page: self.code_page }).serialize(serializer)
ValueWithSeed(data, ScriptDataSerde { code_page: self.code_page, lenient: true }).serialize(serializer)
} else {
Err(S::Error::custom(format!("{} {} field should have script data type", self.record_tag, self.field_tag)))
},
Expand Down Expand Up @@ -577,7 +577,7 @@ impl<'de> DeserializeSeed<'de> for FieldBodyDeserializer {
StringZListSerde { code_page: self.code_page }.deserialize(deserializer).map(Field::StringZList),
FieldType::U8List => <Vec<u8>>::deserialize(deserializer).map(Field::U8List),
FieldType::ScriptData =>
ScriptDataSerde { code_page: self.code_page }.deserialize(deserializer).map(Field::ScriptData),
ScriptDataSerde { code_page: self.code_page, lenient: true }.deserialize(deserializer).map(Field::ScriptData),
FieldType::U8ListZip => if deserializer.is_human_readable() {
deserializer.deserialize_str(Base64DeVisitor)
} else {
Expand Down
7 changes: 4 additions & 3 deletions src/script_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1267,12 +1267,12 @@ pub struct ScriptData {
}

impl ScriptData {
pub fn to_bytes(&self, code_page: CodePage) -> Result<Vec<u8>, String> {
pub fn to_bytes(&self, code_page: CodePage, lenient: bool) -> Result<Vec<u8>, String> {
let mut bytes = Vec::new();
for stmt in &self.stmts {
stmt.write(code_page, &mut bytes)?;
}
if parser::stmt(code_page)(&self.raw).is_ok() {
if !lenient && parser::stmt(code_page)(&self.raw).is_ok() {
return Err("known func in raw bytes".into());
}
bytes.extend_from_slice(&self.raw);
Expand All @@ -1288,6 +1288,7 @@ impl ScriptData {
#[derive(Clone)]
pub struct ScriptDataSerde {
pub code_page: Option<CodePage>,
pub lenient: bool,
}

const SCRIPT_DATA_STMTS_FIELD: &str = name_of!(stmts in ScriptData);
Expand All @@ -1311,7 +1312,7 @@ impl SerializeSeed for ScriptDataSerde {
let Some(code_page) = self.code_page else {
return Err(S::Error::custom("code page required for binary serialization"));
};
value.to_bytes(code_page).map_err(S::Error::custom)?.serialize(serializer)
value.to_bytes(code_page, self.lenient).map_err(S::Error::custom)?.serialize(serializer)
}
}
}
Expand Down

0 comments on commit 59c6ecc

Please sign in to comment.