Repository navigation
fix(api): prevent recursive attribute value crashes - #5757
codedbyadiiii wants to merge 4 commits into
Conversation
Assisted-by: ChatGPT
Pull request dashboard statusWaiting on the author · refreshed 2026-10-18 13:28 UTC Respond to 1 review item (e.g. link a commit, explain why not, ask a follow-up):
Status above doesn't look right?
|
f2cf9b9 to
6e7be84
Compare
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?
|
Hi @codedbyadiiii — just a friendly reminder that this pull request is waiting on you. The dashboard status comment has the open items and is kept current.
|
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?