java-topology/defects/nestjs/patch/nestjs-0001-scanner-ctxregistry-set.patch

39 lines
1.5 KiB
Diff

diff --git a/packages/core/scanner.ts b/packages/core/scanner.ts
index xxxxxxx..xxxxxxx 100644
--- a/packages/core/scanner.ts
+++ b/packages/core/scanner.ts
@@ -67,7 +67,7 @@ interface ModulesScanParameters {
moduleDefinition: ModuleDefinition;
scope?: Type<unknown>[];
- ctxRegistry?: (ForwardReference | DynamicModule | Type<unknown>)[];
+ ctxRegistry?: Set<ForwardReference | DynamicModule | Type<unknown>>;
overrides?: ModuleOverride[];
lazy?: boolean;
}
@@ -106,7 +106,7 @@ export class DependenciesScanner {
public async scanForModules({
moduleDefinition,
lazy,
scope = [],
- ctxRegistry = [],
+ ctxRegistry = new Set(),
overrides = [],
}: ModulesScanParameters): Promise<Module[]> {
const { moduleRef: moduleInstance, inserted: moduleInserted } =
@@ -123,7 +123,7 @@ export class DependenciesScanner {
- ctxRegistry.push(moduleDefinition);
+ // CWE-407 fix: Set.add() is O(1); was Array.push() feeding an O(n) .includes()
+ ctxRegistry.add(moduleDefinition);
if (this.isForwardReference(moduleDefinition)) {
moduleDefinition = (moduleDefinition as ForwardReference).forwardRef();
@@ -152,7 +152,7 @@ export class DependenciesScanner {
if (!innerModule) {
throw new InvalidModuleException(moduleDefinition, index, scope);
}
- if (ctxRegistry.includes(innerModule)) {
+ // CWE-407 fix: Set.has() is O(1); was Array.includes() = O(n) scan
+ if (ctxRegistry.has(innerModule)) {
continue;
}
const moduleRefs = await this.scanForModules({