fix: concurrent map iteration and map write#565
Conversation
Summary of ChangesHello @fatelei, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request resolves a critical concurrency issue within the JSON schema validation logic. Previously, sharing Go map-based schemas across multiple goroutines could lead to runtime panics due to concurrent map iteration and writes. The fix involves serializing the schema and document to JSON bytes before validation, effectively creating immutable copies for the Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
This pull request effectively resolves a concurrent map access issue by marshaling the map to a JSON byte slice before passing it to the gojsonschema library. This is a solid approach to prevent race conditions. The introduction of the Validate and ValidateBytes helper functions in a new validate.go file is a good addition, centralizing the concurrency-safe validation logic. The new concurrency test is also a great way to ensure the fix works and prevent future regressions. My review includes a couple of suggestions to make this new test even more robust.
|
Can you reproduce this issue in version 0.5.2 ? it should already been fixed after a refactoring at about 3 months ago. |
|
xeipuuv/gojsonschema v1.2.0 has been fixed |
Description
fix #292
because gojsonschema.NewGoLoader(schema), inside will use schema(map/slice) to do iteration, when share schema in mul goroutine will lead concurrent map iteration and map write
Type of Change
Essential Checklist
Testing
Bug Fix (if applicable)
Fixes #123orCloses #123)Additional Information
Please provide any additional context that would help reviewers understand the changes.