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

Add error handling for nil RouteContext in URLFormat #841

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

Taaipi
Copy link

@Taaipi Taaipi commented Aug 10, 2023

Fix #839
Ref #718

In the current URLFormat middleware implementation, when rctx (Route Context) is nil, it could lead to unexpected behavior or panic errors in subsequent processing.

To avoid this, I have prioritized not allowing unexpected behavior by implementing error handling for the cases where rctx is missing or nil. Now, instead of failing silently or causing a panic error, the system will return a proper HTTP error response.

This change ensures that the system behaves consistently and avoids potential pitfalls that might arise from missing or improperly initialized rctx.


r.Use(func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
newCtx := context.WithValue(r.Context(), chi.RouteCtxKey, nil)
Copy link
Contributor

@VojtechVitek VojtechVitek Sep 18, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @Taaipi,

Thanks for the PR!

It looks like this test cases injects a nil RouteContext down the chain intentionally.

Do you have an example how could this happen in real-world use case? I wonder how is the middleware.URLFormat ever called without chi route context unless we set it to nil explicitly.

Thanks!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess based on #718, it'd be better to create a test case with some sub-routers (instead of setting nil). Right?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you using middleware.URLFormat outside of chi router?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@VojtechVitek
Thank you for the review.

Are you using middleware.URLFormat outside of chi router?

Yes, this issue could arise if middleware.URLFormat is used outside of the chi router or if RouteContext is explicitly set to nil (though I haven’t fully grasped the intent behind such a scenario based on issue #839). However, since encountering such a problem is conceivable, even though it remains an edge case, I’ve added error handling to catch and address it early.

For now, I will omit the case where nil is intentionally assigned. Instead, I’m considering adding a test case for error handling when the router is not used. What do you think?

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.

Panic if rctx is nil
2 participants