Repository navigation
Conversation
Run CI on `v1` like on `master`, and dispatch console compatibility checks to the same-named console branch for commits cut from `v1`.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #2196 +/- ##
==========================================
- Coverage 75.42% 75.13% -0.29%
==========================================
Files 103 104 +1
Lines 28254 29630 +1376
Branches 5177 5479 +302
==========================================
+ Hits 21310 22263 +953
- Misses 5600 5960 +360
- Partials 1344 1407 +63 🚀 New features to boost your workflow:
|
The collective PR runs CI on every push to v1 already.
Pull request analyses are stored against the merge ref, so PRs into v1 had no baseline and compared against master.
Set CMake [`VERSION`](https://cmake.org/cmake/help/latest/prop_tgt/VERSION.html) and [`SOVERSION`](https://cmake.org/cmake/help/latest/prop_tgt/SOVERSION.html) properties. Close: #1428
* ci: include version in the release archive name Fixes: #745 * ci: keep a stable archive name for latest downloads Create a `sentry-native.zip` copy for the GCS `latest/` path so each release replaces the same object. Keep versioned archive names for GitHub and version-specific GCS paths.
BREAKING CHANGE: Linux, macOS, and Windows builds now default to the `native` backend instead of `crashpad`.
The custom capture hook required private SDK types, while screenshot options were still experimental. BREAKING CHANGE: Implement sentry_screenshot_capture(const char *, uint32_t), returning 0 on success.
The factory used a private-style `sentry__`-prefixed name even though custom transports must provide its implementation. Give it a public-style name and document the contract for custom implementations. BREAKING CHANGE: Custom transport implementations must define: ``` sentry_transport_t *sentry_transport_new_default(void) ```
Keep the scope write lock across a batch while allowing the owning thread to use existing scope accessors without relocking. Defer backend scope flushes until the outermost batch completes.
Split the existing global scope into an internal, read-only global scope for SDK/OS metadata and configured defaults, and a mutable isolation scope used by top-level APIs. Move user data, observers, and backend flushing to the isolation scope. Add `sentry_scope_acquire()` and `sentry_scope_release()` for direct isolation scope access. Implement Sentry's three-scope model with global -> isolation -> local scope layering. Retain parent references and merge layers when preparing events, telemetry, and attachments. Local values take precedence over isolation and global defaults. The SDK follows the global mode used by other Sentry SDKs for client applications: all threads share the same process-wide isolation scope. Changes made through top-level APIs or an acquired reference are shared across all threads. See: - https://develop.sentry.dev/sdk/foundations/state-management/scopes/#isolation-scope
Provide exception metadata, registers, and a basic crashing-thread stack for crash identification in native `on_crash`, matching `inproc`. Use the same payload for `before_send` when `on_crash` is unset. - Capture up to 128 fault-context IPs and unwind source in shared memory. Retain the faulting IP when available. - Linux: SDK `libunwind` with signal-safe logging. - macOS: SDK frame-pointer walker, guarded Mach reads, PAC stripping, `__DARWIN_OPAQUE_ARM_THREAD_STATE64` accessors, and `instruction_addr_adjustment=none`. - Android/Linux without `libunwind`: bounded frame-pointer capture via `process_vm_readv`; avoids `libunwindstack`'s C++ allocation. - Windows: MSVC x64 `RtlLookupFunctionEntry`/`RtlVirtualUnwind` walking without DbgHelp; SP progress permits recursive frames. Frame-pointer capture on x86/ARM64 and other x64 builds. - ARM32 frame-pointer fallbacks retain only the faulting IP. The daemon reuses partial captures and enriches existing frames. Preserve exception/register/frame edits and removals, and honor callback rejection.
Skip Windows frame symbol lookup when symbolize_stacktraces is disabled, including crash frames captured before daemon processing.
Add length-prefixed frames and app-to-daemon IPC based on Unix domain stream socket pairs and an anonymous pipe on Windows. Ref: #1834
* perf(native): Sync scope over IPC Instead of flushing the whole scope/event on disk on every scope change, send an initial scope snapshot and then minimal incremental updates to the crash daemon over IPC. Keep the latest complete state in daemon memory for crash reports. Discard interrupted messages and preserve crash callback changes through a final event and attachment snapshot. Close: #1834 * handle SENTRY_CRASH_STATE_CRASHING * signal.h
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 4ce28e7. Configure here.
| : sentry_value_new_null(); | ||
| if (sentry_value_is_null(attachments)) { | ||
| attachments = sentry_value_incref(ipc->scope.attachments); | ||
| } |
There was a problem hiding this comment.
Empty attachments fall back to staged list
High Severity
A crash-time __sentry-attachments write with no items is treated as a missing manifest. sentry__read_attachment_manifest turns an empty list into null, and sentry__process_crash then substitutes ipc->scope.attachments. Attachments cleared in on_crash or via the hint can still be uploaded with the crash.
Reviewed by Cursor Bugbot for commit 4ce28e7. Configure here.
| sentry_value_t filename_val | ||
| = sentry_value_get_by_key(attach_info, "filename"); | ||
| sentry_value_t attachment_type_val | ||
| = sentry_value_get_by_key(attach_info, "attachment_type"); |
There was a problem hiding this comment.
Crash attachments lose type field
Medium Severity
The daemon envelope writers read attachment_type, but crash-time manifests from sentry__write_attachment_manifest store that value as type. After a normal on_crash snapshot, the disk list is preferred over IPC, so attachment_type is empty and types such as view hierarchy are dropped.
Additional Locations (2)
Reviewed by Cursor Bugbot for commit 4ce28e7. Configure here.


Warning
WIP 🚧🔨⏳⛔
Close: #2044
#skip-changelog (WIP)