VYPR
High severityNVD Advisory· Published Feb 20, 2026· Updated Feb 20, 2026

minimatch has a ReDoS via repeated wildcards with non-matching literal in pattern

CVE-2026-26996

Description

minimatch is a minimal matching utility for converting glob expressions into JavaScript RegExp objects. Versions 10.2.0 and below are vulnerable to Regular Expression Denial of Service (ReDoS) when a glob pattern contains many consecutive * wildcards followed by a literal character that doesn't appear in the test string. Each * compiles to a separate [^/]*? regex group, and when the match fails, V8's regex engine backtracks exponentially across all possible splits. The time complexity is O(4^N) where N is the number of * characters. With N=15, a single minimatch() call takes ~2 seconds. With N=34, it hangs effectively forever. Any application that passes user-controlled strings to minimatch() as the pattern argument is vulnerable to DoS. This issue has been fixed in version 10.2.1.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

minimatch versions ≤10.2.0 are vulnerable to ReDoS via patterns with many consecutive * wildcards, causing exponential backtracking and denial of service.

Vulnerability

Overview

minimatch is a JavaScript glob matching utility used internally by npm. Versions 10.2.0 and below are vulnerable to Regular Expression Denial of Service (ReDoS) when a glob pattern contains many consecutive * wildcards followed by a literal character that does not appear in the test string [1][2]. Each * compiles to a separate [^/]*? regex group, and when the match fails, V8's regex engine backtracks exponentially across all possible splits [4]. The time complexity is O(4^N) where N is the number of * characters; with N=15 a single minimatch() call takes ~2 seconds, and with N=34 it hangs effectively forever [2][4].

Exploitation and

Attack Surface

An attacker can trigger the vulnerability by supplying a crafted glob pattern containing many consecutive * wildcards followed by a literal character that does not appear in the target string [4]. No authentication is required if the application exposes glob matching to untrusted input. Any application that passes user-controlled strings to minimatch() as the pattern argument is vulnerable to DoS, including file search/filter UIs, .gitignore-style filtering, build tools accepting glob configuration, and APIs that expose glob matching to untrusted input [4].

Impact

