Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit cebb2dd

Browse filesBrowse files
authored
Merge 8c6dda0 into 00be60a
2 parents 00be60a + 8c6dda0 commit cebb2dd
Copy full SHA for cebb2dd

File tree

4 files changed

+97
-73
lines changed
Filter options

4 files changed

+97
-73
lines changed

‎.github/workflows/check-dist.yml

Copy file name to clipboardExpand all lines: .github/workflows/check-dist.yml
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ jobs:
2424
steps:
2525
- uses: actions/checkout@v3
2626

27-
- name: Set Node.js 12.x
27+
- name: Set Node.js 16.x
2828
uses: actions/setup-node@v3
2929
with:
30-
node-version: 12.x
30+
node-version: 16.x
3131
cache: npm
3232

3333
- name: Install dependencies

‎.github/workflows/ci.yml

Copy file name to clipboardExpand all lines: .github/workflows/ci.yml
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
- uses: actions/checkout@v3
1414
- uses: actions/setup-node@v3
1515
with:
16-
node-version: 12
16+
node-version: 16
1717
cache: npm
1818
- run: npm ci
1919
- run: npm run style:check

‎README.md

Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ jobs:
376376
- uses: actions/checkout@v3
377377
- uses: actions/setup-node@v3
378378
with:
379-
node-version: 14
379+
node-version: 16
380380
- run: npm ci
381381
# or one-off:
382382
- run: npm install execa

‎dist/index.js

Copy file name to clipboardExpand all lines: dist/index.js
+93-69Lines changed: 93 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -14086,10 +14086,10 @@ exports.getCmdPath = getCmdPath;
1408614086
module.exports = minimatch
1408714087
minimatch.Minimatch = Minimatch
1408814088

14089-
var path = { sep: '/' }
14090-
try {
14091-
path = __webpack_require__(622)
14092-
} catch (er) {}
14089+
var path = (function () { try { return __webpack_require__(622) } catch (e) {}}()) || {
14090+
sep: '/'
14091+
}
14092+
minimatch.sep = path.sep
1409314093

1409414094
var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
1409514095
var expand = __webpack_require__(850)
@@ -14141,43 +14141,64 @@ function filter (pattern, options) {
1414114141
}
1414214142

1414314143
function ext (a, b) {
14144-
a = a || {}
1414514144
b = b || {}
1414614145
var t = {}
14147-
Object.keys(b).forEach(function (k) {
14148-
t[k] = b[k]
14149-
})
1415014146
Object.keys(a).forEach(function (k) {
1415114147
t[k] = a[k]
1415214148
})
14149+
Object.keys(b).forEach(function (k) {
14150+
t[k] = b[k]
14151+
})
1415314152
return t
1415414153
}
1415514154

1415614155
minimatch.defaults = function (def) {
14157-
if (!def || !Object.keys(def).length) return minimatch
14156+
if (!def || typeof def !== 'object' || !Object.keys(def).length) {
14157+
return minimatch
14158+
}
1415814159

1415914160
var orig = minimatch
1416014161

1416114162
var m = function minimatch (p, pattern, options) {
14162-
return orig.minimatch(p, pattern, ext(def, options))
14163+
return orig(p, pattern, ext(def, options))
1416314164
}
1416414165

1416514166
m.Minimatch = function Minimatch (pattern, options) {
1416614167
return new orig.Minimatch(pattern, ext(def, options))
1416714168
}
14169+
m.Minimatch.defaults = function defaults (options) {
14170+
return orig.defaults(ext(def, options)).Minimatch
14171+
}
14172+
14173+
m.filter = function filter (pattern, options) {
14174+
return orig.filter(pattern, ext(def, options))
14175+
}
14176+
14177+
m.defaults = function defaults (options) {
14178+
return orig.defaults(ext(def, options))
14179+
}
14180+
14181+
m.makeRe = function makeRe (pattern, options) {
14182+
return orig.makeRe(pattern, ext(def, options))
14183+
}
14184+
14185+
m.braceExpand = function braceExpand (pattern, options) {
14186+
return orig.braceExpand(pattern, ext(def, options))
14187+
}
14188+
14189+
m.match = function (list, pattern, options) {
14190+
return orig.match(list, pattern, ext(def, options))
14191+
}
1416814192

1416914193
return m
1417014194
}
1417114195

1417214196
Minimatch.defaults = function (def) {
14173-
if (!def || !Object.keys(def).length) return Minimatch
1417414197
return minimatch.defaults(def).Minimatch
1417514198
}
1417614199

1417714200
function minimatch (p, pattern, options) {
14178-
if (typeof pattern !== 'string') {
14179-
throw new TypeError('glob pattern string required')
14180-
}
14201+
assertValidPattern(pattern)
1418114202

1418214203
if (!options) options = {}
1418314204

@@ -14186,9 +14207,6 @@ function minimatch (p, pattern, options) {
1418614207
return false
1418714208
}
1418814209

14189-
// "" only matches ""
14190-
if (pattern.trim() === '') return p === ''
14191-
1419214210
return new Minimatch(pattern, options).match(p)
1419314211
}
1419414212

