Skip to content

Commit d7f945a

Browse files
committed
fix: prevent module point to wild pointer
1 parent 4ca63ec commit d7f945a

File tree

22 files changed

+349
-324
lines changed

22 files changed

+349
-324
lines changed

crates/rspack_binding_api/src/plugins/js_loader/context.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ impl TryFrom<&mut LoaderContext<RunnerContext>> for JsLoaderContext {
133133
Ok(JsLoaderContext {
134134
resource: cx.resource_data.resource().to_owned(),
135135
module: ModuleObject::with_ptr(
136-
NonNull::new(module as *const dyn Module as *mut dyn Module).unwrap(),
136+
NonNull::new(module.as_ref() as *const dyn Module as *mut dyn Module).unwrap(),
137137
cx.context.compiler_id,
138138
),
139139
hot: cx.hot,

crates/rspack_core/src/cache/persistent/occasion/make/alternatives/module.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ use rspack_sources::BoxSource;
88
use rspack_util::source_map::{ModuleSourceMapConfig, SourceMapKind};
99

1010
use crate::{
11-
AsyncDependenciesBlockIdentifier, BoxModule, BuildInfo, BuildMeta, CodeGenerationResult,
12-
Compilation, Context, DependenciesBlock, DependencyId, FactoryMeta, Module,
11+
AsyncDependenciesBlockIdentifier, BoxModule, BuildContext, BuildInfo, BuildMeta, BuildResult,
12+
CodeGenerationResult, Compilation, Context, DependenciesBlock, DependencyId, FactoryMeta, Module,
1313
ModuleCodeGenerationContext, ModuleGraph, ModuleIdentifier, ModuleType, RuntimeSpec, SourceType,
1414
ValueCacheVersions,
1515
};
@@ -116,6 +116,19 @@ impl Module for TempModule {
116116
) -> Result<RspackHashDigest> {
117117
unreachable!()
118118
}
119+
120+
async fn build(
121+
self: Box<Self>,
122+
_build_context: BuildContext,
123+
_compilation: Option<&Compilation>,
124+
) -> Result<BuildResult> {
125+
Ok(BuildResult {
126+
module: BoxModule::new(self),
127+
dependencies: vec![],
128+
blocks: vec![],
129+
optimization_bailouts: vec![],
130+
})
131+
}
119132
}
120133

121134
impl Identifiable for TempModule {

crates/rspack_core/src/compilation/build_module_graph/graph_updater/repair/build.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ impl Task<TaskContext> for BuildTask {
7171

7272
result.map::<Vec<Box<dyn Task<TaskContext>>>, _>(|build_result| {
7373
vec![Box::new(BuildResultTask {
74-
module,
7574
build_result: Box::new(build_result),
7675
plugin_driver,
7776
forwarded_ids,
@@ -82,7 +81,6 @@ impl Task<TaskContext> for BuildTask {
8281

8382
#[derive(Debug)]
8483
struct BuildResultTask {
85-
pub module: BoxModule,
8684
pub build_result: Box<BuildResult>,
8785
pub plugin_driver: SharedPluginDriver,
8886
pub forwarded_ids: ForwardedIdSet,
@@ -95,11 +93,11 @@ impl Task<TaskContext> for BuildResultTask {
9593
}
9694
async fn main_run(self: Box<Self>, context: &mut TaskContext) -> TaskResult<TaskContext> {
9795
let BuildResultTask {
98-
mut module,
9996
build_result,
10097
plugin_driver,
10198
mut forwarded_ids,
10299
} = *self;
100+
let mut module = build_result.module;
103101

104102
plugin_driver
105103
.compilation_hooks

crates/rspack_core/src/concatenated_module.rs

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -38,23 +38,24 @@ use swc_experimental_ecma_semantic::resolver::{Semantic, resolver};
3838
use swc_node_comments::SwcComments;
3939

4040
use crate::{
41-
AsyncDependenciesBlockIdentifier, BoxDependency, BoxDependencyTemplate, BoxModuleDependency,
42-
BuildContext, BuildInfo, BuildMeta, BuildMetaDefaultObject, BuildMetaExportsType, BuildResult,
43-
ChunkGraph, ChunkInitFragments, ChunkRenderContext, CodeGenerationDataTopLevelDeclarations,
44-
CodeGenerationExportsFinalNames, CodeGenerationPublicPathAutoReplace, CodeGenerationResult,
45-
Compilation, ConcatenatedModuleIdent, ConcatenationScope, ConditionalInitFragment,
46-
ConnectionState, Context, DEFAULT_EXPORT, DEFAULT_EXPORT_ATOM, DependenciesBlock, DependencyId,
47-
DependencyType, ExportInfoHashKey, ExportProvided, ExportsArgument, ExportsInfoGetter,
48-
ExportsType, FactoryMeta, GetUsedNameParam, ImportedByDeferModulesArtifact, InitFragment,
49-
InitFragmentStage, LibIdentOptions, Module, ModuleArgument, ModuleCodeGenerationContext,
50-
ModuleGraph, ModuleGraphCacheArtifact, ModuleGraphConnection, ModuleIdentifier, ModuleLayer,
51-
ModuleStaticCache, ModuleType, NAMESPACE_OBJECT_EXPORT, ParserOptions, PrefetchExportsInfoMode,
52-
Resolve, RuntimeCondition, RuntimeGlobals, RuntimeSpec, SourceType, URLStaticMode, UsageState,
53-
UsedName, UsedNameItem, escape_identifier, filter_runtime, find_target, get_runtime_key,
54-
impl_source_map_config, merge_runtime_condition, merge_runtime_condition_non_false,
55-
module_update_hash, property_access, property_name,
56-
render_make_deferred_namespace_mode_from_exports_type, reserved_names::RESERVED_NAMES,
57-
subtract_runtime_condition, to_identifier_with_escaped, to_normal_comment,
41+
AsyncDependenciesBlockIdentifier, BoxDependency, BoxDependencyTemplate, BoxModule,
42+
BoxModuleDependency, BuildContext, BuildInfo, BuildMeta, BuildMetaDefaultObject,
43+
BuildMetaExportsType, BuildResult, ChunkGraph, ChunkInitFragments, ChunkRenderContext,
44+
CodeGenerationDataTopLevelDeclarations, CodeGenerationExportsFinalNames,
45+
CodeGenerationPublicPathAutoReplace, CodeGenerationResult, Compilation, ConcatenatedModuleIdent,
46+
ConcatenationScope, ConditionalInitFragment, ConnectionState, Context, DEFAULT_EXPORT,
47+
DEFAULT_EXPORT_ATOM, DependenciesBlock, DependencyId, DependencyType, ExportInfoHashKey,
48+
ExportProvided, ExportsArgument, ExportsInfoGetter, ExportsType, FactoryMeta, GetUsedNameParam,
49+
ImportedByDeferModulesArtifact, InitFragment, InitFragmentStage, LibIdentOptions, Module,
50+
ModuleArgument, ModuleCodeGenerationContext, ModuleGraph, ModuleGraphCacheArtifact,
51+
ModuleGraphConnection, ModuleIdentifier, ModuleLayer, ModuleStaticCache, ModuleType,
52+
NAMESPACE_OBJECT_EXPORT, ParserOptions, PrefetchExportsInfoMode, Resolve, RuntimeCondition,
53+
RuntimeGlobals, RuntimeSpec, SourceType, URLStaticMode, UsageState, UsedName, UsedNameItem,
54+
escape_identifier, filter_runtime, find_target, get_runtime_key, impl_source_map_config,
55+
merge_runtime_condition, merge_runtime_condition_non_false, module_update_hash, property_access,
56+
property_name, render_make_deferred_namespace_mode_from_exports_type,
57+
reserved_names::RESERVED_NAMES, subtract_runtime_condition, to_identifier_with_escaped,
58+
to_normal_comment,
5859
};
5960

6061
type ExportsDefinitionArgs = Vec<(String, String)>;
@@ -742,7 +743,7 @@ impl Module for ConcatenatedModule {
742743

743744
/// the compilation is asserted to be `Some(Compilation)`, https://github.com/webpack/webpack/blob/1f99ad6367f2b8a6ef17cce0e058f7a67fb7db18/lib/optimize/ModuleConcatenationPlugin.js#L394-L418
744745
async fn build(
745-
&mut self,
746+
mut self: Box<Self>,
746747
_build_context: BuildContext,
747748
compilation: Option<&Compilation>,
748749
) -> Result<BuildResult> {
@@ -810,7 +811,12 @@ impl Module for ConcatenatedModule {
810811
.extend(module_build_info.assets.as_ref().clone());
811812
}
812813
// return a dummy result is enough, since we don't build the ConcatenatedModule in make phase
813-
Ok(BuildResult::default())
814+
Ok(BuildResult {
815+
module: BoxModule::new(self),
816+
dependencies: vec![],
817+
blocks: vec![],
818+
optimization_bailouts: vec![],
819+
})
814820
}
815821

816822
// #[tracing::instrument("ConcatenatedModule::code_generation", skip_all, fields(identifier = ?self.identifier()))]

crates/rspack_core/src/context_module.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ use rustc_hash::FxHashMap as HashMap;
2626
use swc_core::atoms::Atom;
2727

2828
use crate::{
29-
AsyncDependenciesBlock, AsyncDependenciesBlockIdentifier, BoxDependency, BuildContext, BuildInfo,
30-
BuildMeta, BuildMetaDefaultObject, BuildMetaExportsType, BuildResult, ChunkGraph,
29+
AsyncDependenciesBlock, AsyncDependenciesBlockIdentifier, BoxDependency, BoxModule, BuildContext,
30+
BuildInfo, BuildMeta, BuildMetaDefaultObject, BuildMetaExportsType, BuildResult, ChunkGraph,
3131
ChunkGroupOptions, CodeGenerationResult, Compilation, ContextElementDependency,
3232
DependenciesBlock, Dependency, DependencyCategory, DependencyId, DependencyLocation,
3333
DynamicImportMode, ExportsType, FactoryMeta, FakeNamespaceObjectMode, GroupOptions,
@@ -1110,7 +1110,7 @@ impl Module for ContextModule {
11101110
}
11111111

11121112
async fn build(
1113-
&mut self,
1113+
mut self: Box<Self>,
11141114
_build_context: BuildContext,
11151115
_: Option<&Compilation>,
11161116
) -> Result<BuildResult> {
@@ -1205,6 +1205,7 @@ impl Module for ContextModule {
12051205
}
12061206

12071207
Ok(BuildResult {
1208+
module: BoxModule::new(self),
12081209
dependencies,
12091210
blocks,
12101211
optimization_bailouts: vec![],

crates/rspack_core/src/external_module.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@ use rustc_hash::{FxHashMap as HashMap, FxHashSet};
1010
use serde::Serialize;
1111

1212
use crate::{
13-
AsyncDependenciesBlockIdentifier, BuildContext, BuildInfo, BuildMeta, BuildMetaExportsType,
14-
BuildResult, ChunkGraph, ChunkInitFragments, ChunkUkey, CodeGenerationDataUrl,
15-
CodeGenerationResult, Compilation, ConcatenationScope, Context, DependenciesBlock, DependencyId,
16-
ExternalType, FactoryMeta, ImportAttributes, InitFragmentExt, InitFragmentKey, InitFragmentStage,
17-
LibIdentOptions, Module, ModuleArgument, ModuleCodeGenerationContext, ModuleCodeTemplate,
18-
ModuleGraph, ModuleType, NAMESPACE_OBJECT_EXPORT, NormalInitFragment, PrefetchExportsInfoMode,
19-
RuntimeGlobals, RuntimeSpec, SourceType, StaticExportsDependency, StaticExportsSpec, UsedExports,
13+
AsyncDependenciesBlockIdentifier, BoxModule, BuildContext, BuildInfo, BuildMeta,
14+
BuildMetaExportsType, BuildResult, ChunkGraph, ChunkInitFragments, ChunkUkey,
15+
CodeGenerationDataUrl, CodeGenerationResult, Compilation, ConcatenationScope, Context,
16+
DependenciesBlock, DependencyId, ExternalType, FactoryMeta, ImportAttributes, InitFragmentExt,
17+
InitFragmentKey, InitFragmentStage, LibIdentOptions, Module, ModuleArgument,
18+
ModuleCodeGenerationContext, ModuleCodeTemplate, ModuleGraph, ModuleType,
19+
NAMESPACE_OBJECT_EXPORT, NormalInitFragment, PrefetchExportsInfoMode, RuntimeGlobals,
20+
RuntimeSpec, SourceType, StaticExportsDependency, StaticExportsSpec, UsedExports,
2021
extract_url_and_global, impl_module_meta_info, module_update_hash, property_access,
2122
rspack_sources::{BoxSource, RawStringSource, SourceExt},
2223
to_identifier,
@@ -826,7 +827,7 @@ impl Module for ExternalModule {
826827
}
827828

828829
async fn build(
829-
&mut self,
830+
mut self: Box<Self>,
830831
build_context: BuildContext,
831832
_: Option<&Compilation>,
832833
) -> Result<BuildResult> {
@@ -872,6 +873,7 @@ impl Module for ExternalModule {
872873
}
873874
self.build_meta.exports_type = exports_type;
874875
Ok(BuildResult {
876+
module: BoxModule::new(self),
875877
dependencies: vec![Box::new(StaticExportsDependency::new(
876878
StaticExportsSpec::True,
877879
can_mangle,

crates/rspack_core/src/loader/loader_runner.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pub struct RunnerContext {
1111
pub compilation_id: CompilationId,
1212
pub options: Arc<CompilerOptions>,
1313
pub resolver_factory: Arc<ResolverFactory>,
14-
pub module: NormalModule,
14+
pub module: Box<NormalModule>,
1515
pub source_map_kind: SourceMapKind,
1616
}
1717

crates/rspack_core/src/module.rs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -231,8 +231,9 @@ pub struct BuildMeta {
231231
}
232232

233233
// webpack build info
234-
#[derive(Debug, Default)]
234+
#[derive(Debug)]
235235
pub struct BuildResult {
236+
pub module: BoxModule,
236237
/// Whether the result is cacheable, i.e shared between builds.
237238
pub dependencies: Vec<BoxDependency>,
238239
pub blocks: Vec<Box<AsyncDependenciesBlock>>,
@@ -289,12 +290,10 @@ pub trait Module:
289290
/// The actual build of the module, which will be called by the `Compilation`.
290291
/// Build can also returns the dependencies of the module, which will be used by the `Compilation` to build the dependency graph.
291292
async fn build(
292-
&mut self,
293+
self: Box<Self>,
293294
_build_context: BuildContext,
294295
_compilation: Option<&Compilation>,
295-
) -> Result<BuildResult> {
296-
Ok(Default::default())
297-
}
296+
) -> Result<BuildResult>;
298297

299298
fn factory_meta(&self) -> Option<&FactoryMeta>;
300299

@@ -573,6 +572,14 @@ impl BoxModule {
573572
pub fn new(module: Box<dyn Module>) -> Self {
574573
BoxModule(module)
575574
}
575+
576+
pub async fn build(
577+
self,
578+
build_context: BuildContext,
579+
compilation: Option<&Compilation>,
580+
) -> Result<BuildResult> {
581+
self.0.build(build_context, compilation).await
582+
}
576583
}
577584

578585
impl AsInnerConverter for BoxModule {
@@ -803,7 +810,7 @@ mod test {
803810
}
804811

805812
async fn build(
806-
&mut self,
813+
self: Box<Self>,
807814
_build_context: BuildContext,
808815
_compilation: Option<&Compilation>,
809816
) -> Result<BuildResult> {

0 commit comments

Comments
 (0)