Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 30e99ab

Browse files
authored
fix: fallback to unpackedSize to limit tgz size (#928)
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved large package detection by implementing a fallback mechanism for determining package size when standard size information is unavailable, ensuring consistent handling of package version limits. * **Tests** * Added test coverage for the fallback size detection mechanism to verify proper behavior across different package data scenarios. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
1 parent 237c6d7 commit 30e99ab

File tree

3 files changed

+74
-2
lines changed

3 files changed

+74
-2
lines changed

app/core/service/PackageSyncerService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -867,7 +867,7 @@ data sample: ${remoteData.subarray(0, 200).toString()}`;
867867
logs = [];
868868
continue;
869869
}
870-
const size = dist.size;
870+
const size = dist.size ?? dist.unpackedSize;
871871
if (size && size > this.config.cnpmcore.largePackageVersionSize) {
872872
const isAllowLargePackageVersion = await this.packageVersionFileService.isAllowLargePackageVersion(
873873
scope,
@@ -1365,7 +1365,7 @@ ${diff.addedVersions.length} added, ${diff.removedVersions.length} removed, calc
13651365
continue;
13661366
}
13671367

1368-
const size = dist.size;
1368+
const size = dist.size ?? dist.unpackedSize;
13691369
if (size && size > this.config.cnpmcore.largePackageVersionSize) {
13701370
const isAllowLargePackageVersion = await this.packageVersionFileService.isAllowLargePackageVersion(
13711371
scope,

test/core/service/PackageSyncerService/executeTask.test.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2214,6 +2214,42 @@ describe('test/core/service/PackageSyncerService/executeTask.test.ts', () => {
22142214
);
22152215
});
22162216

2217+
it('should mock large package version size block by unpackedSize', async () => {
2218+
mock.error(NPMRegistry.prototype, 'downloadTarball');
2219+
mock.data(NPMRegistry.prototype, 'getFullManifestsBuffer', {
2220+
data: Buffer.from(
2221+
JSON.stringify({
2222+
maintainers: [{ name: 'fengmk2', email: '[email protected]' }],
2223+
versions: {
2224+
'2.0.0': {
2225+
version: '2.0.0',
2226+
dist: { tarball: 'http://foo.com/a.tgz', unpackedSize: 100 * 1024 * 1024 + 1 },
2227+
},
2228+
},
2229+
}),
2230+
),
2231+
res: {},
2232+
headers: {},
2233+
});
2234+
mock(app.config.cnpmcore, 'enableSyncUnpkgFilesWhiteList', true);
2235+
mock(app.config.cnpmcore, 'largePackageVersionSize', 100 * 1024 * 1024);
2236+
const name = 'cnpmcore-test-sync-deprecated';
2237+
await packageSyncerService.createTask(name);
2238+
const task = await packageSyncerService.findExecuteTask();
2239+
assert.ok(task);
2240+
assert.equal(task.targetName, name);
2241+
await packageSyncerService.executeTask(task);
2242+
const stream = await packageSyncerService.findTaskLog(task);
2243+
assert.ok(stream);
2244+
const log = await TestUtil.readStreamToLog(stream);
2245+
// console.log(log);
2246+
assert.match(log, / cnpmcore-test-sync-deprecated /);
2247+
assert.match(
2248+
log,
2249+
/Synced version 2.0.0 fail, large package version size: 104857601, allow size: 104857600, see https:\/\/github\.com\/cnpm\/unpkg-white-list/,
2250+
);
2251+
});
2252+
22172253
it('should mock large package version size allow', async () => {
22182254
app.mockHttpclient('https://registry.npmjs.org/Buffer/-/Buffer-0.0.0.tgz', 'GET', {
22192255
data: await TestUtil.readFixturesFile('registry.npmjs.org/foobar/-/foobar-1.0.0.tgz'),

test/core/service/PackageSyncerService/executeTaskWithPackument.test.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2190,6 +2190,42 @@ describe('test/core/service/PackageSyncerService/executeTaskWithPackument.test.t
21902190
);
21912191
});
21922192

2193+
it('should mock large package version size block by unpackedSize', async () => {
2194+
mock.error(NPMRegistry.prototype, 'downloadTarball');
2195+
mock.data(NPMRegistry.prototype, 'getFullManifestsBuffer', {
2196+
data: Buffer.from(
2197+
JSON.stringify({
2198+
maintainers: [{ name: 'fengmk2', email: '[email protected]' }],
2199+
versions: {
2200+
'2.0.0': {
2201+
version: '2.0.0',
2202+
dist: { tarball: 'http://foo.com/a.tgz', unpackedSize: 100 * 1024 * 1024 + 1 },
2203+
},
2204+
},
2205+
}),
2206+
),
2207+
res: {},
2208+
headers: {},
2209+
});
2210+
mock(app.config.cnpmcore, 'enableSyncUnpkgFilesWhiteList', true);
2211+
mock(app.config.cnpmcore, 'largePackageVersionSize', 100 * 1024 * 1024);
2212+
const name = 'cnpmcore-test-sync-deprecated';
2213+
await packageSyncerService.createTask(name);
2214+
const task = await packageSyncerService.findExecuteTask();
2215+
assert.ok(task);
2216+
assert.equal(task.targetName, name);
2217+
await packageSyncerService.executeTask(task);
2218+
const stream = await packageSyncerService.findTaskLog(task);
2219+
assert.ok(stream);
2220+
const log = await TestUtil.readStreamToLog(stream);
2221+
// console.log(log);
2222+
assert.match(log, / cnpmcore-test-sync-deprecated /);
2223+
assert.match(
2224+
log,
2225+
/Synced version 2.0.0 fail, large package version size: 104857601, allow size: 104857600, see https:\/\/github\.com\/cnpm\/unpkg-white-list/,
2226+
);
2227+
});
2228+
21932229
it('should mock large package version size allow', async () => {
21942230
app.mockHttpclient('https://registry.npmjs.org/Buffer/-/Buffer-0.0.0.tgz', 'GET', {
21952231
data: await TestUtil.readFixturesFile('registry.npmjs.org/foobar/-/foobar-1.0.0.tgz'),

0 commit comments

Comments
 (0)