Successful exploitation results in a denial of service condition. A single minimatch() call with a()` call with a malicious pattern can consume excessive CPU time, causing the application to become unresponsive or crash [2][4]. The impact is limited to availability; no data confidentiality or integrity is affected.

Mitigation

The issue has been fixed in minimatch version 10.2.1 [2]. The fix coalesces consecutive non-globstar * characters into a single regex group, eliminating the exponential backtracking [3]. Users should upgrade to version 10.2.1 or later. If upgrading is not immediately possible, applications should avoid passing untrusted input as the pattern argument to minimatch() [1][4].

AI Insight generated on May 19, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
minimatchnpm
>= 10.0.0, < 10.2.110.2.1
minimatchnpm
>= 9.0.0, < 9.0.69.0.6
minimatchnpm
>= 8.0.0, < 8.0.58.0.5
minimatchnpm
>= 7.0.0, < 7.4.77.4.7
minimatchnpm
>= 6.0.0, < 6.2.16.2.1
minimatchnpm
>= 5.0.0, < 5.1.75.1.7
minimatchnpm
>= 4.0.0, < 4.2.44.2.4
minimatchnpm
< 3.1.33.1.3

Affected products

2

Patches

1
2e111f3a79ab

coalesce consecutive non-globstar * characters

https://github.com/isaacs/minimatchisaacsFeb 17, 2026via ghsa
7 files changed · +105 94
  • src/ast.ts+11 5 modified
    @@ -633,13 +633,24 @@ export class AST {
         let escaping = false
         let re = ''
         let uflag = false
    +    // multiple stars that aren't globstars coalesce into one *
    +    let inStar = false
         for (let i = 0; i < glob.length; i++) {
           const c = glob.charAt(i)
           if (escaping) {
             escaping = false
             re += (reSpecials.has(c) ? '\\' : '') + c
             continue
           }
    +      if (c === '*') {
    +        if (inStar) continue
    +        inStar = true
    +        re += noEmpty && /^[*]+$/.test(glob) ? starNoEmpty : star
    +        hasMagic = true
    +        continue
    +      } else {
    +        inStar = false
    +      }
           if (c === '\\') {
             if (i === glob.length - 1) {
               re += '\\\\'
    @@ -658,11 +669,6 @@ export class AST {
               continue
             }
           }
    -      if (c === '*') {
    -        re += noEmpty && glob === '*' ? starNoEmpty : star
    -        hasMagic = true
    -        continue
    -      }
           if (c === '?') {
             re += qmark
             hasMagic = true
    
  • src/index.ts+1 1 modified
    @@ -520,7 +520,7 @@ export class Minimatch {
       // to the right as possible, even if it increases the number
       // of patterns that we have to process.
       preprocess(globParts: string[][]) {
    -    // if we're not in globstar mode, then turn all ** into *
    +    // if we're not in globstar mode, then turn ** into *
         if (this.options.noglobstar) {
           for (let i = 0; i < globParts.length; i++) {
             for (let j = 0; j < globParts[i].length; j++) {
    
  • tap-snapshots/test/basic.js.test.cjs+22 22 modified
    @@ -3440,11 +3440,11 @@ exports[`test/basic.js > TAP > basic tests > makeRe ??? 2`] = `
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe ??**********?****? 1`] = `
    -/^(?!\\.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]$/
    +/^(?!\\.)[^/][^/][^/]*?[^/][^/]*?[^/]$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe ??**********?****c 1`] = `
    -/^(?!\\.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c$/
    +/^(?!\\.)[^/][^/][^/]*?[^/][^/]*?c$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe ?.js 1`] = `
    @@ -3472,27 +3472,27 @@ exports[`test/basic.js > TAP > basic tests > makeRe ?(x-!(y)|z)b 1`] = `
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe ?***?**** 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?$/
    +/^(?!\\.)[^/][^/]*?[^/][^/]*?$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe ?***?****? 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]$/
    +/^(?!\\.)[^/][^/]*?[^/][^/]*?[^/]$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe ?***?****c 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c$/
    +/^(?!\\.)[^/][^/]*?[^/][^/]*?c$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe ?*****?? 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]$/
    +/^(?!\\.)[^/][^/]*?[^/][^/]$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe ?*****?c 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c$/
    +/^(?!\\.)[^/][^/]*?[^/]c$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe ?************c****?**** 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?$/
    +/^(?!\\.)[^/][^/]*?c[^/]*?[^/][^/]*?$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe ?js 1`] = `
    @@ -3864,15 +3864,15 @@ exports[`test/basic.js > TAP > basic tests > makeRe ** 3`] = `
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe *****?? 1`] = `
    -/^(?!\\.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]$/
    +/^(?!\\.)[^/]*?[^/][^/]$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe *******? 1`] = `
    -/^(?!\\.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]$/
    +/^(?!\\.)[^/]*?[^/]$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe *******c 1`] = `
    -/^(?!\\.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c$/
    +/^(?!\\.)[^/]*?c$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe **/.x/** 1`] = `
    @@ -3900,7 +3900,7 @@ exports[`test/basic.js > TAP > basic tests > makeRe *\\\\!* 1`] = `
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe *c*?** 1`] = `
    -/^(?!\\.)[^/]*?c[^/]*?[^/][^/]*?[^/]*?$/
    +/^(?!\\.)[^/]*?c[^/]*?[^/][^/]*?$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe *js 1`] = `
    @@ -4044,43 +4044,43 @@ exports[`test/basic.js > TAP > basic tests > makeRe a*[^c] 1`] = `
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe a**?**cd**?**??***k 1`] = `
    -/^a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k$/
    +/^a[^/]*?[^/][^/]*?cd[^/]*?[^/][^/]*?[^/][^/][^/]*?k$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe a**?**cd**?**??***k** 1`] = `
    -/^a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k[^/]*?[^/]*?$/
    +/^a[^/]*?[^/][^/]*?cd[^/]*?[^/][^/]*?[^/][^/][^/]*?k[^/]*?$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe a**?**cd**?**??k 1`] = `
    -/^a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k$/
    +/^a[^/]*?[^/][^/]*?cd[^/]*?[^/][^/]*?[^/][^/]k$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe a**?**cd**?**??k*** 1`] = `
    -/^a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k[^/]*?[^/]*?[^/]*?$/
    +/^a[^/]*?[^/][^/]*?cd[^/]*?[^/][^/]*?[^/][^/]k[^/]*?$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe a*****?c 1`] = `
    -/^a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c$/
    +/^a[^/]*?[^/]c$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe a********???******* 1`] = `
    -/^a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?$/
    +/^a[^/]*?[^/][^/][^/][^/]*?$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe a*****c*?** 1`] = `
    -/^a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/][^/]*?[^/]*?$/
    +/^a[^/]*?c[^/]*?[^/][^/]*?$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe a****c**?**??***** 1`] = `
    -/^a[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?$/
    +/^a[^/]*?c[^/]*?[^/][^/]*?[^/][^/][^/]*?$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe a***c 1`] = `
    -/^a[^/]*?[^/]*?[^/]*?c$/
    +/^a[^/]*?c$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe a*cd**?**??k 1`] = `
    -/^a[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k$/
    +/^a[^/]*?cd[^/]*?[^/][^/]*?[^/][^/]k$/
     `
     
     exports[`test/basic.js > TAP > basic tests > makeRe a/.*/b 1`] = `
    
  • tap-snapshots/test/escape-has-magic.js.test.cjs+22 22 modified
    @@ -163,7 +163,7 @@ exports[`test/escape-has-magic.js > TAP > ??**********?****? 1`] = `
     Array [
       Array [
         Array [
    -      /^(?!\\.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]$/,
    +      /^(?!\\.)[^/][^/][^/]*?[^/][^/]*?[^/]$/,
         ],
       ],
       true,
    @@ -174,7 +174,7 @@ exports[`test/escape-has-magic.js > TAP > ??**********?****c 1`] = `
     Array [
       Array [
         Array [
    -      /^(?!\\.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c$/,
    +      /^(?!\\.)[^/][^/][^/]*?[^/][^/]*?c$/,
         ],
       ],
       true,
    @@ -251,7 +251,7 @@ exports[`test/escape-has-magic.js > TAP > ?***?**** 1`] = `
     Array [
       Array [
         Array [
    -      /^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?$/,
    +      /^(?!\\.)[^/][^/]*?[^/][^/]*?$/,
         ],
       ],
       true,
    @@ -262,7 +262,7 @@ exports[`test/escape-has-magic.js > TAP > ?***?****? 1`] = `
     Array [
       Array [
         Array [
    -      /^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]$/,
    +      /^(?!\\.)[^/][^/]*?[^/][^/]*?[^/]$/,
         ],
       ],
       true,
    @@ -273,7 +273,7 @@ exports[`test/escape-has-magic.js > TAP > ?***?****c 1`] = `
     Array [
       Array [
         Array [
    -      /^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c$/,
    +      /^(?!\\.)[^/][^/]*?[^/][^/]*?c$/,
         ],
       ],
       true,
    @@ -284,7 +284,7 @@ exports[`test/escape-has-magic.js > TAP > ?*****?? 1`] = `
     Array [
       Array [
         Array [
    -      /^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]$/,
    +      /^(?!\\.)[^/][^/]*?[^/][^/]$/,
         ],
       ],
       true,
    @@ -295,7 +295,7 @@ exports[`test/escape-has-magic.js > TAP > ?*****?c 1`] = `
     Array [
       Array [
         Array [
    -      /^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c$/,
    +      /^(?!\\.)[^/][^/]*?[^/]c$/,
         ],
       ],
       true,
    @@ -306,7 +306,7 @@ exports[`test/escape-has-magic.js > TAP > ?************c****?**** 1`] = `
     Array [
       Array [
         Array [
    -      /^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?$/,
    +      /^(?!\\.)[^/][^/]*?c[^/]*?[^/][^/]*?$/,
         ],
       ],
       true,
    @@ -1388,7 +1388,7 @@ exports[`test/escape-has-magic.js > TAP > *****?? 1`] = `
     Array [
       Array [
         Array [
    -      /^(?!\\.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]$/,
    +      /^(?!\\.)[^/]*?[^/][^/]$/,
         ],
       ],
       true,
    @@ -1399,7 +1399,7 @@ exports[`test/escape-has-magic.js > TAP > *******? 1`] = `
     Array [
       Array [
         Array [
    -      /^(?!\\.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]$/,
    +      /^(?!\\.)[^/]*?[^/]$/,
         ],
       ],
       true,
    @@ -1410,7 +1410,7 @@ exports[`test/escape-has-magic.js > TAP > *******c 1`] = `
     Array [
       Array [
         Array [
    -      /^(?!\\.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c$/,
    +      /^(?!\\.)[^/]*?c$/,
         ],
       ],
       true,
    @@ -1493,7 +1493,7 @@ exports[`test/escape-has-magic.js > TAP > *c*?** 1`] = `
     Array [
       Array [
         Array [
    -      /^(?!\\.)[^/]*?c[^/]*?[^/][^/]*?[^/]*?$/,
    +      /^(?!\\.)[^/]*?c[^/]*?[^/][^/]*?$/,
         ],
       ],
       true,
    @@ -1897,7 +1897,7 @@ exports[`test/escape-has-magic.js > TAP > a**?**cd**?**??***k 1`] = `
     Array [
       Array [
         Array [
    -      /^a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k$/,
    +      /^a[^/]*?[^/][^/]*?cd[^/]*?[^/][^/]*?[^/][^/][^/]*?k$/,
         ],
       ],
       true,
    @@ -1908,7 +1908,7 @@ exports[`test/escape-has-magic.js > TAP > a**?**cd**?**??***k** 1`] = `
     Array [
       Array [
         Array [
    -      /^a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k[^/]*?[^/]*?$/,
    +      /^a[^/]*?[^/][^/]*?cd[^/]*?[^/][^/]*?[^/][^/][^/]*?k[^/]*?$/,
         ],
       ],
       true,
    @@ -1919,7 +1919,7 @@ exports[`test/escape-has-magic.js > TAP > a**?**cd**?**??k 1`] = `
     Array [
       Array [
         Array [
    -      /^a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k$/,
    +      /^a[^/]*?[^/][^/]*?cd[^/]*?[^/][^/]*?[^/][^/]k$/,
         ],
       ],
       true,
    @@ -1930,7 +1930,7 @@ exports[`test/escape-has-magic.js > TAP > a**?**cd**?**??k*** 1`] = `
     Array [
       Array [
         Array [
    -      /^a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k[^/]*?[^/]*?[^/]*?$/,
    +      /^a[^/]*?[^/][^/]*?cd[^/]*?[^/][^/]*?[^/][^/]k[^/]*?$/,
         ],
       ],
       true,
    @@ -1941,7 +1941,7 @@ exports[`test/escape-has-magic.js > TAP > a*****?c 1`] = `
     Array [
       Array [
         Array [
    -      /^a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c$/,
    +      /^a[^/]*?[^/]c$/,
         ],
       ],
       true,
    @@ -1952,7 +1952,7 @@ exports[`test/escape-has-magic.js > TAP > a********???******* 1`] = `
     Array [
       Array [
         Array [
    -      /^a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?$/,
    +      /^a[^/]*?[^/][^/][^/][^/]*?$/,
         ],
       ],
       true,
    @@ -1963,7 +1963,7 @@ exports[`test/escape-has-magic.js > TAP > a*****c*?** 1`] = `
     Array [
       Array [
         Array [
    -      /^a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/][^/]*?[^/]*?$/,
    +      /^a[^/]*?c[^/]*?[^/][^/]*?$/,
         ],
       ],
       true,
    @@ -1974,7 +1974,7 @@ exports[`test/escape-has-magic.js > TAP > a****c**?**??***** 1`] = `
     Array [
       Array [
         Array [
    -      /^a[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?$/,
    +      /^a[^/]*?c[^/]*?[^/][^/]*?[^/][^/][^/]*?$/,
         ],
       ],
       true,
    @@ -1985,7 +1985,7 @@ exports[`test/escape-has-magic.js > TAP > a***c 1`] = `
     Array [
       Array [
         Array [
    -      /^a[^/]*?[^/]*?[^/]*?c$/,
    +      /^a[^/]*?c$/,
         ],
       ],
       true,
    @@ -1996,7 +1996,7 @@ exports[`test/escape-has-magic.js > TAP > a*cd**?**??k 1`] = `
     Array [
       Array [
         Array [
    -      /^a[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k$/,
    +      /^a[^/]*?cd[^/]*?[^/][^/]*?[^/][^/]k$/,
         ],
       ],
       true,
    
  • tap-snapshots/test/optimization-level-0.ts.test.cjs+22 22 modified
    @@ -3440,11 +3440,11 @@ exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe ??? 2`] = `
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe ??**********?****? 1`] = `
    -/^(?!\\.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]$/
    +/^(?!\\.)[^/][^/][^/]*?[^/][^/]*?[^/]$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe ??**********?****c 1`] = `
    -/^(?!\\.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c$/
    +/^(?!\\.)[^/][^/][^/]*?[^/][^/]*?c$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe ?.js 1`] = `
    @@ -3472,27 +3472,27 @@ exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe ?(x-!(y)|z)b
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe ?***?**** 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?$/
    +/^(?!\\.)[^/][^/]*?[^/][^/]*?$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe ?***?****? 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]$/
    +/^(?!\\.)[^/][^/]*?[^/][^/]*?[^/]$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe ?***?****c 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c$/
    +/^(?!\\.)[^/][^/]*?[^/][^/]*?c$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe ?*****?? 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]$/
    +/^(?!\\.)[^/][^/]*?[^/][^/]$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe ?*****?c 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c$/
    +/^(?!\\.)[^/][^/]*?[^/]c$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe ?************c****?**** 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?$/
    +/^(?!\\.)[^/][^/]*?c[^/]*?[^/][^/]*?$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe ?js 1`] = `
    @@ -3864,15 +3864,15 @@ exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe ** 3`] = `
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe *****?? 1`] = `
    -/^(?!\\.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]$/
    +/^(?!\\.)[^/]*?[^/][^/]$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe *******? 1`] = `
    -/^(?!\\.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]$/
    +/^(?!\\.)[^/]*?[^/]$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe *******c 1`] = `
    -/^(?!\\.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c$/
    +/^(?!\\.)[^/]*?c$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe **/.x/** 1`] = `
    @@ -3900,7 +3900,7 @@ exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe *\\\\!* 1`] =
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe *c*?** 1`] = `
    -/^(?!\\.)[^/]*?c[^/]*?[^/][^/]*?[^/]*?$/
    +/^(?!\\.)[^/]*?c[^/]*?[^/][^/]*?$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe *js 1`] = `
    @@ -4044,43 +4044,43 @@ exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe a*[^c] 1`] =
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe a**?**cd**?**??***k 1`] = `
    -/^a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k$/
    +/^a[^/]*?[^/][^/]*?cd[^/]*?[^/][^/]*?[^/][^/][^/]*?k$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe a**?**cd**?**??***k** 1`] = `
    -/^a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k[^/]*?[^/]*?$/
    +/^a[^/]*?[^/][^/]*?cd[^/]*?[^/][^/]*?[^/][^/][^/]*?k[^/]*?$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe a**?**cd**?**??k 1`] = `
    -/^a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k$/
    +/^a[^/]*?[^/][^/]*?cd[^/]*?[^/][^/]*?[^/][^/]k$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe a**?**cd**?**??k*** 1`] = `
    -/^a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k[^/]*?[^/]*?[^/]*?$/
    +/^a[^/]*?[^/][^/]*?cd[^/]*?[^/][^/]*?[^/][^/]k[^/]*?$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe a*****?c 1`] = `
    -/^a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c$/
    +/^a[^/]*?[^/]c$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe a********???******* 1`] = `
    -/^a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?$/
    +/^a[^/]*?[^/][^/][^/][^/]*?$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe a*****c*?** 1`] = `
    -/^a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/][^/]*?[^/]*?$/
    +/^a[^/]*?c[^/]*?[^/][^/]*?$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe a****c**?**??***** 1`] = `
    -/^a[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?$/
    +/^a[^/]*?c[^/]*?[^/][^/]*?[^/][^/][^/]*?$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe a***c 1`] = `
    -/^a[^/]*?[^/]*?[^/]*?c$/
    +/^a[^/]*?c$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe a*cd**?**??k 1`] = `
    -/^a[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k$/
    +/^a[^/]*?cd[^/]*?[^/][^/]*?[^/][^/]k$/
     `
     
     exports[`test/optimization-level-0.ts > TAP > basic tests > makeRe a/.*/b 1`] = `
    
  • tap-snapshots/test/optimization-level-2.ts.test.cjs+22 22 modified
    @@ -3440,11 +3440,11 @@ exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe ??? 2`] = `
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe ??**********?****? 1`] = `
    -/^(?!\\.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]$/
    +/^(?!\\.)[^/][^/][^/]*?[^/][^/]*?[^/]$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe ??**********?****c 1`] = `
    -/^(?!\\.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c$/
    +/^(?!\\.)[^/][^/][^/]*?[^/][^/]*?c$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe ?.js 1`] = `
    @@ -3472,27 +3472,27 @@ exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe ?(x-!(y)|z)b
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe ?***?**** 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?$/
    +/^(?!\\.)[^/][^/]*?[^/][^/]*?$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe ?***?****? 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]$/
    +/^(?!\\.)[^/][^/]*?[^/][^/]*?[^/]$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe ?***?****c 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c$/
    +/^(?!\\.)[^/][^/]*?[^/][^/]*?c$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe ?*****?? 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]$/
    +/^(?!\\.)[^/][^/]*?[^/][^/]$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe ?*****?c 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c$/
    +/^(?!\\.)[^/][^/]*?[^/]c$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe ?************c****?**** 1`] = `
    -/^(?!\\.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?$/
    +/^(?!\\.)[^/][^/]*?c[^/]*?[^/][^/]*?$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe ?js 1`] = `
    @@ -3864,15 +3864,15 @@ exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe ** 3`] = `
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe *****?? 1`] = `
    -/^(?!\\.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]$/
    +/^(?!\\.)[^/]*?[^/][^/]$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe *******? 1`] = `
    -/^(?!\\.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]$/
    +/^(?!\\.)[^/]*?[^/]$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe *******c 1`] = `
    -/^(?!\\.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c$/
    +/^(?!\\.)[^/]*?c$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe **/.x/** 1`] = `
    @@ -3900,7 +3900,7 @@ exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe *\\\\!* 1`] =
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe *c*?** 1`] = `
    -/^(?!\\.)[^/]*?c[^/]*?[^/][^/]*?[^/]*?$/
    +/^(?!\\.)[^/]*?c[^/]*?[^/][^/]*?$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe *js 1`] = `
    @@ -4044,43 +4044,43 @@ exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe a*[^c] 1`] =
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe a**?**cd**?**??***k 1`] = `
    -/^a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k$/
    +/^a[^/]*?[^/][^/]*?cd[^/]*?[^/][^/]*?[^/][^/][^/]*?k$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe a**?**cd**?**??***k** 1`] = `
    -/^a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k[^/]*?[^/]*?$/
    +/^a[^/]*?[^/][^/]*?cd[^/]*?[^/][^/]*?[^/][^/][^/]*?k[^/]*?$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe a**?**cd**?**??k 1`] = `
    -/^a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k$/
    +/^a[^/]*?[^/][^/]*?cd[^/]*?[^/][^/]*?[^/][^/]k$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe a**?**cd**?**??k*** 1`] = `
    -/^a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k[^/]*?[^/]*?[^/]*?$/
    +/^a[^/]*?[^/][^/]*?cd[^/]*?[^/][^/]*?[^/][^/]k[^/]*?$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe a*****?c 1`] = `
    -/^a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c$/
    +/^a[^/]*?[^/]c$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe a********???******* 1`] = `
    -/^a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?$/
    +/^a[^/]*?[^/][^/][^/][^/]*?$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe a*****c*?** 1`] = `
    -/^a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/][^/]*?[^/]*?$/
    +/^a[^/]*?c[^/]*?[^/][^/]*?$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe a****c**?**??***** 1`] = `
    -/^a[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?$/
    +/^a[^/]*?c[^/]*?[^/][^/]*?[^/][^/][^/]*?$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe a***c 1`] = `
    -/^a[^/]*?[^/]*?[^/]*?c$/
    +/^a[^/]*?c$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe a*cd**?**??k 1`] = `
    -/^a[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k$/
    +/^a[^/]*?cd[^/]*?[^/][^/]*?[^/][^/]k$/
     `
     
     exports[`test/optimization-level-2.ts > TAP > basic tests > makeRe a/.*/b 1`] = `
    
  • test/the-sky-is-full-of-stars-at-least-100.ts+5 0 added
    @@ -0,0 +1,5 @@
    +import t from 'tap'
    +import { Minimatch } from '../src/index.js'
    +const me = 'a/*/b'
    +const sky = 'a/' + '*'.repeat(100) + '/b'
    +t.strictSame(new Minimatch(sky).set, new Minimatch(me).set)
    

Vulnerability mechanics

Generated on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

4

News mentions

0

No linked articles in our index yet.