Repository navigation
fix(api): prevent recursive attribute value crashes - #5757
Open
codedbyadiiii wants to merge 4 commits into
Open
codedbyadiiii wants to merge 4 commits into
codedbyadiiii wants to merge 4 commits into
Conversation
Assisted-by: ChatGPT
Pull request dashboard statusWaiting on the author · refreshed 2026-10-17 03:52 UTC Respond to 1 review item (e.g. link a commit, explain why not, ask a follow-up):
Status above doesn't look right?
|
codedbyadiiii
force-pushed
the
fix-issue-5564
branch
from
October 8, 2026 18:13
f2cf9b9 to
6e7be84
Compare
chrikrah
approved these changes
Oct 11, 2026
chrikrah
left a comment
There was a problem hiding this comment.
@codedbyadiiii approving at 6e7be84. This fixes #5564: a self-referential value and a 21-deep list now come out as None with a warning, and the sibling attribute survives. Seven of the new tests fail with the two source files from the base.
$ python -m pytest opentelemetry-api/tests/attributes opentelemetry-sdk/tests/test_attribute_nesting_depth.py opentelemetry-sdk/tests/{trace,metrics,resources} -q -o addopts="" # Python 3.12
# head 6e7be84
1 failed, 717 passed, 1 skipped
# head tests, attributes/__init__.py and measurement.py from base f36c128
8 failed, 710 passed, 1 skipped
# the 1 on both trees is TestTracer::test_shutdown, the same TypeError in its subprocess step
non-blocking: the warning names no attribute. A span with two offending attributes logs the same line twice:
$ python depth_probe.py # set_attribute("http.request.body.nested", 21-deep list), set_attributes({"cyclic.payload": cyc, "sibling": "kept"})
LOG opentelemetry.attributes: Attribute value exceeds the maximum nesting depth of 20. Replacing value with None.
LOG opentelemetry.attributes: Attribute value exceeds the maximum nesting depth of 20. Replacing value with None.
SDK attrs: {'http.request.body.nested': None, 'ok20': 'tuple', 'cyclic.payload': None, 'sibling': 'kept'} dropped: 0
_clean_attributes and __setitem__ both hold the key at that point.
@DylanRussell you approved #5565 for the same issue after suggesting the cap of 20. Could you review this one?
lzchen
approved these changes
Oct 12, 2026
This branch has not been deployed
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.
Description
Attribute values containing self-referential or excessively nested sequences and mappings could raise
RecursionErrorduring attribute cleaning.This change limits recursive attribute processing to 20 levels. Values exceeding the limit are replaced with
Noneand a warning is logged, while valid sibling attributes are preserved.The fix also applies to metric attributes and adds regression tests for API attributes, spans, and resources.
Fixes #5564
Type of change
How Has This Been Tested?