Node: Windows fs symlink TypeError on Buffer target value

Created on 26 Jul 2020  路  5Comments  路  Source: nodejs/node

  • Version: 14.5.0+
  • Platform: Windows 10 x64
  • Subsystem: fs

What steps will reproduce the bug?

On Windows:

const fs = require('fs');
fs.symlinkSync(Buffer.from('target'), 'link');

How often does it reproduce? Is there a required condition?

Always happens on Windows since 14.5.0, it may be necessary to enable symlink support on Windows (I'm not 100% sure how that all works). Does not happen on Linux or macOS.

What is the expected behavior?

No error, and the symlink should be created. Buffer is listed as a valid target type.

What do you see instead?

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received an instance of Buffer

internal/validators.js:121
    throw new ERR_INVALID_ARG_TYPE(name, 'string', value);
    ^

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received an instance of Buffer
    at validateString (internal/validators.js:121:11)
    at Object.isAbsolute (path.js:353:5)
    at preprocessSymlinkDestination (internal/fs/utils.js:345:18)
    at Object.symlinkSync (fs.js:1118:19)
    at Object.<anonymous> (C:\Users\travis\build\AlexanderOMara\issue-node-symlink-buffer-windows\main.js:5:4)
    at Module._compile (internal/modules/cjs/loader.js:1236:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1257:10)
    at Module.load (internal/modules/cjs/loader.js:1085:32)
    at Function.Module._load (internal/modules/cjs/loader.js:950:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12) {
  code: 'ERR_INVALID_ARG_TYPE'
}

Additional information

I created a test repo which is tested via Travis CI.

On a side-note, the path argument can be a Buffer, it's just the target argument with the issue.

confirmed-bug fs windows

All 5 comments

What do you see instead?

Could you share the full stack trace?

Sure! Added the stack trace from Travis.

@nodejs/fs

My guess is that this is the commit that created the issue, since path.isAbsolute (and also path.toNamespacedPath) expect a string:

https://github.com/nodejs/node/commit/a4e273baf43910ba9e5c66949e56b919f8614fb9

There might also be a similar issue right above it if type is junction, depending on how path.resolve handles things that are not strings.

It also affected v12.18.3, please release the patch to v12 too. Thx.

Was this page helpful?
0 / 5 - 0 ratings