chore: SDK Truncation Logic by JoshuaMoelans · Pull Request #1347 · getsentry/sentry-native
Fixes #1342
Truncation occurrences
MAX_ENVELOPE_ITEMS
See definition https://github.com/getsentry/sentry-native/blob/master/src/sentry_envelope.h#L13
This is only used in envelope_add_item (here) which can only trigger for attachments (since the other APIs calling add_item all capture the envelope after adding the first item), so if a user sets more than 9 attachments we would lose the 10th onward.
The Envelopes docs mention that we accept as most 100 sessions per envelope, which is presumably where this MAX_ENVELOPE_ITEMS originated from. The question now is whether this also applies to other envelope items (like attachments/events/...)?
-> we should only have the limit for sessions, not attachments (or other envelope items). we should check whether we can actually construct envelopes with multiple sessions, and if so, still limit this to 100 (not 10). Remove 'truncating'(dropping) envelope items for any other type of telemetry. ( ✅ updated session test )
Out-of-Scope
Stack Traces
It was decided that Stack Trace Truncation was out of scope for this first round of SDK truncation logic updates (TODO: link new Linear ticket for this topic)
🔍 sentry_unwind_stack(..., max_frames)
Code here. Need to investigate if this is something we should be truncating still, or if Relay can handle this.
🔍 inproc MAX_FRAMES
Code here and used for unwinding the stack here
Keep non-truncated
✅ sentry_set_tag
Correctly gets truncated to 200 characters in Relay (count including ...)

Keep truncation
Span Tags
We keep truncation because
span tags are a legacy concept so we're not touching it ~ingest
The following was observed with this snippet:
Code Snippet
```c sentry_transaction_context_t *tx_ctx = sentry_transaction_context_new("my_tx", "op"); sentry_transaction_t *tx = sentry_transaction_start(tx_ctx, sentry_value_new_null()); sentry_span_t *span = sentry_transaction_start_child(tx, "span_op", "span_desc"); char *tag = "supermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagname"; char *tag_val = "supermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagnamesupermegalongtagname"; sentry_set_tag(tag, tag_val); sentry_span_set_tag(span, tag, tag_val); sentry_span_finish(span); sentry_transaction_finish(tx); sentry_value_t event = sentry_value_new_message_event( SENTRY_LEVEL_INFO, "my-logger", "Hello World!"); ```❓ sentry_span_set_tag
(from a prior discussion, TBD if this is still true)
We keep SDK-side truncation as span tags are soon to be deprecated (replaced by span attributes, which have way larger length limits (or possibly have no limited)).
‼️ todo: check if this PR addresses the missing truncation: getsentry/relay@d181bbb
(UPDATE 2025-11-13) -> we see correct truncation on transactions, but not on spans yet
code here and mention of truncation for sentry_span_set_tag here
removed in a9712b2 but seems like this is not truncated during ingestion... docs mention that tags must be less than 200 characters

Product doesn't seem to like these large values for searchability
