From 802aa9b7a7a762b3b260b6b077c180fb4ae5a3a5 Mon Sep 17 00:00:00 2001 From: Mike Welsh Date: Tue, 29 Dec 2020 12:01:50 -0800 Subject: [PATCH] avm1: Allow SharedObject creation even if URL is unknown (fix #2150) Allow SharedObjects to be created even in the case that the movie URL is None (for example, loading an SWF from bytes). Use a dummy "localhost" URL. --- core/src/avm1/globals/shared_object.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/core/src/avm1/globals/shared_object.rs b/core/src/avm1/globals/shared_object.rs index 4373b9f67..7940a1ea7 100644 --- a/core/src/avm1/globals/shared_object.rs +++ b/core/src/avm1/globals/shared_object.rs @@ -176,11 +176,16 @@ pub fn get_local<'gc>( return Ok(Value::Null); }; - let mut movie_url = if let Some(url) = movie.url().and_then(|url| url::Url::parse(url).ok()) { - url + let mut movie_url = if let Some(url) = movie.url() { + if let Ok(url) = url::Url::parse(url) { + url + } else { + log::error!("SharedObject::get_local: Unable to parse movie URL"); + return Ok(Value::Null); + } } else { - log::error!("SharedObject::get_local: Unable to parse movie URL"); - return Ok(Value::Null); + // No URL (loading local data). Use a dummy URL to allow SharedObjects to work. + url::Url::parse("file://localhost").unwrap() }; movie_url.set_query(None); movie_url.set_fragment(None);