Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Windows fatal exceptions 0xC0000409 and 0xE06D7363 with [email protected] via SafeQL #81

Open
karlhorky opened this issue Sep 8, 2024 · 3 comments

Comments

@karlhorky
Copy link
Contributor

karlhorky commented Sep 8, 2024

Windows users of [email protected] via SafeQL have reported crashes:

Error code 0xC0000409 (STATUS_STACK_BUFFER_OVERRUN)

Error code 0xC0000409 (aka error code 3221226505) (aka STATUS_STACK_BUFFER_OVERRUN) occurred when linting SQL with errors in it (missing commas and parentheses):

Researching a bit led me to this:

How do you diagnose the exception code 0xc0000409 on Windows? | Stack Overflow

0xc0000409 means STATUS_STACK_BUFFER_OVERRUN.

In other words, something in your program is writing past the current stack frame, corrupting data on the stack. The program has detected this and rather than let it continue, has thrown an exception.

Error code 0xE06D7363

Error code 0xE06D7363 (aka error code 3765269347) occurred when linting Prisma SQL code (code currently unknown):

Research led to this:

C++ Loadlibrary() error 3765269347

The diagnostic is that the DllMain() function inside the DLL died due to an unhandled C++ exception


I am wondering whether this is a general problem or deficiency with how libpg-query is built on Windows, or whether it's an issue with how SafeQL is interacting with libpg-query?

Last libpg-query Windows PRs:

cc @pyramation @aquariuslt @Newbie012

@karlhorky karlhorky changed the title Windows fatal exceptions 0xC0000409 and 0xE06D7363 with SafeQL Windows fatal exceptions 0xC0000409 and 0xE06D7363 with [email protected] via SafeQL Sep 8, 2024
@pyramation
Copy link
Collaborator

Is there a way to reproduce this error in a Github Action? I don't use windows, only use it in CI/CD & Github Actions

@karlhorky
Copy link
Contributor Author

karlhorky commented Sep 25, 2024

I guess that the first issue should also appear on Windows CI on GitHub Actions, using the code provided by @ProchaLu in ts-safeql/safeql#243 and database.ts in his reproduction repo:

import postgres from 'postgres';

const sql = postgres();

export async function getUsers1() {
  // 💥 Missing comma after `users.id` causes libpg-query crash
  return await sql<Users[]>`
    SELECT
      users.id
      users.name
    FROM
      users
  `;
}

Here's an example of running SafeQL in a GitHub Actions workflow for Windows (includes database setup, ESLint + SafeQL setup):

Although, the tricky part may be that on Windows, running eslint . doesn't actually show a crash, it exits with code 127 and no more details:

$ pnpm eslint . --max-warnings 0
(node:11440) ExperimentalWarning: Importing JSON modules is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
$ echo $?
127

In the VS Code ESLint extension, it shows this error code 0xC0000409 / STATUS_STACK_BUFFER_OVERRUN (3221226505).

But since this error will not be surfaced, it's possible that the GitHub Actions workflow for Windows would need to test the exit code to make sure that there is no crash.

@karlhorky
Copy link
Contributor Author

@Newbie012 any clue why (as described above) running eslint . will exit with code 127 (no error message), but the VS Code ESLint extension will report the real error code 0xC0000409 / STATUS_STACK_BUFFER_OVERRUN (3221226505)?

Is this a bug in SafeQL that libpg-query crashes don't cause a SafeQL error message on the ESLint command line interface?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants