pxnpm 4.1.2 → 4.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/{pnpm.cjs → pxnpm.cjs} +0 -9
- package/dist/node_modules/.modules.yaml +103 -200
- package/dist/node_modules/.pnpm/lock.yaml +486 -482
- package/dist/node_modules/tar/lib/unpack.js +22 -5
- package/dist/node_modules/tar/package.json +1 -1
- package/dist/pnpm.cjs +12532 -14022
- package/dist/worker.js +4 -4
- package/package.json +3 -3
- /package/bin/{pnpx.cjs → pxnpx.cjs} +0 -0
|
@@ -48,6 +48,7 @@ const crypto = require('crypto')
|
|
|
48
48
|
const getFlag = require('./get-write-flag.js')
|
|
49
49
|
const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform
|
|
50
50
|
const isWindows = platform === 'win32'
|
|
51
|
+
const DEFAULT_MAX_DEPTH = 1024
|
|
51
52
|
|
|
52
53
|
// Unlinks on Windows are not atomic.
|
|
53
54
|
//
|
|
@@ -181,6 +182,12 @@ class Unpack extends Parser {
|
|
|
181
182
|
this.processGid = (this.preserveOwner || this.setOwner) && process.getgid ?
|
|
182
183
|
process.getgid() : null
|
|
183
184
|
|
|
185
|
+
// prevent excessively deep nesting of subfolders
|
|
186
|
+
// set to `Infinity` to remove this restriction
|
|
187
|
+
this.maxDepth = typeof opt.maxDepth === 'number'
|
|
188
|
+
? opt.maxDepth
|
|
189
|
+
: DEFAULT_MAX_DEPTH
|
|
190
|
+
|
|
184
191
|
// mostly just for testing, but useful in some cases.
|
|
185
192
|
// Forcibly trigger a chown on every entry, no matter what
|
|
186
193
|
this.forceChown = opt.forceChown === true
|
|
@@ -238,13 +245,13 @@ class Unpack extends Parser {
|
|
|
238
245
|
}
|
|
239
246
|
|
|
240
247
|
[CHECKPATH] (entry) {
|
|
248
|
+
const p = normPath(entry.path)
|
|
249
|
+
const parts = p.split('/')
|
|
250
|
+
|
|
241
251
|
if (this.strip) {
|
|
242
|
-
const parts = normPath(entry.path).split('/')
|
|
243
252
|
if (parts.length < this.strip) {
|
|
244
253
|
return false
|
|
245
254
|
}
|
|
246
|
-
entry.path = parts.slice(this.strip).join('/')
|
|
247
|
-
|
|
248
255
|
if (entry.type === 'Link') {
|
|
249
256
|
const linkparts = normPath(entry.linkpath).split('/')
|
|
250
257
|
if (linkparts.length >= this.strip) {
|
|
@@ -253,11 +260,21 @@ class Unpack extends Parser {
|
|
|
253
260
|
return false
|
|
254
261
|
}
|
|
255
262
|
}
|
|
263
|
+
parts.splice(0, this.strip)
|
|
264
|
+
entry.path = parts.join('/')
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
if (isFinite(this.maxDepth) && parts.length > this.maxDepth) {
|
|
268
|
+
this.warn('TAR_ENTRY_ERROR', 'path excessively deep', {
|
|
269
|
+
entry,
|
|
270
|
+
path: p,
|
|
271
|
+
depth: parts.length,
|
|
272
|
+
maxDepth: this.maxDepth,
|
|
273
|
+
})
|
|
274
|
+
return false
|
|
256
275
|
}
|
|
257
276
|
|
|
258
277
|
if (!this.preservePaths) {
|
|
259
|
-
const p = normPath(entry.path)
|
|
260
|
-
const parts = p.split('/')
|
|
261
278
|
if (parts.includes('..') || isWindows && /^[a-z]:\.\.$/i.test(parts[0])) {
|
|
262
279
|
this.warn('TAR_ENTRY_ERROR', `path contains '..'`, {
|
|
263
280
|
entry,
|