-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
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
🩹 Fix: handle un-matched open brackets in the query params #3121
Conversation
Thanks for opening this pull request! 🎉 Please check out our contributing guidelines. If you need help or want to chat with us, join us on Discord https://gofiber.io/discord |
WalkthroughThe changes made to the Changes
Assessment against linked issues
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Outside diff range, codebase verification and nitpick comments (1)
ctx.go (1)
Line range hint
1309-1338
: Improve error handling and messages inparseParamSquareBrackets
.The function correctly implements the logic to handle unmatched brackets by using a counter. However, the error messages could be more descriptive. Consider including more context or the problematic part of the input in the error message to aid in debugging.
Additionally, ensure that all edge cases, such as strings ending with an unmatched bracket or strings with nested brackets, are handled correctly.
Consider enhancing the error messages with the following changes:
- return "", errors.New("unmatched brackets") + return "", fmt.Errorf("unmatched brackets in input: %s", k)This change provides more context in the error message, making it easier to identify where the problem occurs in the input.
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (2)
- ctx.go (2 hunks)
- ctx_test.go (2 hunks)
Additional comments not posted (2)
ctx_test.go (2)
4511-4513
: Check for unmatched brackets in query parameters.The test case at lines 4511-4513 correctly checks for unmatched brackets in the query string, which is a good practice to ensure the robustness of the query parsing logic. This helps in preventing potential errors during runtime due to malformed query parameters.
4797-4799
: Check for unmatched brackets in query parameters.The test case at lines 4797-4799 correctly checks for unmatched brackets in the query string, which is a good practice to ensure the robustness of the query parsing logic. This helps in preventing potential errors during runtime due to malformed query parameters.
c.Request().URI().SetQueryString("id=1&name[=tom") | ||
q = new(Query) | ||
utils.AssertEqual(t, "unmatched brackets", c.QueryParser(q).Error()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Duplicate test for unmatched brackets in query parameters.
The test cases at lines 4511-4513 and 4797-4799 are duplicates, testing the same functionality of checking for unmatched brackets in query parameters. Consider consolidating these tests or ensuring they cover different scenarios to avoid redundancy in the test suite.
Also applies to: 4797-4799
we should have the same logic in the main branch for version 3, can you also make a pull request there |
Sure @ReneWerner87, will create a PR for v3. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Outside diff range, codebase verification and nitpick comments (1)
ctx.go (1)
Line range hint
1309-1338
: Review the logic for handling unmatched brackets inparseParamSquareBrackets
.The function
parseParamSquareBrackets
has been updated to handle unmatched brackets more robustly by introducing a counter for open brackets. Here are a few observations and suggestions:
Bracket Counting Logic: The use of
openBracketsCount
to track the number of unmatched open brackets is a good approach. It increments the count when an open bracket[
is found and decrements it when a close bracket]
is found. This helps in identifying unmatched brackets effectively.Error Handling: The function returns an error if
openBracketsCount
is negative (more closing than opening brackets) or if it's positive after processing all characters (more opening than closing brackets). This is crucial for preventing the processing of malformed queries that could lead to errors downstream.Improvement Suggestion: While the current implementation covers the basic cases of unmatched brackets, it might be beneficial to include more detailed error messages that could help in debugging. For example, indicating the position of the unmatched bracket could enhance the error's usefulness.
Performance Consideration: The function iterates over each character in the input string, which is efficient given the need to check each character for brackets. However, if performance becomes a concern, especially with very long strings, consider benchmarks to evaluate if optimizations are necessary.
Overall, the changes enhance the robustness of query parameter parsing by preventing errors related to unmatched brackets. It's a valuable update given the potential impact of such errors on application stability.
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (2)
- ctx.go (2 hunks)
- ctx_test.go (2 hunks)
Files skipped from review as they are similar to previous changes (1)
- ctx_test.go
Congrats on merging your first pull request! 🎉 We here at Fiber are proud of you! If you need help or want to chat with us, join us on Discord https://gofiber.io/discord |
Description
Add logic to keep count of open brackets. If there's a mismatch between the number of open and close brackets, then return error.
Fixes #3120
Type of change
Please delete options that are not relevant.
Checklist
Before you submit your pull request, please make sure you meet these requirements:
/docs/
directory for Fiber's documentation.Commit formatting
Please use emojis in commit messages for an easy way to identify the purpose or intention of a commit. Check out the emoji cheatsheet here: CONTRIBUTING.md