fileserver: map invalid path errors to fs.ErrInvalid, and return 400 … #7017
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
…for any invalid path errors. (close #7008 #7007)
Background
Currently when using the static file server, when injecting a null byte into the request path, the server returns a 500. Edge infrastructure such as nginx, Apache, AWS ELB and Cloudflare treat these types of errors with a 400 Bad Request, which is more indicative of a bad input compared to an application-level 500 response.
This change adds error handling for
fs.PathErrorto themapDirOpenError()function by mapping it tofs.ErrInvalid, and modifies the caller (ServeHTTP()) to explicitly returnhttp.StatusBadRequestforfs.ErrInvaliderrors.Local tests are positive. Unit tests are also passing. Tested on both MacOS and Linux/Ubuntu 24.
Before the change:
After the change: