Skip to content

[v18.x] Wrong path returned by fs.readdir withFileTypes=true #52441

Description

@H4ad

Version

18.20.1

Platform

Linux h4ad 6.5.0-27-generic #28~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Mar 15 10:51:06 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

Subsystem

fs/promise

What steps will reproduce the bug?

You can reproduce the issue by running the following commands:

$ mkdir fs-issue
$ cd fs-issue
$ touch issue.txt
$ node -e "require('fs/promises').readdir('.', { withFileTypes: true, encoding: 'utf-8', }).then(console.log)" 

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

Always

What is the expected behavior? Why is that the expected behavior?

The path should be ..

[
  Dirent {
    name: 'issue.txt',
    parentPath: '.',
    path: '.',
    [Symbol(type)]: 1
  }
]

What do you see instead?

The path is different:

[
  Dirent {
    name: 'issue.txt',
    parentPath: '.',
    path: 'issue.txt',
    [Symbol(type)]: 1
  }
]

This issue only happens on fs/promises, on readdirSync, we don't see this issue:

$ node --print "require('fs').readdirSync('.', { withFileTypes: true, encoding: 'utf-8', })"
[
  Dirent {
    name: 'issue.txt',
    parentPath: '.',
    path: '.',
    [Symbol(type)]: 1
  }
]

Also, if we include recursive, we don't see the issue:

$ node -e "require('fs/promises').readdir('.', { recursive:true, withFileTypes: true, encoding: 'utf-8', }).then(console.log)"
[
  Dirent {
    name: 'issue.txt',
    parentPath: '.',
    path: '.',
    [Symbol(type)]: 1
  }
]

Additional information

This bug was first introduced at 18.20.0, on 18.19.1 the behavior is correct.
On latest version of node, 21.7.2 and 20.12.1, we don't see this issue.

This bug was found by @wraithgar at npm/cli#7352 (comment)

Activity

  1. H4ad commented on Apr 9, 2024

    @H4ad
    MemberAuthor

    The issue was probably introduced by this change introduced by #51021:

    class DirentFromStats extends Dirent {
    constructor(name, stats, path, filepath) {
    super(name, null, path, filepath);
    this[kStats] = stats;
    }
    }

    The main PR #50976 didn't include these changes.

  2. added
    confirmed-bugIssues and PRs for confirmed bugs.
    fsIssues and PRs related to file-system APIs and the fs module.
    on Apr 10, 2024
  3. richardlau commented on Apr 10, 2024

    @richardlau
    Member
  4. changed the title [-]Wrong path returned by fs.readdir withFileTypes=true[/-] [+][v18.x] Wrong path returned by fs.readdir withFileTypes=true[/+] on Apr 12, 2024
  5. lcgani commented on May 20, 2024

    @lcgani

    hi guys, what's the status of this issue? I can look into it if it wasn't assigned to anyone yet

  6. H4ad commented on May 22, 2024

    @H4ad
    MemberAuthor

    @gm-al Basically waiting for a PR, feel free to work on it if you want :) You can ping me when you had something to review

  7. jakecastelli commented on Jun 11, 2024

    @jakecastelli
    Member

    Just had a quick scan, looks like the current main does not have path property any more? was that intentional? (it was still there in v20.x, v22.x and I couldn't see it mentioned in the changelog or docs

  8. sonsurim commented on Jul 16, 2024

    @sonsurim
    Contributor

    Hello! May I try to resolve this issue?

  9. dario-piotrowicz commented on Jan 25, 2025

    @dario-piotrowicz
    Member

    The dirent.path field has been deprecated in #51020 and removed in #55548 (like @jakecastelli mentioned above)

    Precisely for reasons like the one presented here I assume

    So this issue is no longer applicable and should be closed

    cc. @aduh95

  10. H4ad commented on Jan 29, 2025

    @H4ad
    MemberAuthor

    @dario-piotrowicz Thanks for the reminder, closing since this is no longer applicable.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    confirmed-bugIssues and PRs for confirmed bugs.fsIssues and PRs related to file-system APIs and the fs module.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions