Skip to content

mkdirp thrown "Maximum call stack size exceeded" error when use with builtin fs and memfs #297

@bolasblack

Description

@bolasblack

node version: v10.15.3

Reproduce:

var { Volume } = require('memfs')
var { Union } = require('unionfs')
var mkdirp = require('mkdirp')
var fs = require('fs')

var mfs = Volume.fromJSON({ '/some/path': 'content' })
// throw "file already exists" Error, as expected
mkdirp.sync('/some/path', { fs: mfs })

var ufs1 = new Union().use(mfs).use(fs)
// throw "file already exists" Error, as expected
mkdirp.sync('/some/path', { fs: ufs1 })

var ufs2 = new Union().use(fs).use(mfs)
// throw "Maximum call stack size exceeded" Error, not expected
mkdirp.sync('/some/path', { fs: ufs2 })

/**
 * Error:
{ RangeError: Maximum call stack size exceeded
    at Object.uvException (internal/errors.js:250:21)
    at handleErrorFromBinding (fs.js:112:24)
    at Object.mkdirSync (fs.js:752:3)
    at Union.syncMethod (/Users/c4605/workSpace/pryo/fs-tree/node_modules/unionfs/lib/union.js:308:35)
    at Union.this_1.(anonymous function) [as mkdirSync] (/Users/c4605/workSpace/pryo/fs-tree/node_modules/unionfs/lib/union.js:60:34)
    at sync (/Users/c4605/workSpace/pryo/fs-tree/node_modules/mkdirp/index.js:71:13)
    at sync (/Users/c4605/workSpace/pryo/fs-tree/node_modules/mkdirp/index.js:77:24)
    at sync (/Users/c4605/workSpace/pryo/fs-tree/node_modules/mkdirp/index.js:78:17)
    at sync (/Users/c4605/workSpace/pryo/fs-tree/node_modules/mkdirp/index.js:78:17)
    at sync (/Users/c4605/workSpace/pryo/fs-tree/node_modules/mkdirp/index.js:78:17)
  prev:
   { RangeError: Maximum call stack size exceeded
       at Arguments.slice (<anonymous>)
       at extend (/Users/c4605/workSpace/pryo/fs-tree/node_modules/fast-extend/index.js:11:47)
       at getMkdirOptions (/Users/c4605/workSpace/pryo/fs-tree/node_modules/memfs/lib/volume.js:248:16)
       at Volume.mkdirSync (/Users/c4605/workSpace/pryo/fs-tree/node_modules/memfs/lib/volume.js:1525:20)
       at Union.syncMethod (/Users/c4605/workSpace/pryo/fs-tree/node_modules/unionfs/lib/union.js:308:35)
       at Union.this_1.(anonymous function) [as mkdirSync] (/Users/c4605/workSpace/pryo/fs-tree/node_modules/unionfs/lib/union.js:60:34)
       at sync (/Users/c4605/workSpace/pryo/fs-tree/node_modules/mkdirp/index.js:71:13)
       at sync (/Users/c4605/workSpace/pryo/fs-tree/node_modules/mkdirp/index.js:77:24)
       at sync (/Users/c4605/workSpace/pryo/fs-tree/node_modules/mkdirp/index.js:78:17)
       at sync (/Users/c4605/workSpace/pryo/fs-tree/node_modules/mkdirp/index.js:78:17) prev: null } }
 */

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions