Skip to content

Commit e103f8a

Browse files
authored
Merge pull request #27 from advanced-security/copilot/sub-pr-21-please-work
Fix race conditions from unawaited async forEach callbacks
2 parents d6cad1f + f119054 commit e103f8a

File tree

1 file changed

+21
-13
lines changed

1 file changed

+21
-13
lines changed

src/componentDetection.ts

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -131,15 +131,15 @@ export default class ComponentDetection {
131131
const packageCache = new PackageCache();
132132
const packages: Array<ComponentDetectionPackage> = [];
133133

134-
componentsFound.forEach(async (component: any) => {
134+
for (const component of componentsFound) {
135135
// Skip components without packageUrl
136136
if (!component.component.packageUrl) {
137137
console.debug(`Skipping component detected without packageUrl: ${JSON.stringify({
138138
id: component.component.id,
139139
name: component.component.name || 'unnamed',
140140
type: component.component.type || 'unknown'
141141
}, null, 2)}`);
142-
return;
142+
continue;
143143
}
144144

145145
console.debug(`Processing component: ${component.component.id}`);
@@ -150,7 +150,7 @@ export default class ComponentDetection {
150150
// Skip if the packageUrl is empty (indicates an invalid or missing packageUrl)
151151
if (!packageUrl) {
152152
console.debug(`Skipping component with invalid packageUrl: ${component.component.id}`);
153-
return;
153+
continue;
154154
}
155155

156156
if (!packageCache.hasPackage(packageUrl)) {
@@ -159,16 +159,16 @@ export default class ComponentDetection {
159159
packageCache.addPackage(pkg);
160160
packages.push(pkg);
161161
}
162-
});
162+
}
163163

164164
// Set the transitive dependencies
165165
console.debug("Sorting out transitive dependencies");
166-
packages.forEach(async (pkg: ComponentDetectionPackage) => {
167-
pkg.topLevelReferrers.forEach(async (referrer: any) => {
166+
for (const pkg of packages) {
167+
for (const referrer of pkg.topLevelReferrers) {
168168
// Skip if referrer doesn't have a valid packageUrl
169169
if (!referrer.packageUrl) {
170170
console.debug(`Skipping referrer without packageUrl for component: ${pkg.id}`);
171-
return;
171+
continue;
172172
}
173173

174174
const referrerUrl = ComponentDetection.makePackageUrl(referrer.packageUrl);
@@ -177,23 +177,23 @@ export default class ComponentDetection {
177177
// Skip if the generated packageUrl is empty
178178
if (!referrerUrl) {
179179
console.debug(`Skipping referrer with invalid packageUrl for component: ${pkg.id}`);
180-
return;
180+
continue;
181181
}
182182

183183
try {
184184
const referrerPackage = packageCache.lookupPackage(referrerUrl);
185185
if (referrerPackage === pkg) {
186186
console.debug(`Found self-reference for package: ${pkg.id}`);
187-
return; // Skip self-references
187+
continue; // Skip self-references
188188
}
189189
if (referrerPackage) {
190190
referrerPackage.dependsOn(pkg);
191191
}
192192
} catch (error) {
193193
console.debug(`Error looking up referrer package: ${error}`);
194194
}
195-
});
196-
});
195+
}
196+
}
197197

198198
// Create manifests
199199
const manifests: Array<Manifest> = [];
@@ -364,11 +364,19 @@ export default class ComponentDetection {
364364
}
365365
}
366366

367+
/**
368+
* Type for referrer objects in topLevelReferrers array
369+
*/
370+
type TopLevelReferrer = {
371+
packageUrl?: any;
372+
packageUrlString?: string;
373+
};
374+
367375
class ComponentDetectionPackage extends Package {
368376
public packageUrlString: string;
369377

370-
constructor(packageUrl: string, public id: string, public isDevelopmentDependency: boolean, public topLevelReferrers: [],
371-
public locationsFoundAt: [], public containerDetailIds: [], public containerLayerIds: []) {
378+
constructor(packageUrl: string, public id: string, public isDevelopmentDependency: boolean, public topLevelReferrers: TopLevelReferrer[],
379+
public locationsFoundAt: string[], public containerDetailIds: string[], public containerLayerIds: string[]) {
372380
super(packageUrl);
373381
this.packageUrlString = packageUrl;
374382
}

0 commit comments

Comments
 (0)