Skip to content

fix: handle ENOTDIR in FileDataAccessor.getStats to prevent 500 on duplicate slug - #1

Draft
timgent wants to merge 2 commits into
mainfrom
claude/fix-integration-test-vcBvx
Draft

fix: handle ENOTDIR in FileDataAccessor.getStats to prevent 500 on duplicate slug#1
timgent wants to merge 2 commits into
mainfrom
claude/fix-integration-test-vcBvx

Conversation

@timgent

@timgent timgent commented Apr 18, 2026

Copy link
Copy Markdown
Owner

When a file already exists at a given path, stat()-ing that path with a
trailing slash (e.g. test.json/) causes the OS to return ENOTDIR instead
of ENOENT. This error was not caught by getStats, causing it to propagate
as a raw OS error and result in a 500 InternalServerError on the second
POST with the same Slug header to a file-system-backed server.

Treating ENOTDIR the same as ENOENT (i.e. converting it to
NotFoundHttpError) means hasResource correctly returns false for the
container-style path check, allowing createSafeUri to fall back to a
UUID-based name for the duplicate upload.

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com

timgent and others added 2 commits April 17, 2026 22:37
…plicate slug

When a file already exists at a given path, stat()-ing that path with a
trailing slash (e.g. test.json/) causes the OS to return ENOTDIR instead
of ENOENT. This error was not caught by getStats, causing it to propagate
as a raw OS error and result in a 500 InternalServerError on the second
POST with the same Slug header to a file-system-backed server.

Treating ENOTDIR the same as ENOENT (i.e. converting it to
NotFoundHttpError) means hasResource correctly returns false for the
container-style path check, allowing createSafeUri to fall back to a
UUID-based name for the duplicate upload.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…-backend

Verify that a second POST with the same Slug to a file-system-backed
container returns 201 with a UUID-based location rather than crashing
with a 500 InternalServerError (ENOTDIR).

Also adds /.data to .gitignore and eslint.config.mjs ignores to prevent
the local server data directory from being linted during development.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@timgent
timgent marked this pull request as draft April 18, 2026 17:16
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

Successfully merging this pull request may close these issues.

1 participant