From 83005a7ce587a09514afaa35c74e24765a6e37cf Mon Sep 17 00:00:00 2001 From: EmperorBale Date: Mon, 9 Aug 2021 13:30:23 -0700 Subject: [PATCH] avm2: Update flash-lso version --- core/Cargo.toml | 2 +- core/src/avm1/globals/shared_object.rs | 4 ++-- core/src/avm2/globals/flash/utils/bytearray.rs | 9 ++++++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/core/Cargo.toml b/core/Cargo.toml index c1aa162da..8723b247b 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -38,7 +38,7 @@ nellymoser-rs = { git = "https://github.com/ruffle-rs/nellymoser" } h263-rs = { git = "https://github.com/ruffle-rs/h263-rs", rev = "03dcd486e88381635647a7386105cb802921b69c", optional = true } h263-rs-yuv = { git = "https://github.com/ruffle-rs/h263-rs", rev = "03dcd486e88381635647a7386105cb802921b69c", optional = true } regress = "0.4" -flash-lso = { git = "https://github.com/ruffle-rs/rust-flash-lso" } +flash-lso = { git = "https://github.com/ruffle-rs/rust-flash-lso", rev = "19fecd07b9888c4bdaa66771c468095783b52bed" } json = "0.12.4" lzma-rs = {version = "0.2.0", optional = true } dasp = { git = "https://github.com/RustAudio/dasp", rev = "f05a703", features = ["interpolate", "interpolate-linear", "signal"] } diff --git a/core/src/avm1/globals/shared_object.rs b/core/src/avm1/globals/shared_object.rs index 9d4ba7ce9..a9bcd7abd 100644 --- a/core/src/avm1/globals/shared_object.rs +++ b/core/src/avm1/globals/shared_object.rs @@ -423,7 +423,7 @@ pub fn get_local<'gc>( if let Some(saved) = activation.context.storage.get(&full_name) { // Attempt to load it as an Lso if let Ok(lso) = flash_lso::read::Reader::default().parse(&saved) { - data = deserialize_lso(activation, &lso.1)?.into(); + data = deserialize_lso(activation, &lso)?.into(); } else { // Attempt to load legacy Json if let Ok(saved_string) = String::from_utf8(saved) { @@ -567,7 +567,7 @@ pub fn flush<'gc>( AMFVersion::AMF0, ); - let bytes = flash_lso::write::write_to_bytes(&mut lso); + let bytes = flash_lso::write::write_to_bytes(&mut lso).unwrap_or_default(); Ok(activation.context.storage.put(&name, &bytes).into()) } diff --git a/core/src/avm2/globals/flash/utils/bytearray.rs b/core/src/avm2/globals/flash/utils/bytearray.rs index 42184f14a..7aab603dc 100644 --- a/core/src/avm2/globals/flash/utils/bytearray.rs +++ b/core/src/avm2/globals/flash/utils/bytearray.rs @@ -11,7 +11,7 @@ use crate::character::Character; use crate::string::AvmString; use encoding_rs::Encoding; use encoding_rs::UTF_8; -use flash_lso::amf0::read::parse_single_element as parse_amf0; +use flash_lso::amf0::read::AMF0Decoder; use flash_lso::amf3::read::AMF3Decoder; use flash_lso::types::Value as AmfValue; use gc_arena::{GcCell, MutationContext}; @@ -829,14 +829,17 @@ pub fn read_object<'gc>( let bytes = bytearray.read_at(bytearray.bytes_available(), bytearray.position())?; let (bytes_left, value) = match bytearray.object_encoding() { ObjectEncoding::Amf0 => { - let (extra, amf) = parse_amf0(bytes).map_err(|_| "EOFError: Reached EOF")?; + let mut decoder = AMF0Decoder::default(); + let (extra, amf) = decoder + .parse_single_element(bytes) + .map_err(|_| "Error: Invalid object")?; (extra.len(), deserialize_value(activation, &amf)?) } ObjectEncoding::Amf3 => { let mut decoder = AMF3Decoder::default(); let (extra, amf) = decoder .parse_single_element(bytes) - .map_err(|_| "EOFError: Reached EOF")?; + .map_err(|_| "Error: Invalid object")?; (extra.len(), deserialize_value(activation, &amf)?) } };