summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/extensions.rs38
-rw-r--r--core/modules.rs10
-rw-r--r--core/runtime.rs4
3 files changed, 36 insertions, 16 deletions
diff --git a/core/extensions.rs b/core/extensions.rs
index 94c4a2a79..9b4fb203a 100644
--- a/core/extensions.rs
+++ b/core/extensions.rs
@@ -23,23 +23,43 @@ pub enum ExtensionFileSourceCode {
LoadedFromFsDuringSnapshot(PathBuf),
}
-impl ExtensionFileSourceCode {
+#[derive(Clone, Debug)]
+pub struct ExtensionFileSource {
+ pub specifier: &'static str,
+ pub code: ExtensionFileSourceCode,
+}
+
+impl ExtensionFileSource {
+ fn find_non_ascii(s: &str) -> String {
+ s.chars().filter(|c| !c.is_ascii()).collect::<String>()
+ }
+
pub fn load(&self) -> Result<ModuleCode, Error> {
- match self {
- ExtensionFileSourceCode::IncludedInBinary(code) => Ok((*code).into()),
+ match &self.code {
+ ExtensionFileSourceCode::IncludedInBinary(code) => {
+ debug_assert!(
+ code.is_ascii(),
+ "Extension code must be 7-bit ASCII: {} (found {})",
+ self.specifier,
+ Self::find_non_ascii(code)
+ );
+ Ok((*code).into())
+ }
ExtensionFileSourceCode::LoadedFromFsDuringSnapshot(path) => {
let msg = || format!("Failed to read \"{}\"", path.display());
- Ok(std::fs::read_to_string(path).with_context(msg)?.into())
+ let s = std::fs::read_to_string(path).with_context(msg)?;
+ debug_assert!(
+ s.is_ascii(),
+ "Extension code must be 7-bit ASCII: {} (found {})",
+ self.specifier,
+ Self::find_non_ascii(&s)
+ );
+ Ok(s.into())
}
}
}
}
-#[derive(Clone, Debug)]
-pub struct ExtensionFileSource {
- pub specifier: &'static str,
- pub code: ExtensionFileSourceCode,
-}
pub type OpFnRef = v8::FunctionCallback;
pub type OpMiddlewareFn = dyn Fn(OpDecl) -> OpDecl;
pub type OpStateFn = dyn FnOnce(&mut OpState);
diff --git a/core/modules.rs b/core/modules.rs
index 78efdedfd..cfd68d245 100644
--- a/core/modules.rs
+++ b/core/modules.rs
@@ -309,7 +309,7 @@ impl From<Cow<'static, [u8]>> for ModuleCode {
impl From<&'static str> for ModuleCode {
#[inline(always)]
fn from(value: &'static str) -> Self {
- assert!(value.is_ascii());
+ debug_assert!(value.is_ascii());
ModuleCode::Static(value.as_bytes())
}
}
@@ -331,7 +331,7 @@ impl From<Vec<u8>> for ModuleCode {
impl From<&'static [u8]> for ModuleCode {
#[inline(always)]
fn from(value: &'static [u8]) -> Self {
- assert!(value.is_ascii());
+ debug_assert!(value.is_ascii());
ModuleCode::Static(value)
}
}
@@ -339,7 +339,7 @@ impl From<&'static [u8]> for ModuleCode {
impl<const N: usize> From<&'static [u8; N]> for ModuleCode {
#[inline(always)]
fn from(value: &'static [u8; N]) -> Self {
- assert!(value.is_ascii());
+ debug_assert!(value.is_ascii());
ModuleCode::Static(value)
}
}
@@ -583,7 +583,7 @@ impl ModuleLoader for ExtModuleLoader {
let result = if let Some(load_callback) = &self.maybe_load_callback {
load_callback(file_source)
} else {
- match file_source.code.load() {
+ match file_source.load() {
Ok(code) => Ok(code),
Err(err) => return futures::future::err(err).boxed_local(),
}
@@ -1517,7 +1517,7 @@ impl ModuleMap {
) -> Option<v8::Local<'a, v8::String>> {
match name {
ModuleName::Static(s) => {
- assert!(s.is_ascii());
+ debug_assert!(s.is_ascii());
v8::String::new_external_onebyte_static(scope, s.as_bytes())
}
ModuleName::NotStatic(s) => v8::String::new(scope, s),
diff --git a/core/runtime.rs b/core/runtime.rs
index c5afbda53..787bac972 100644
--- a/core/runtime.rs
+++ b/core/runtime.rs
@@ -751,7 +751,7 @@ impl JsRuntime {
realm.execute_script(
self.v8_isolate(),
file_source.specifier,
- file_source.code.load()?,
+ file_source.load()?,
)?;
}
}
@@ -2544,7 +2544,7 @@ impl JsRealm {
let scope = &mut self.handle_scope(isolate);
let source = Self::string_from_code(scope, &source_code).unwrap();
- assert!(name.is_ascii());
+ debug_assert!(name.is_ascii());
let name =
v8::String::new_external_onebyte_static(scope, name.as_bytes()).unwrap();
let origin = bindings::script_origin(scope, name);