@@ -14197,15 +14215,14 @@ function Minimatch (pattern, options) {
1419714215
return new Minimatch(pattern, options)
1419814216
}
1419914217

14200-
if (typeof pattern !== 'string') {
14201-
throw new TypeError('glob pattern string required')
14202-
}
14218+
assertValidPattern(pattern)
1420314219

1420414220
if (!options) options = {}
14221+
1420514222
pattern = pattern.trim()
1420614223

1420714224
// windows support: need to use /, not \
14208-
if (path.sep !== '/') {
14225+
if (!options.allowWindowsEscape && path.sep !== '/') {
1420914226
pattern = pattern.split(path.sep).join('/')
1421014227
}
1421114228

@@ -14216,6 +14233,7 @@ function Minimatch (pattern, options) {
1421614233
this.negate = false
1421714234
this.comment = false
1421814235
this.empty = false
14236+
this.partial = !!options.partial
1421914237

1422014238
// make the set of regexps etc.
1422114239
this.make()
@@ -14225,9 +14243,6 @@ Minimatch.prototype.debug = function () {}
1422514243

1422614244
Minimatch.prototype.make = make
1422714245
function make () {
14228-
// don't do it more than once.
14229-
if (this._made) return
14230-
1423114246
var pattern = this.pattern
1423214247
var options = this.options
1423314248

@@ -14247,7 +14262,7 @@ function make () {
1424714262
// step 2: expand braces
1424814263
var set = this.globSet = this.braceExpand()
1424914264

14250-
if (options.debug) this.debug = console.error
14265+
if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) }
1425114266

1425214267
this.debug(this.pattern, set)
1425314268

@@ -14327,19 +14342,29 @@ function braceExpand (pattern, options) {
1432714342
pattern = typeof pattern === 'undefined'
1432814343
? this.pattern : pattern
1432914344

14330-
if (typeof pattern === 'undefined') {
14331-
throw new TypeError('undefined pattern')
14332-
}
14345+
assertValidPattern(pattern)
1433314346

14334-
if (options.nobrace ||
14335-
!pattern.match(/\{.*\}/)) {
14347+
// Thanks to Yeting Li <https://github.com/yetingli> for
14348+
// improving this regexp to avoid a ReDOS vulnerability.
14349+
if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) {
1433614350
// shortcut. no need to expand.
1433714351
return [pattern]
1433814352
}
1433914353

1434014354
return expand(pattern)
1434114355
}
1434214356

14357+
var MAX_PATTERN_LENGTH = 1024 * 64
14358+
var assertValidPattern = function (pattern) {
14359+
if (typeof pattern !== 'string') {
14360+
throw new TypeError('invalid pattern')
14361+
}
14362+
14363+
if (pattern.length > MAX_PATTERN_LENGTH) {
14364+
throw new TypeError('pattern is too long')
14365+
}
14366+
}
14367+
1434314368
// parse a component of the expanded set.
1434414369
// At this point, no pattern may contain "/" in it
1434514370
// so we're going to return a 2d array, where each entry is the full
@@ -14354,14 +14379,17 @@ function braceExpand (pattern, options) {
1435414379
Minimatch.prototype.parse = parse
1435514380
var SUBPARSE = {}
1435614381
function parse (pattern, isSub) {
14357-
if (pattern.length > 1024 * 64) {
14358-
throw new TypeError('pattern is too long')
14359-
}
14382+
assertValidPattern(pattern)
1436014383

1436114384
var options = this.options
1436214385

1436314386
// shortcuts
14364-
if (!options.noglobstar && pattern === '**') return GLOBSTAR
14387+
if (pattern === '**') {
14388+
if (!options.noglobstar)
14389+
return GLOBSTAR
14390+
else
14391+
pattern = '*'
14392+
}
1436514393
if (pattern === '') return ''
1436614394

1436714395
var re = ''
@@ -14417,10 +14445,12 @@ function parse (pattern, isSub) {
1441714445
}
1441814446

1441914447
switch (c) {
14420-
case '/':
14448+
/* istanbul ignore next */
14449+
case '/': {
1442114450
// completely not allowed, even escaped.
1442214451
// Should already be path-split by now.
1442314452
return false
14453+
}
1442414454

1442514455
case '\\':
1442614456
clearStateChar()
@@ -14539,25 +14569,23 @@ function parse (pattern, isSub) {
1453914569

1454014570
// handle the case where we left a class open.
1454114571
// "[z-a]" is valid, equivalent to "\[z-a\]"
14542-
if (inClass) {
14543-
// split where the last [ was, make sure we don't have
14544-
// an invalid re. if so, re-walk the contents of the
14545-
// would-be class to re-translate any characters that
14546-
// were passed through as-is
14547-
// TODO: It would probably be faster to determine this
14548-
// without a try/catch and a new RegExp, but it's tricky
14549-
// to do safely. For now, this is safe and works.
14550-
var cs = pattern.substring(classStart + 1, i)
14551-
try {
14552-
RegExp('[' + cs + ']')
14553-
} catch (er) {
14554-
// not a valid class!
14555-
var sp = this.parse(cs, SUBPARSE)
14556-
re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
14557-
hasMagic = hasMagic || sp[1]
14558-
inClass = false
14559-
continue
14560-
}
14572+
// split where the last [ was, make sure we don't have
14573+
// an invalid re. if so, re-walk the contents of the
14574+
// would-be class to re-translate any characters that
14575+
// were passed through as-is
14576+
// TODO: It would probably be faster to determine this
14577+
// without a try/catch and a new RegExp, but it's tricky
14578+
// to do safely. For now, this is safe and works.
14579+
var cs = pattern.substring(classStart + 1, i)
14580+
try {
14581+
RegExp('[' + cs + ']')
14582+
} catch (er) {
14583+
// not a valid class!
14584+
var sp = this.parse(cs, SUBPARSE)
14585+
re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
14586+
hasMagic = hasMagic || sp[1]
14587+
inClass = false
14588+
continue
1456114589
}
1456214590

1456314591
// finish up the class.
@@ -14641,9 +14669,7 @@ function parse (pattern, isSub) {
1464114669
// something that could conceivably capture a dot
1464214670
var addPatternStart = false
1464314671
switch (re.charAt(0)) {
14644-
case '.':
14645-
case '[':
14646-
case '(': addPatternStart = true
14672+
case '[': case '.': case '(': addPatternStart = true
1464714673
}
1464814674

1464914675
// Hack to work around lack of negative lookbehind in JS
@@ -14705,7 +14731,7 @@ function parse (pattern, isSub) {
1470514731
var flags = options.nocase ? 'i' : ''
1470614732
try {
1470714733
var regExp = new RegExp('^' + re + '$', flags)
14708-
} catch (er) {
14734+
} catch (er) /* istanbul ignore next - should be impossible */ {
1470914735
// If it was an invalid regular expression, then it can't match
1471014736
// anything. This trick looks for a character after the end of
1471114737
// the string, which is of course impossible, except in multi-line
@@ -14763,7 +14789,7 @@ function makeRe () {
1476314789

1476414790
try {
1476514791
this.regexp = new RegExp(re, flags)
14766-
} catch (ex) {
14792+
} catch (ex) /* istanbul ignore next - should be impossible */ {
1476714793
this.regexp = false
1476814794
}
1476914795
return this.regexp
@@ -14781,8 +14807,8 @@ minimatch.match = function (list, pattern, options) {
1478114807
return list
1478214808
}
1478314809

14784-
Minimatch.prototype.match = match
14785-
function match (f, partial) {
14810+
Minimatch.prototype.match = function match (f, partial) {
14811+
if (typeof partial === 'undefined') partial = this.partial
1478614812
this.debug('match', f, this.pattern)
1478714813
// short-circuit in the case of busted things.
1478814814
// comments, etc.
@@ -14864,6 +14890,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
1486414890

1486514891
// should be impossible.
1486614892
// some invalid regexp stuff in the set.
14893+
/* istanbul ignore if */
1486714894
if (p === false) return false
1486814895

1486914896
if (p === GLOBSTAR) {
@@ -14937,6 +14964,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
1493714964
// no match was found.
1493814965
// However, in partial mode, we can't say this is necessarily over.
1493914966
// If there's more *pattern* left, then
14967+
/* istanbul ignore if */
1494014968
if (partial) {
1494114969
// ran out of file
1494214970
this.debug('\n>>> no match, partial?', file, fr, pattern, pr)
@@ -14950,11 +14978,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
1495014978
// patterns with magic have been turned into regexps.
1495114979
var hit
1495214980
if (typeof p === 'string') {
14953-
if (options.nocase) {
14954-
hit = f.toLowerCase() === p.toLowerCase()
14955-
} else {
14956-
hit = f === p
14957-
}
14981+
hit = f === p
1495814982
this.debug('string match', p, f, hit)
1495914983
} else {
1496014984
hit = f.match(p)
@@ -14985,16 +15009,16 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
1498515009
// this is ok if we're doing the match as part of
1498615010
// a glob fs traversal.
1498715011
return partial
14988-
} else if (pi === pl) {
15012+
} else /* istanbul ignore else */ if (pi === pl) {
1498915013
// ran out of pattern, still have file left.
1499015014
// this is only acceptable if we're on the very last
1499115015
// empty segment of a file with a trailing slash.
1499215016
// a/* should match a/b/
14993-
var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')
14994-
return emptyFileEnd
15017+
return (fi === fl - 1) && (file[fi] === '')
1499515018
}
1499615019

1499715020
// should be unreachable.
15021+
/* istanbul ignore next */
1499815022
throw new Error('wtf?')
1499915023
}
1500015024

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.