fix: deep-copy literal values so changes do not propagate across calls#359
Open
frankiethekneeman wants to merge 2 commits into
Open
fix: deep-copy literal values so changes do not propagate across calls#359frankiethekneeman wants to merge 2 commits into
frankiethekneeman wants to merge 2 commits into
Conversation
…alls Changes to a returned list or dict should not propagate to subsequent searches using the same expression. These tests are expected to fail until visit_literal returns a deep copy.
visit_literal was returning node['value'] directly — the same object stored in the cached AST. Mutating the returned list or dict would affect all subsequent searches using the same expression. Fixes jmespath#318.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
visit_literalwas returningnode['value']directly — the same object stored in the cached ASTcopy.deepcopy(node['value'])so callers always receive an independent copyTest plan
TestPythonSpecificCasescovering empty list, list with values, nested dict, dict key addition, and dict key overwriteFixes #318.