Node: win32 path.normalize() not correctly normalizing relative paths containing ../ that advance above root

Created on 1 Jan 2018  ·  7Comments  ·  Source: nodejs/node

  • Version: 9.3.0
  • Platform: Windows 10 64bit
  • Subsystem: path

edit: See below comment for correct replication code

const path = require( 'path' );
const n = path.normalize( '../dir1/../../dir2' );
console.log( n );

Should output ../../dir2 but outputs dir2.

After some investigation it appears to have been introduced via commit b98e8d995efb426bbdee56ce503017bdcbbc6332 (path: fix normalize on directories with two dots)

confirmed-bug path

All 7 comments

cc/ @nodejs/platform-windows @targos

Can't reproduce on macOS, so assuming this is Windows specific.

Cant' reproduce on Windows either:

> path.normalize('../dir1/../../dir2')
'..\\..\\dir2'

This is strange, let me take another look to see what's happening

OK - my example was bad. Sorry about that, try this:

path.normalize( '../../../dir1/../../../dir2' );

Should output ../../../../../dir2 but outputs ../dir2

Okay, can reproduce that with v6.12.0 but not v6.11.5 (on macOS), which suggests https://github.com/nodejs/node/commit/b98e8d995efb426bbdee56ce503017bdcbbc6332 is indeed the cause of the issue.

▶▶▶ nvm i v6.11.5                                                                                                                                                 ~/wrk/com/DANGER/node (v8.9.4-proposal)
v6.11.5 is already installed.
Now using node v6.11.5 (npm v3.10.10)
▶▶▶ node -p "path.normalize( '../../../dir1/../../../dir2' );"                                                                                                 ~/wrk/com/DANGER/node 2s (v8.9.4-proposal)
../../../../../dir2
▶▶▶ nvm use 6.12.0                                                                                                                                                ~/wrk/com/DANGER/node (v8.9.4-proposal)
Now using node v6.12.0 (npm v3.10.10)
▶▶▶ node -p "path.normalize( '../../../dir1/../../../dir2' );"                                                                                                 ~/wrk/com/DANGER/node 1s (v8.9.4-proposal)
../dir2

Cool, i would have submitted a PR myself but i was unsure of the correct behaviour that b98e8d9 was supposed to fix. Thanks for looking at this 👍

Was this page helpful?
0 / 5 - 0 ratings

Related issues

srl295 picture srl295  ·  3Comments

Icemic picture Icemic  ·  3Comments

danielstaleiny picture danielstaleiny  ·  3Comments

addaleax picture addaleax  ·  3Comments

filipesilvaa picture filipesilvaa  ·  3Comments