Skip to content

Hidden StackOverflow issue (resulting in bug + perf) #125

Closed
@stefanpenner

Description

@stefanpenner

resolve.sync of a module with a package.json containing main: '.' will hang for quite some time, (up to 800ms on my machine) and then return return the correct value...

Steps to reproduce:

mkdir -p node_modules/evil/
echo '{"main": "."}' > node_modules/evil/package.json
touch node_modules/evil/index.js
require('resolve').sync('evil') //  => "path/to/node_modules/evil/index.js"  (but very slow)

If the try/catch is removed from https://github.com/substack/node-resolve/blob/master/lib/sync.js#L73 you instead get a fun stack overflow

> require('.').sync('evil')
RangeError: Maximum call stack size exceeded
    at new fs.Stats (fs.js:133:20)
    at Object.fs.statSync (fs.js:907:18)
    at isFile (/Users/spenner/src/substack/node-resolve/lib/sync.js:14:27)
    at loadAsFileSync (/Users/spenner/src/substack/node-resolve/lib/sync.js:45:13)
    at loadAsDirectorySync (/Users/spenner/src/substack/node-resolve/lib/sync.js:68:29)
    at loadAsDirectorySync (/Users/spenner/src/substack/node-resolve/lib/sync.js:70:29)
    at loadAsDirectorySync (/Users/spenner/src/substack/node-resolve/lib/sync.js:70:29)
    at loadAsDirectorySync (/Users/spenner/src/substack/node-resolve/lib/sync.js:70:29)
    at loadAsDirectorySync (/Users/spenner/src/substack/node-resolve/lib/sync.js:70:29)
    at loadAsDirectorySync (/Users/spenner/src/substack/node-resolve/lib/sync.js:70:29)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions