Skip to content

Node: StackFrame.module incorrectly parsed from filename #10000

Description

@timfish

The stack frame module property should be a:

Platform-specific module path (e.g. sentry.interfaces.Stacktrace).

Take this example...

If require.main.filename (the app entry point) is /Users/Tim/app/main.js and the filename we're trying to resolve module name for is /Users/Tim/app/some/great/feature.js, I would expect the module to end up being something like some.great.feature, however it ends up as just feature.

If we look at the code for getModuleFromFilename we can see that in the case of the above input, normalizedBase ends up being /Users/Tim/app/some/great/ whereas I think it should probably be /Users/Tim/app/.

let{ root, dir,base: basename, ext }=posix.parse(normalizedFilename);
constbase=(require&&require.main&&require.main.filename&&dir)||global.process.cwd();
constnormalizedBase=`${base}/`;

It looks like this was broken here in #7415, which means it's been broken since around v7.45.0.

Before, base was calculated from the dirname(require.main.filename) rather than the dir of the filename we're trying to resolve:

constbase=normalizePath(`${(require&&require.main&&require.main.filename&&dirname(require.main.filename))||global.process.cwd()}/`,);

This likely happened because the tests for this have were not (and still aren't) sufficient:
https://github.com/getsentry/sentry-javascript/blob/develop/packages/node/test/module.test.ts

Activity

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions