Skip to content

Commit 3b4ed97

Browse files
authored
feat(codegen): validate __TAURI_ISOLATION_HOOK__ is referenced (#4631)
1 parent d5e6f7f commit 3b4ed97

3 files changed

Lines changed: 36 additions & 5 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"tauri-codegen": patch
3+
---
4+
5+
Validate `__TAURI_ISOLATION_HOOK__` being set by a file in the isolation application.

core/tauri-codegen/src/context.rs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -330,13 +330,28 @@ pub fn context_codegen(data: ContextData) -> Result<TokenStream, EmbeddedAssetsE
330330
let dir = config_parent.join(dir);
331331
if !dir.exists() {
332332
panic!(
333-
"The isolation dir configuration is set to `{:?}` but this path doesn't exist",
333+
"The isolation application path is set to `{:?}` but it does not exist",
334334
dir
335335
)
336336
}
337337

338+
let mut sets_isolation_hook = false;
339+
338340
let key = uuid::Uuid::new_v4().to_string();
339-
let assets = EmbeddedAssets::new(dir.clone(), &options, map_isolation(&options, dir))?;
341+
let map_isolation = map_isolation(&options, dir.clone());
342+
let assets = EmbeddedAssets::new(dir, &options, |key, path, input, csp_hashes| {
343+
// we check if `__TAURI_ISOLATION_HOOK__` exists in the isolation code
344+
// before modifying the files since we inject our own `__TAURI_ISOLATION_HOOK__` reference in HTML files
345+
if String::from_utf8_lossy(input).contains("__TAURI_ISOLATION_HOOK__") {
346+
sets_isolation_hook = true;
347+
}
348+
map_isolation(key, path, input, csp_hashes)
349+
})?;
350+
351+
if !sets_isolation_hook {
352+
panic!("The isolation application does not contain a file setting the `window.__TAURI_ISOLATION_HOOK__` value.");
353+
}
354+
340355
let schema = options.isolation_schema;
341356

342357
quote!(#root::Pattern::Isolation {

core/tauri-codegen/src/embedded_assets.rs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,12 @@ impl EmbeddedAssets {
246246
pub fn new(
247247
input: impl Into<EmbeddedAssetsInput>,
248248
options: &AssetOptions,
249-
map: impl Fn(&AssetKey, &Path, &mut Vec<u8>, &mut CspHashes) -> Result<(), EmbeddedAssetsError>,
249+
mut map: impl FnMut(
250+
&AssetKey,
251+
&Path,
252+
&mut Vec<u8>,
253+
&mut CspHashes,
254+
) -> Result<(), EmbeddedAssetsError>,
250255
) -> Result<Self, EmbeddedAssetsError> {
251256
// we need to pre-compute all files now, so that we can inject data from all files into a few
252257
let RawEmbeddedAssets { paths, csp_hashes } = RawEmbeddedAssets::new(input.into(), options)?;
@@ -262,7 +267,8 @@ impl EmbeddedAssets {
262267
assets: HashMap::new(),
263268
},
264269
move |mut state, (prefix, entry)| {
265-
let (key, asset) = Self::compress_file(&prefix, entry.path(), &map, &mut state.csp_hashes)?;
270+
let (key, asset) =
271+
Self::compress_file(&prefix, entry.path(), &mut map, &mut state.csp_hashes)?;
266272
state.assets.insert(key, asset);
267273
Result::<_, EmbeddedAssetsError>::Ok(state)
268274
},
@@ -292,7 +298,12 @@ impl EmbeddedAssets {
292298
fn compress_file(
293299
prefix: &Path,
294300
path: &Path,
295-
map: &impl Fn(&AssetKey, &Path, &mut Vec<u8>, &mut CspHashes) -> Result<(), EmbeddedAssetsError>,
301+
map: &mut impl FnMut(
302+
&AssetKey,
303+
&Path,
304+
&mut Vec<u8>,
305+
&mut CspHashes,
306+
) -> Result<(), EmbeddedAssetsError>,
296307
csp_hashes: &mut CspHashes,
297308
) -> Result<Asset, EmbeddedAssetsError> {
298309
let mut input = std::fs::read(path).map_err(|error| EmbeddedAssetsError::AssetRead {

0 commit comments

Comments
 (0)