Skip to content

feat(library-config)!: make libdd-library-config no_std compatible#1770

Open
pawelchcki wants to merge 54 commits intomainfrom
pawel/no-std-library-config
Open

feat(library-config)!: make libdd-library-config no_std compatible#1770
pawelchcki wants to merge 54 commits intomainfrom
pawel/no-std-library-config

Conversation

@pawelchcki
Copy link
Copy Markdown
Contributor

@pawelchcki pawelchcki commented Mar 20, 2026

What does this PR do?

Make libdd-library-config and libdd-library-config-ffi usable in no_std environments.

Motivation

Enable library config parsing in contexts without a full std runtime (e.g. injected into processes).

Key changes

  • Replace serde_yaml with yaml_serde (no_std-compatible), HashMap with BTreeMap
  • Add no_std_entry feature for standalone staticlib builds (allocator, panic handler)
  • Add ddog_library_configurator_get_from_bytes FFI function (works in both std and no_std)
  • Propagate std feature to workspace consumers of libdd-common-ffi

Uses a fork of yaml_serde pending upstream no_std support: yaml/yaml-serde#7

How to test

cargo check -p libdd-library-config --no-default-features
cargo check -p libdd-library-config-ffi --no-default-features
cargo check -p libdd-library-config-ffi --all-features
cargo check --workspace

…fig-ffi no_std compatible

Add no_std support to both crates with std enabled by default. Core
types and the matching engine compile under no_std+alloc, while
file I/O, YAML parsing, and FFI bindings are gated behind the std
feature flag.
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 20, 2026

📚 Documentation Check Results

⚠️ 11950 documentation warning(s) found

📦 datadog-ffe-ffi - 356 warning(s)

📦 datadog-live-debugger-ffi - 1434 warning(s)

📦 datadog-sidecar-ffi - 2699 warning(s)

📦 datadog-sidecar - 2441 warning(s)

📦 libdd-common-ffi - 273 warning(s)

📦 libdd-common - 164 warning(s)

📦 libdd-crashtracker-ffi - 1226 warning(s)

📦 libdd-data-pipeline-ffi - 1046 warning(s)

📦 libdd-ddsketch-ffi - 283 warning(s)

📦 libdd-library-config-ffi - 457 warning(s)

📦 libdd-library-config - 149 warning(s)

📦 libdd-profiling-ffi - 767 warning(s)

📦 libdd-telemetry-ffi - 655 warning(s)


Updated: 2026-05-05 21:05:06 UTC | Commit: 6f25a89 | missing-docs job results

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 20, 2026

Clippy Allow Annotation Report

Comparing clippy allow annotations between branches:

  • Base Branch: origin/main
  • PR Branch: origin/pawel/no-std-library-config

Summary by Rule

Rule Base Branch PR Branch Change
expect_used 3 3 No change (0%)
panic 6 6 No change (0%)
unwrap_used 4 4 No change (0%)
Total 13 13 No change (0%)

Annotation Counts by File

File Base Branch PR Branch Change
libdd-common-ffi/src/cstr.rs 1 1 No change (0%)
libdd-common-ffi/src/endpoint.rs 2 2 No change (0%)
libdd-common-ffi/src/option.rs 1 1 No change (0%)
libdd-common-ffi/src/result.rs 3 3 No change (0%)
libdd-common-ffi/src/slice.rs 2 2 No change (0%)
libdd-common-ffi/src/slice_mut.rs 1 1 No change (0%)
libdd-common-ffi/src/string.rs 2 2 No change (0%)
libdd-common/src/cstr.rs 1 1 No change (0%)

Annotation Stats by Crate

Crate Base Branch PR Branch Change
clippy-annotation-reporter 5 5 No change (0%)
datadog-ffe-ffi 1 1 No change (0%)
datadog-ipc 21 21 No change (0%)
datadog-live-debugger 6 6 No change (0%)
datadog-live-debugger-ffi 10 10 No change (0%)
datadog-profiling-replayer 4 4 No change (0%)
datadog-remote-config 3 3 No change (0%)
datadog-sidecar 57 57 No change (0%)
libdd-common 10 10 No change (0%)
libdd-common-ffi 12 12 No change (0%)
libdd-data-pipeline 5 5 No change (0%)
libdd-ddsketch 2 2 No change (0%)
libdd-dogstatsd-client 1 1 No change (0%)
libdd-profiling 13 13 No change (0%)
libdd-telemetry 20 20 No change (0%)
libdd-tinybytes 4 4 No change (0%)
libdd-trace-normalization 2 2 No change (0%)
libdd-trace-obfuscation 8 8 No change (0%)
libdd-trace-stats 1 1 No change (0%)
libdd-trace-utils 15 15 No change (0%)
Total 200 200 No change (0%)

About This Report

This report tracks Clippy allow annotations for specific rules, showing how they've changed in this PR. Decreasing the number of these annotations generally improves code quality.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 20, 2026

🔒 Cargo Deny Results

⚠️ 61 issue(s) found, showing only errors (advisories, bans, sources)

📦 datadog-ffe-ffi - 4 error(s)

Show output
error[unsound]: Rand is unsound with a custom logger using `rand::rng()`
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:150:1
    │
150 │ rand 0.8.5 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ unsound advisory detected
    │
    ├ ID: RUSTSEC-2026-0097
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0097
    ├ It has been reported (by @lopopolo) that the `rand` library is [unsound](https://rust-lang.github.io/unsafe-code-guidelines/glossary.html#soundness-of-code--of-a-library) (i.e. that safe code using the public API can cause Undefined Behaviour) when all the following conditions are met:
      
      - The `log` and `thread_rng` features are enabled
      - A [custom logger](https://docs.rs/log/latest/log/#implementing-a-logger) is defined
      - The custom logger accesses `rand::rng()` (previously `rand::thread_rng()`) and calls any `TryRng` (previously `RngCore`) methods on `ThreadRng`
      - The `ThreadRng` (attempts to) reseed while called from the custom logger (this happens every 64 kB of generated data)
      - Trace-level logging is enabled or warn-level logging is enabled and the random source (the `getrandom` crate) is unable to provide a new seed
      
      `TryRng` (previously `RngCore`) methods for `ThreadRng` use `unsafe` code to cast `*mut BlockRng<ReseedingCore>` to `&mut BlockRng<ReseedingCore>`. When all the above conditions are met this results in an aliased mutable reference, violating the Stacked Borrows rules. Miri is able to detect this violation in sample code. Since construction of [aliased mutable references is Undefined Behaviour](https://doc.rust-lang.org/stable/nomicon/references.html), the behaviour of optimized builds is hard to predict.
    ├ Announcement: https://github.com/rust-random/rand/pull/1763
    ├ Solution: Upgrade to >=0.10.1 OR <0.10.0, >=0.9.3 OR <0.9.0, >=0.8.6 (try `cargo update -p rand`)
    ├ rand v0.8.5
      └── (dev) libdd-common v4.0.0
          └── libdd-common-ffi v32.0.0
              └── datadog-ffe-ffi v1.0.2

error[vulnerability]: Name constraints for URI names were incorrectly accepted
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:168:1
    │
168 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0098
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0098
    ├ Name constraints for URI names were ignored and therefore accepted.
      
      Note this library does not provide an API for asserting URI names, and URI name constraints are otherwise not implemented.  URI name constraints are now rejected unconditionally.
      
      Since name constraints are restrictions on otherwise properly-issued certificates, this bug is reachable only after signature verification and requires misissuance to exploit.
      
      This vulnerability is identified as [GHSA-965h-392x-2mh5](https://github.com/rustls/webpki/security/advisories/GHSA-965h-392x-2mh5). Thank you to @1seal for the report.
    ├ Solution: Upgrade to >=0.103.12, <0.104.0-alpha.1 OR >=0.104.0-alpha.6 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.0.0
          │       └── libdd-common-ffi v32.0.0
          │           └── datadog-ffe-ffi v1.0.2
          ├── libdd-common v4.0.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.0.0 (*)

error[vulnerability]: Name constraints were accepted for certificates asserting a wildcard name
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:168:1
    │
168 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0099
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0099
    ├ Permitted subtree name constraints for DNS names were accepted for certificates asserting a wildcard name.
      
      This was incorrect because, given a name constraint of `accept.example.com`, `*.example.com` could feasibly allow a name of `reject.example.com` which is outside the constraint.
      This is very similar to [CVE-2025-61727](https://go.dev/issue/76442).
      
      Since name constraints are restrictions on otherwise properly-issued certificates, this bug is reachable only after signature verification and requires misissuance to exploit.
      
      This vulnerability is identified as [GHSA-xgp8-3hg3-c2mh](https://github.com/rustls/webpki/security/advisories/GHSA-xgp8-3hg3-c2mh). Thank you to @1seal for the report.
    ├ Solution: Upgrade to >=0.103.12, <0.104.0-alpha.1 OR >=0.104.0-alpha.6 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.0.0
          │       └── libdd-common-ffi v32.0.0
          │           └── datadog-ffe-ffi v1.0.2
          ├── libdd-common v4.0.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.0.0 (*)

error[vulnerability]: Reachable panic in certificate revocation list parsing
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:168:1
    │
168 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0104
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0104
    ├ A panic was reachable when parsing certificate revocation lists via [`BorrowedCertRevocationList::from_der`]
      or [`OwnedCertRevocationList::from_der`].  This was the result of mishandling a syntactically valid empty
      `BIT STRING` appearing in the `onlySomeReasons` element of a `IssuingDistributionPoint` CRL extension.
      
      This panic is reachable prior to a CRL's signature being verified.
      
      Applications that do not use CRLs are not affected.
      
      Thank you to @tynus3 for the report.
    ├ Solution: Upgrade to >=0.103.13, <0.104.0-alpha.1 OR >=0.104.0-alpha.7 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.0.0
          │       └── libdd-common-ffi v32.0.0
          │           └── datadog-ffe-ffi v1.0.2
          ├── libdd-common v4.0.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.0.0 (*)

advisories FAILED, bans ok, sources ok

📦 datadog-live-debugger-ffi - 5 error(s)

Show output
error[unsound]: Rand is unsound with a custom logger using `rand::rng()`
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:219:1
    │
219 │ rand 0.8.5 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ unsound advisory detected
    │
    ├ ID: RUSTSEC-2026-0097
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0097
    ├ It has been reported (by @lopopolo) that the `rand` library is [unsound](https://rust-lang.github.io/unsafe-code-guidelines/glossary.html#soundness-of-code--of-a-library) (i.e. that safe code using the public API can cause Undefined Behaviour) when all the following conditions are met:
      
      - The `log` and `thread_rng` features are enabled
      - A [custom logger](https://docs.rs/log/latest/log/#implementing-a-logger) is defined
      - The custom logger accesses `rand::rng()` (previously `rand::thread_rng()`) and calls any `TryRng` (previously `RngCore`) methods on `ThreadRng`
      - The `ThreadRng` (attempts to) reseed while called from the custom logger (this happens every 64 kB of generated data)
      - Trace-level logging is enabled or warn-level logging is enabled and the random source (the `getrandom` crate) is unable to provide a new seed
      
      `TryRng` (previously `RngCore`) methods for `ThreadRng` use `unsafe` code to cast `*mut BlockRng<ReseedingCore>` to `&mut BlockRng<ReseedingCore>`. When all the above conditions are met this results in an aliased mutable reference, violating the Stacked Borrows rules. Miri is able to detect this violation in sample code. Since construction of [aliased mutable references is Undefined Behaviour](https://doc.rust-lang.org/stable/nomicon/references.html), the behaviour of optimized builds is hard to predict.
    ├ Announcement: https://github.com/rust-random/rand/pull/1763
    ├ Solution: Upgrade to >=0.10.1 OR <0.10.0, >=0.9.3 OR <0.9.0, >=0.8.6 (try `cargo update -p rand`)
    ├ rand v0.8.5
      ├── libdd-common v4.0.0
      │   ├── datadog-live-debugger v0.0.1
      │   │   └── datadog-live-debugger-ffi v0.0.1
      │   ├── datadog-live-debugger-ffi v0.0.1 (*)
      │   ├── libdd-capabilities-impl v1.0.0
      │   │   ├── libdd-data-pipeline v3.0.1
      │   │   │   └── datadog-live-debugger v0.0.1 (*)
      │   │   ├── libdd-trace-stats v2.0.0
      │   │   │   └── libdd-data-pipeline v3.0.1 (*)
      │   │   └── libdd-trace-utils v3.0.1
      │   │       ├── libdd-data-pipeline v3.0.1 (*)
      │   │       ├── libdd-trace-stats v2.0.0 (*)
      │   │       └── (dev) libdd-trace-utils v3.0.1 (*)
      │   ├── libdd-common-ffi v32.0.0
      │   │   └── datadog-live-debugger-ffi v0.0.1 (*)
      │   ├── libdd-data-pipeline v3.0.1 (*)
      │   ├── libdd-dogstatsd-client v2.0.0
      │   │   └── libdd-data-pipeline v3.0.1 (*)
      │   ├── libdd-shared-runtime v0.1.0
      │   │   ├── (dev) libdd-data-pipeline v3.0.1 (*)
      │   │   ├── libdd-telemetry v4.0.0
      │   │   │   └── libdd-data-pipeline v3.0.1 (*)
      │   │   └── libdd-trace-stats v2.0.0 (*)
      │   ├── libdd-telemetry v4.0.0 (*)
      │   ├── libdd-trace-stats v2.0.0 (*)
      │   └── libdd-trace-utils v3.0.1 (*)
      ├── (dev) libdd-data-pipeline v3.0.1 (*)
      ├── (dev) libdd-trace-normalization v2.0.0
      │   └── libdd-trace-utils v3.0.1 (*)
      ├── (dev) libdd-trace-stats v2.0.0 (*)
      ├── libdd-trace-utils v3.0.1 (*)
      └── proptest v1.5.0
          └── (dev) libdd-tinybytes v1.1.0
              ├── libdd-data-pipeline v3.0.1 (*)
              ├── (dev) libdd-tinybytes v1.1.0 (*)
              └── libdd-trace-utils v3.0.1 (*)

error[vulnerability]: Name constraints for URI names were incorrectly accepted
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:241:1
    │
241 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0098
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0098
    ├ Name constraints for URI names were ignored and therefore accepted.
      
      Note this library does not provide an API for asserting URI names, and URI name constraints are otherwise not implemented.  URI name constraints are now rejected unconditionally.
      
      Since name constraints are restrictions on otherwise properly-issued certificates, this bug is reachable only after signature verification and requires misissuance to exploit.
      
      This vulnerability is identified as [GHSA-965h-392x-2mh5](https://github.com/rustls/webpki/security/advisories/GHSA-965h-392x-2mh5). Thank you to @1seal for the report.
    ├ Solution: Upgrade to >=0.103.12, <0.104.0-alpha.1 OR >=0.104.0-alpha.6 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.0.0
          │       ├── datadog-live-debugger v0.0.1
          │       │   └── datadog-live-debugger-ffi v0.0.1
          │       ├── datadog-live-debugger-ffi v0.0.1 (*)
          │       ├── libdd-capabilities-impl v1.0.0
          │       │   ├── libdd-data-pipeline v3.0.1
          │       │   │   └── datadog-live-debugger v0.0.1 (*)
          │       │   ├── libdd-trace-stats v2.0.0
          │       │   │   └── libdd-data-pipeline v3.0.1 (*)
          │       │   └── libdd-trace-utils v3.0.1
          │       │       ├── libdd-data-pipeline v3.0.1 (*)
          │       │       ├── libdd-trace-stats v2.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v3.0.1 (*)
          │       ├── libdd-common-ffi v32.0.0
          │       │   └── datadog-live-debugger-ffi v0.0.1 (*)
          │       ├── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-dogstatsd-client v2.0.0
          │       │   └── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-shared-runtime v0.1.0
          │       │   ├── (dev) libdd-data-pipeline v3.0.1 (*)
          │       │   ├── libdd-telemetry v4.0.0
          │       │   │   └── libdd-data-pipeline v3.0.1 (*)
          │       │   └── libdd-trace-stats v2.0.0 (*)
          │       ├── libdd-telemetry v4.0.0 (*)
          │       ├── libdd-trace-stats v2.0.0 (*)
          │       └── libdd-trace-utils v3.0.1 (*)
          ├── libdd-common v4.0.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.0.0 (*)

error[vulnerability]: Name constraints were accepted for certificates asserting a wildcard name
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:241:1
    │
241 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0099
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0099
    ├ Permitted subtree name constraints for DNS names were accepted for certificates asserting a wildcard name.
      
      This was incorrect because, given a name constraint of `accept.example.com`, `*.example.com` could feasibly allow a name of `reject.example.com` which is outside the constraint.
      This is very similar to [CVE-2025-61727](https://go.dev/issue/76442).
      
      Since name constraints are restrictions on otherwise properly-issued certificates, this bug is reachable only after signature verification and requires misissuance to exploit.
      
      This vulnerability is identified as [GHSA-xgp8-3hg3-c2mh](https://github.com/rustls/webpki/security/advisories/GHSA-xgp8-3hg3-c2mh). Thank you to @1seal for the report.
    ├ Solution: Upgrade to >=0.103.12, <0.104.0-alpha.1 OR >=0.104.0-alpha.6 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.0.0
          │       ├── datadog-live-debugger v0.0.1
          │       │   └── datadog-live-debugger-ffi v0.0.1
          │       ├── datadog-live-debugger-ffi v0.0.1 (*)
          │       ├── libdd-capabilities-impl v1.0.0
          │       │   ├── libdd-data-pipeline v3.0.1
          │       │   │   └── datadog-live-debugger v0.0.1 (*)
          │       │   ├── libdd-trace-stats v2.0.0
          │       │   │   └── libdd-data-pipeline v3.0.1 (*)
          │       │   └── libdd-trace-utils v3.0.1
          │       │       ├── libdd-data-pipeline v3.0.1 (*)
          │       │       ├── libdd-trace-stats v2.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v3.0.1 (*)
          │       ├── libdd-common-ffi v32.0.0
          │       │   └── datadog-live-debugger-ffi v0.0.1 (*)
          │       ├── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-dogstatsd-client v2.0.0
          │       │   └── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-shared-runtime v0.1.0
          │       │   ├── (dev) libdd-data-pipeline v3.0.1 (*)
          │       │   ├── libdd-telemetry v4.0.0
          │       │   │   └── libdd-data-pipeline v3.0.1 (*)
          │       │   └── libdd-trace-stats v2.0.0 (*)
          │       ├── libdd-telemetry v4.0.0 (*)
          │       ├── libdd-trace-stats v2.0.0 (*)
          │       └── libdd-trace-utils v3.0.1 (*)
          ├── libdd-common v4.0.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.0.0 (*)

error[vulnerability]: Reachable panic in certificate revocation list parsing
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:241:1
    │
241 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0104
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0104
    ├ A panic was reachable when parsing certificate revocation lists via [`BorrowedCertRevocationList::from_der`]
      or [`OwnedCertRevocationList::from_der`].  This was the result of mishandling a syntactically valid empty
      `BIT STRING` appearing in the `onlySomeReasons` element of a `IssuingDistributionPoint` CRL extension.
      
      This panic is reachable prior to a CRL's signature being verified.
      
      Applications that do not use CRLs are not affected.
      
      Thank you to @tynus3 for the report.
    ├ Solution: Upgrade to >=0.103.13, <0.104.0-alpha.1 OR >=0.104.0-alpha.7 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.0.0
          │       ├── datadog-live-debugger v0.0.1
          │       │   └── datadog-live-debugger-ffi v0.0.1
          │       ├── datadog-live-debugger-ffi v0.0.1 (*)
          │       ├── libdd-capabilities-impl v1.0.0
          │       │   ├── libdd-data-pipeline v3.0.1
          │       │   │   └── datadog-live-debugger v0.0.1 (*)
          │       │   ├── libdd-trace-stats v2.0.0
          │       │   │   └── libdd-data-pipeline v3.0.1 (*)
          │       │   └── libdd-trace-utils v3.0.1
          │       │       ├── libdd-data-pipeline v3.0.1 (*)
          │       │       ├── libdd-trace-stats v2.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v3.0.1 (*)
          │       ├── libdd-common-ffi v32.0.0
          │       │   └── datadog-live-debugger-ffi v0.0.1 (*)
          │       ├── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-dogstatsd-client v2.0.0
          │       │   └── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-shared-runtime v0.1.0
          │       │   ├── (dev) libdd-data-pipeline v3.0.1 (*)
          │       │   ├── libdd-telemetry v4.0.0
          │       │   │   └── libdd-data-pipeline v3.0.1 (*)
          │       │   └── libdd-trace-stats v2.0.0 (*)
          │       ├── libdd-telemetry v4.0.0 (*)
          │       ├── libdd-trace-stats v2.0.0 (*)
          │       └── libdd-trace-utils v3.0.1 (*)
          ├── libdd-common v4.0.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.0.0 (*)

error[vulnerability]: Denial of Service via Stack Exhaustion
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:282:1
    │
282 │ time 0.3.41 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0009
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0009
    ├ ## Impact
      
      When user-provided input is provided to any type that parses with the RFC 2822 format, a denial of
      service attack via stack exhaustion is possible. The attack relies on formally deprecated and
      rarely-used features that are part of the RFC 2822 format used in a malicious manner. Ordinary,
      non-malicious input will never encounter this scenario.
      
      ## Patches
      
      A limit to the depth of recursion was added in v0.3.47. From this version, an error will be returned
      rather than exhausting the stack.
      
      ## Workarounds
      
      Limiting the length of user input is the simplest way to avoid stack exhaustion, as the amount of
      the stack consumed would be at most a factor of the length of the input.
    ├ Announcement: https://github.com/time-rs/time/blob/main/CHANGELOG.md#0347-2026-02-05
    ├ Solution: Upgrade to >=0.3.47 (try `cargo update -p time`)
    ├ time v0.3.41
      └── tracing-appender v0.2.3
          └── libdd-log v1.0.0
              └── (dev) libdd-data-pipeline v3.0.1
                  └── datadog-live-debugger v0.0.1
                      └── datadog-live-debugger-ffi v0.0.1

advisories FAILED, bans ok, sources ok

📦 datadog-sidecar-ffi - 7 error(s)

Show output
error[unmaintained]: Bincode is unmaintained
   ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:37:1
   │
37 │ bincode 1.3.3 registry+https://github.com/rust-lang/crates.io-index
   │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ unmaintained advisory detected
   │
   ├ ID: RUSTSEC-2025-0141
   ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2025-0141
   ├ Due to a doxxing and harassment incident, the bincode team has taken the decision to cease development permanently.
     
     The team considers version 1.3.3 a complete version of bincode that is not in need of any updates.
     
     ## Alternatives to consider
     
     * [wincode](https://crates.io/crates/wincode)
     * [postcard](https://crates.io/crates/postcard)
     * [bitcode](https://crates.io/crates/bitcode)
     * [rkyv](https://crates.io/crates/rkyv)
   ├ Announcement: https://git.sr.ht/~stygianentity/bincode/tree/v3.0/item/README.md
   ├ Solution: No safe upgrade is available!
   ├ bincode v1.3.3
     ├── datadog-ipc v0.1.0
     │   ├── datadog-sidecar v0.0.1
     │   │   └── datadog-sidecar-ffi v0.0.1
     │   └── datadog-sidecar-ffi v0.0.1 (*)
     └── datadog-sidecar v0.0.1 (*)

error[unmaintained]: paste - no longer maintained
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:256:1
    │
256 │ paste 1.0.15 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ unmaintained advisory detected
    │
    ├ ID: RUSTSEC-2024-0436
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2024-0436
    ├ The creator of the crate `paste` has stated in the [`README.md`](https://github.com/dtolnay/paste/blob/master/README.md) 
      that this project is not longer maintained as well as archived the repository
      
      ## Possible Alternative(s)
      
      - [`pastey`]: a fork of paste and is aimed to be a drop-in replacement with additional features for paste crate
      - [`with_builtin_macros`]: crate providing a [superset of `paste`'s functionality including general `macro_rules!` eager expansions](https://docs.rs/with_builtin_macros/0.1.0/with_builtin_macros/macro.with_eager_expansions.html)  and `concat!`/`concat_idents!` macros
      
      [`pastey`]: https://crates.io/crates/pastey
      [`with_builtin_macros`]: https://crates.io/crates/with_builtin_macros
    ├ Announcement: https://github.com/dtolnay/paste
    ├ Solution: No safe upgrade is available!
    ├ paste v1.0.15
      ├── datadog-sidecar-ffi v0.0.1
      ├── libdd-libunwind-sys v1.0.2
      │   └── libdd-crashtracker v1.0.0
      │       ├── datadog-sidecar v0.0.1
      │       │   └── datadog-sidecar-ffi v0.0.1 (*)
      │       └── libdd-crashtracker-ffi v32.0.0
      │           ├── datadog-sidecar v0.0.1 (*)
      │           └── datadog-sidecar-ffi v0.0.1 (*)
      ├── libdd-telemetry-ffi v32.0.0
      │   └── datadog-sidecar-ffi v0.0.1 (*)
      └── rmp v0.8.14
          ├── libdd-trace-utils v3.0.1
          │   ├── (dev) datadog-sidecar v0.0.1 (*)
          │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │   ├── libdd-data-pipeline v3.0.1
          │   │   ├── datadog-live-debugger v0.0.1
          │   │   │   ├── datadog-remote-config v0.0.1
          │   │   │   │   ├── (dev) datadog-remote-config v0.0.1 (*)
          │   │   │   │   ├── (dev) datadog-sidecar v0.0.1 (*)
          │   │   │   │   └── datadog-sidecar-ffi v0.0.1 (*)
          │   │   │   ├── datadog-sidecar v0.0.1 (*)
          │   │   │   └── datadog-sidecar-ffi v0.0.1 (*)
          │   │   └── datadog-sidecar v0.0.1 (*)
          │   ├── libdd-trace-stats v2.0.0
          │   │   ├── datadog-ipc v0.1.0
          │   │   │   ├── datadog-sidecar v0.0.1 (*)
          │   │   │   └── datadog-sidecar-ffi v0.0.1 (*)
          │   │   ├── datadog-sidecar v0.0.1 (*)
          │   │   └── libdd-data-pipeline v3.0.1 (*)
          │   └── (dev) libdd-trace-utils v3.0.1 (*)
          ├── rmp-serde v1.3.0
          │   ├── datadog-sidecar v0.0.1 (*)
          │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │   ├── libdd-data-pipeline v3.0.1 (*)
          │   ├── (dev) libdd-tinybytes v1.1.0
          │   │   ├── datadog-ipc v0.1.0 (*)
          │   │   ├── datadog-sidecar v0.0.1 (*)
          │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │   │   ├── libdd-data-pipeline v3.0.1 (*)
          │   │   ├── (dev) libdd-tinybytes v1.1.0 (*)
          │   │   └── libdd-trace-utils v3.0.1 (*)
          │   ├── libdd-trace-stats v2.0.0 (*)
          │   └── libdd-trace-utils v3.0.1 (*)
          └── rmpv v1.3.0
              └── libdd-trace-utils v3.0.1 (*)

error[unsound]: Rand is unsound with a custom logger using `rand::rng()`
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:285:1
    │
285 │ rand 0.8.5 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ unsound advisory detected
    │
    ├ ID: RUSTSEC-2026-0097
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0097
    ├ It has been reported (by @lopopolo) that the `rand` library is [unsound](https://rust-lang.github.io/unsafe-code-guidelines/glossary.html#soundness-of-code--of-a-library) (i.e. that safe code using the public API can cause Undefined Behaviour) when all the following conditions are met:
      
      - The `log` and `thread_rng` features are enabled
      - A [custom logger](https://docs.rs/log/latest/log/#implementing-a-logger) is defined
      - The custom logger accesses `rand::rng()` (previously `rand::thread_rng()`) and calls any `TryRng` (previously `RngCore`) methods on `ThreadRng`
      - The `ThreadRng` (attempts to) reseed while called from the custom logger (this happens every 64 kB of generated data)
      - Trace-level logging is enabled or warn-level logging is enabled and the random source (the `getrandom` crate) is unable to provide a new seed
      
      `TryRng` (previously `RngCore`) methods for `ThreadRng` use `unsafe` code to cast `*mut BlockRng<ReseedingCore>` to `&mut BlockRng<ReseedingCore>`. When all the above conditions are met this results in an aliased mutable reference, violating the Stacked Borrows rules. Miri is able to detect this violation in sample code. Since construction of [aliased mutable references is Undefined Behaviour](https://doc.rust-lang.org/stable/nomicon/references.html), the behaviour of optimized builds is hard to predict.
    ├ Announcement: https://github.com/rust-random/rand/pull/1763
    ├ Solution: Upgrade to >=0.10.1 OR <0.10.0, >=0.9.3 OR <0.9.0, >=0.8.6 (try `cargo update -p rand`)
    ├ rand v0.8.5
      ├── datadog-sidecar v0.0.1
      │   └── datadog-sidecar-ffi v0.0.1
      ├── libdd-common v4.0.0
      │   ├── datadog-ipc v0.1.0
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   └── datadog-sidecar-ffi v0.0.1 (*)
      │   ├── datadog-live-debugger v0.0.1
      │   │   ├── datadog-remote-config v0.0.1
      │   │   │   ├── (dev) datadog-remote-config v0.0.1 (*)
      │   │   │   ├── (dev) datadog-sidecar v0.0.1 (*)
      │   │   │   └── datadog-sidecar-ffi v0.0.1 (*)
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   └── datadog-sidecar-ffi v0.0.1 (*)
      │   ├── datadog-remote-config v0.0.1 (*)
      │   ├── datadog-sidecar v0.0.1 (*)
      │   ├── datadog-sidecar-ffi v0.0.1 (*)
      │   ├── libdd-capabilities-impl v1.0.0
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   ├── libdd-data-pipeline v3.0.1
      │   │   │   ├── datadog-live-debugger v0.0.1 (*)
      │   │   │   └── datadog-sidecar v0.0.1 (*)
      │   │   ├── libdd-trace-stats v2.0.0
      │   │   │   ├── datadog-ipc v0.1.0 (*)
      │   │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   │   └── libdd-data-pipeline v3.0.1 (*)
      │   │   └── libdd-trace-utils v3.0.1
      │   │       ├── (dev) datadog-sidecar v0.0.1 (*)
      │   │       ├── datadog-sidecar-ffi v0.0.1 (*)
      │   │       ├── libdd-data-pipeline v3.0.1 (*)
      │   │       ├── libdd-trace-stats v2.0.0 (*)
      │   │       └── (dev) libdd-trace-utils v3.0.1 (*)
      │   ├── libdd-common-ffi v32.0.0
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
      │   │   ├── libdd-crashtracker-ffi v32.0.0
      │   │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   │   └── datadog-sidecar-ffi v0.0.1 (*)
      │   │   └── libdd-telemetry-ffi v32.0.0
      │   │       └── datadog-sidecar-ffi v0.0.1 (*)
      │   ├── (build) libdd-crashtracker v1.0.0
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   └── libdd-crashtracker-ffi v32.0.0 (*)
      │   ├── libdd-crashtracker-ffi v32.0.0 (*)
      │   ├── libdd-data-pipeline v3.0.1 (*)
      │   ├── libdd-dogstatsd-client v2.0.0
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
      │   │   └── libdd-data-pipeline v3.0.1 (*)
      │   ├── libdd-shared-runtime v0.1.0
      │   │   ├── (dev) libdd-data-pipeline v3.0.1 (*)
      │   │   ├── libdd-telemetry v4.0.0
      │   │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
      │   │   │   ├── libdd-crashtracker v1.0.0 (*)
      │   │   │   ├── libdd-data-pipeline v3.0.1 (*)
      │   │   │   └── libdd-telemetry-ffi v32.0.0 (*)
      │   │   └── libdd-trace-stats v2.0.0 (*)
      │   ├── libdd-telemetry v4.0.0 (*)
      │   ├── libdd-telemetry-ffi v32.0.0 (*)
      │   ├── libdd-trace-stats v2.0.0 (*)
      │   └── libdd-trace-utils v3.0.1 (*)
      ├── libdd-crashtracker v1.0.0 (*)
      ├── (dev) libdd-data-pipeline v3.0.1 (*)
      ├── (dev) libdd-trace-normalization v2.0.0
      │   └── libdd-trace-utils v3.0.1 (*)
      ├── (dev) libdd-trace-stats v2.0.0 (*)
      ├── libdd-trace-utils v3.0.1 (*)
      └── proptest v1.5.0
          └── (dev) libdd-tinybytes v1.1.0
              ├── datadog-ipc v0.1.0 (*)
              ├── datadog-sidecar v0.0.1 (*)
              ├── datadog-sidecar-ffi v0.0.1 (*)
              ├── libdd-data-pipeline v3.0.1 (*)
              ├── (dev) libdd-tinybytes v1.1.0 (*)
              └── libdd-trace-utils v3.0.1 (*)

error[vulnerability]: Name constraints for URI names were incorrectly accepted
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:311:1
    │
311 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0098
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0098
    ├ Name constraints for URI names were ignored and therefore accepted.
      
      Note this library does not provide an API for asserting URI names, and URI name constraints are otherwise not implemented.  URI name constraints are now rejected unconditionally.
      
      Since name constraints are restrictions on otherwise properly-issued certificates, this bug is reachable only after signature verification and requires misissuance to exploit.
      
      This vulnerability is identified as [GHSA-965h-392x-2mh5](https://github.com/rustls/webpki/security/advisories/GHSA-965h-392x-2mh5). Thank you to @1seal for the report.
    ├ Solution: Upgrade to >=0.103.12, <0.104.0-alpha.1 OR >=0.104.0-alpha.6 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.0.0
          │       ├── datadog-ipc v0.1.0
          │       │   ├── datadog-sidecar v0.0.1
          │       │   │   └── datadog-sidecar-ffi v0.0.1
          │       │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── datadog-live-debugger v0.0.1
          │       │   ├── datadog-remote-config v0.0.1
          │       │   │   ├── (dev) datadog-remote-config v0.0.1 (*)
          │       │   │   ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │   │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── datadog-remote-config v0.0.1 (*)
          │       ├── datadog-sidecar v0.0.1 (*)
          │       ├── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── libdd-capabilities-impl v1.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-data-pipeline v3.0.1
          │       │   │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   │   └── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-trace-stats v2.0.0
          │       │   │   ├── datadog-ipc v0.1.0 (*)
          │       │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   └── libdd-data-pipeline v3.0.1 (*)
          │       │   └── libdd-trace-utils v3.0.1
          │       │       ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │       ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │       ├── libdd-data-pipeline v3.0.1 (*)
          │       │       ├── libdd-trace-stats v2.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v3.0.1 (*)
          │       ├── libdd-common-ffi v32.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   ├── libdd-crashtracker-ffi v32.0.0
          │       │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       │   └── libdd-telemetry-ffi v32.0.0
          │       │       └── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── (build) libdd-crashtracker v1.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-crashtracker-ffi v32.0.0 (*)
          │       ├── libdd-crashtracker-ffi v32.0.0 (*)
          │       ├── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-dogstatsd-client v2.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   └── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-shared-runtime v0.1.0
          │       │   ├── (dev) libdd-data-pipeline v3.0.1 (*)
          │       │   ├── libdd-telemetry v4.0.0
          │       │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   │   ├── libdd-crashtracker v1.0.0 (*)
          │       │   │   ├── libdd-data-pipeline v3.0.1 (*)
          │       │   │   └── libdd-telemetry-ffi v32.0.0 (*)
          │       │   └── libdd-trace-stats v2.0.0 (*)
          │       ├── libdd-telemetry v4.0.0 (*)
          │       ├── libdd-telemetry-ffi v32.0.0 (*)
          │       ├── libdd-trace-stats v2.0.0 (*)
          │       └── libdd-trace-utils v3.0.1 (*)
          ├── libdd-common v4.0.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.0.0 (*)

error[vulnerability]: Name constraints were accepted for certificates asserting a wildcard name
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:311:1
    │
311 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0099
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0099
    ├ Permitted subtree name constraints for DNS names were accepted for certificates asserting a wildcard name.
      
      This was incorrect because, given a name constraint of `accept.example.com`, `*.example.com` could feasibly allow a name of `reject.example.com` which is outside the constraint.
      This is very similar to [CVE-2025-61727](https://go.dev/issue/76442).
      
      Since name constraints are restrictions on otherwise properly-issued certificates, this bug is reachable only after signature verification and requires misissuance to exploit.
      
      This vulnerability is identified as [GHSA-xgp8-3hg3-c2mh](https://github.com/rustls/webpki/security/advisories/GHSA-xgp8-3hg3-c2mh). Thank you to @1seal for the report.
    ├ Solution: Upgrade to >=0.103.12, <0.104.0-alpha.1 OR >=0.104.0-alpha.6 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.0.0
          │       ├── datadog-ipc v0.1.0
          │       │   ├── datadog-sidecar v0.0.1
          │       │   │   └── datadog-sidecar-ffi v0.0.1
          │       │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── datadog-live-debugger v0.0.1
          │       │   ├── datadog-remote-config v0.0.1
          │       │   │   ├── (dev) datadog-remote-config v0.0.1 (*)
          │       │   │   ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │   │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── datadog-remote-config v0.0.1 (*)
          │       ├── datadog-sidecar v0.0.1 (*)
          │       ├── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── libdd-capabilities-impl v1.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-data-pipeline v3.0.1
          │       │   │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   │   └── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-trace-stats v2.0.0
          │       │   │   ├── datadog-ipc v0.1.0 (*)
          │       │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   └── libdd-data-pipeline v3.0.1 (*)
          │       │   └── libdd-trace-utils v3.0.1
          │       │       ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │       ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │       ├── libdd-data-pipeline v3.0.1 (*)
          │       │       ├── libdd-trace-stats v2.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v3.0.1 (*)
          │       ├── libdd-common-ffi v32.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   ├── libdd-crashtracker-ffi v32.0.0
          │       │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       │   └── libdd-telemetry-ffi v32.0.0
          │       │       └── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── (build) libdd-crashtracker v1.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-crashtracker-ffi v32.0.0 (*)
          │       ├── libdd-crashtracker-ffi v32.0.0 (*)
          │       ├── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-dogstatsd-client v2.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   └── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-shared-runtime v0.1.0
          │       │   ├── (dev) libdd-data-pipeline v3.0.1 (*)
          │       │   ├── libdd-telemetry v4.0.0
          │       │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   │   ├── libdd-crashtracker v1.0.0 (*)
          │       │   │   ├── libdd-data-pipeline v3.0.1 (*)
          │       │   │   └── libdd-telemetry-ffi v32.0.0 (*)
          │       │   └── libdd-trace-stats v2.0.0 (*)
          │       ├── libdd-telemetry v4.0.0 (*)
          │       ├── libdd-telemetry-ffi v32.0.0 (*)
          │       ├── libdd-trace-stats v2.0.0 (*)
          │       └── libdd-trace-utils v3.0.1 (*)
          ├── libdd-common v4.0.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.0.0 (*)

error[vulnerability]: Reachable panic in certificate revocation list parsing
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:311:1
    │
311 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0104
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0104
    ├ A panic was reachable when parsing certificate revocation lists via [`BorrowedCertRevocationList::from_der`]
      or [`OwnedCertRevocationList::from_der`].  This was the result of mishandling a syntactically valid empty
      `BIT STRING` appearing in the `onlySomeReasons` element of a `IssuingDistributionPoint` CRL extension.
      
      This panic is reachable prior to a CRL's signature being verified.
      
      Applications that do not use CRLs are not affected.
      
      Thank you to @tynus3 for the report.
    ├ Solution: Upgrade to >=0.103.13, <0.104.0-alpha.1 OR >=0.104.0-alpha.7 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.0.0
          │       ├── datadog-ipc v0.1.0
          │       │   ├── datadog-sidecar v0.0.1
          │       │   │   └── datadog-sidecar-ffi v0.0.1
          │       │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── datadog-live-debugger v0.0.1
          │       │   ├── datadog-remote-config v0.0.1
          │       │   │   ├── (dev) datadog-remote-config v0.0.1 (*)
          │       │   │   ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │   │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── datadog-remote-config v0.0.1 (*)
          │       ├── datadog-sidecar v0.0.1 (*)
          │       ├── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── libdd-capabilities-impl v1.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-data-pipeline v3.0.1
          │       │   │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   │   └── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-trace-stats v2.0.0
          │       │   │   ├── datadog-ipc v0.1.0 (*)
          │       │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   └── libdd-data-pipeline v3.0.1 (*)
          │       │   └── libdd-trace-utils v3.0.1
          │       │       ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │       ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │       ├── libdd-data-pipeline v3.0.1 (*)
          │       │       ├── libdd-trace-stats v2.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v3.0.1 (*)
          │       ├── libdd-common-ffi v32.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   ├── libdd-crashtracker-ffi v32.0.0
          │       │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       │   └── libdd-telemetry-ffi v32.0.0
          │       │       └── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── (build) libdd-crashtracker v1.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-crashtracker-ffi v32.0.0 (*)
          │       ├── libdd-crashtracker-ffi v32.0.0 (*)
          │       ├── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-dogstatsd-client v2.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   └── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-shared-runtime v0.1.0
          │       │   ├── (dev) libdd-data-pipeline v3.0.1 (*)
          │       │   ├── libdd-telemetry v4.0.0
          │       │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   │   ├── libdd-crashtracker v1.0.0 (*)
          │       │   │   ├── libdd-data-pipeline v3.0.1 (*)
          │       │   │   └── libdd-telemetry-ffi v32.0.0 (*)
          │       │   └── libdd-trace-stats v2.0.0 (*)
          │       ├── libdd-telemetry v4.0.0 (*)
          │       ├── libdd-telemetry-ffi v32.0.0 (*)
          │       ├── libdd-trace-stats v2.0.0 (*)
          │       └── libdd-trace-utils v3.0.1 (*)
          ├── libdd-common v4.0.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.0.0 (*)

error[vulnerability]: Denial of Service via Stack Exhaustion
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:366:1
    │
366 │ time 0.3.41 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0009
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0009
    ├ ## Impact
      
      When user-provided input is provided to any type that parses with the RFC 2822 format, a denial of
      service attack via stack exhaustion is possible. The attack relies on formally deprecated and
      rarely-used features that are part of the RFC 2822 format used in a malicious manner. Ordinary,
      non-malicious input will never encounter this scenario.
      
      ## Patches
      
      A limit to the depth of recursion was added in v0.3.47. From this version, an error will be returned
      rather than exhausting the stack.
      
      ## Workarounds
      
      Limiting the length of user input is the simplest way to avoid stack exhaustion, as the amount of
      the stack consumed would be at most a factor of the length of the input.
    ├ Announcement: https://github.com/time-rs/time/blob/main/CHANGELOG.md#0347-2026-02-05
    ├ Solution: Upgrade to >=0.3.47 (try `cargo update -p time`)
    ├ time v0.3.41
      ├── datadog-remote-config v0.0.1
      │   ├── (dev) datadog-remote-config v0.0.1 (*)
      │   ├── (dev) datadog-sidecar v0.0.1
      │   │   └── datadog-sidecar-ffi v0.0.1
      │   └── datadog-sidecar-ffi v0.0.1 (*)
      └── tracing-appender v0.2.3
          └── libdd-log v1.0.0
              └── (dev) libdd-data-pipeline v3.0.1
                  ├── datadog-live-debugger v0.0.1
                  │   ├── datadog-remote-config v0.0.1 (*)
                  │   ├── datadog-sidecar v0.0.1 (*)
                  │   └── datadog-sidecar-ffi v0.0.1 (*)
                  └── datadog-sidecar v0.0.1 (*)

advisories FAILED, bans ok, sources ok

📦 datadog-sidecar - 6 error(s)

Show output
error[unmaintained]: Bincode is unmaintained
   ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:37:1
   │
37 │ bincode 1.3.3 registry+https://github.com/rust-lang/crates.io-index
   │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ unmaintained advisory detected
   │
   ├ ID: RUSTSEC-2025-0141
   ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2025-0141
   ├ Due to a doxxing and harassment incident, the bincode team has taken the decision to cease development permanently.
     
     The team considers version 1.3.3 a complete version of bincode that is not in need of any updates.
     
     ## Alternatives to consider
     
     * [wincode](https://crates.io/crates/wincode)
     * [postcard](https://crates.io/crates/postcard)
     * [bitcode](https://crates.io/crates/bitcode)
     * [rkyv](https://crates.io/crates/rkyv)
   ├ Announcement: https://git.sr.ht/~stygianentity/bincode/tree/v3.0/item/README.md
   ├ Solution: No safe upgrade is available!
   ├ bincode v1.3.3
     ├── datadog-ipc v0.1.0
     │   └── datadog-sidecar v0.0.1
     └── datadog-sidecar v0.0.1 (*)

error[unsound]: Rand is unsound with a custom logger using `rand::rng()`
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:283:1
    │
283 │ rand 0.8.5 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ unsound advisory detected
    │
    ├ ID: RUSTSEC-2026-0097
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0097
    ├ It has been reported (by @lopopolo) that the `rand` library is [unsound](https://rust-lang.github.io/unsafe-code-guidelines/glossary.html#soundness-of-code--of-a-library) (i.e. that safe code using the public API can cause Undefined Behaviour) when all the following conditions are met:
      
      - The `log` and `thread_rng` features are enabled
      - A [custom logger](https://docs.rs/log/latest/log/#implementing-a-logger) is defined
      - The custom logger accesses `rand::rng()` (previously `rand::thread_rng()`) and calls any `TryRng` (previously `RngCore`) methods on `ThreadRng`
      - The `ThreadRng` (attempts to) reseed while called from the custom logger (this happens every 64 kB of generated data)
      - Trace-level logging is enabled or warn-level logging is enabled and the random source (the `getrandom` crate) is unable to provide a new seed
      
      `TryRng` (previously `RngCore`) methods for `ThreadRng` use `unsafe` code to cast `*mut BlockRng<ReseedingCore>` to `&mut BlockRng<ReseedingCore>`. When all the above conditions are met this results in an aliased mutable reference, violating the Stacked Borrows rules. Miri is able to detect this violation in sample code. Since construction of [aliased mutable references is Undefined Behaviour](https://doc.rust-lang.org/stable/nomicon/references.html), the behaviour of optimized builds is hard to predict.
    ├ Announcement: https://github.com/rust-random/rand/pull/1763
    ├ Solution: Upgrade to >=0.10.1 OR <0.10.0, >=0.9.3 OR <0.9.0, >=0.8.6 (try `cargo update -p rand`)
    ├ rand v0.8.5
      ├── datadog-sidecar v0.0.1
      ├── libdd-common v4.0.0
      │   ├── datadog-ipc v0.1.0
      │   │   └── datadog-sidecar v0.0.1 (*)
      │   ├── datadog-live-debugger v0.0.1
      │   │   ├── datadog-remote-config v0.0.1
      │   │   │   ├── (dev) datadog-remote-config v0.0.1 (*)
      │   │   │   └── (dev) datadog-sidecar v0.0.1 (*)
      │   │   └── datadog-sidecar v0.0.1 (*)
      │   ├── datadog-remote-config v0.0.1 (*)
      │   ├── datadog-sidecar v0.0.1 (*)
      │   ├── libdd-capabilities-impl v1.0.0
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   ├── libdd-data-pipeline v3.0.1
      │   │   │   ├── datadog-live-debugger v0.0.1 (*)
      │   │   │   └── datadog-sidecar v0.0.1 (*)
      │   │   ├── libdd-trace-stats v2.0.0
      │   │   │   ├── datadog-ipc v0.1.0 (*)
      │   │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   │   └── libdd-data-pipeline v3.0.1 (*)
      │   │   └── libdd-trace-utils v3.0.1
      │   │       ├── (dev) datadog-sidecar v0.0.1 (*)
      │   │       ├── libdd-data-pipeline v3.0.1 (*)
      │   │       ├── libdd-trace-stats v2.0.0 (*)
      │   │       └── (dev) libdd-trace-utils v3.0.1 (*)
      │   ├── libdd-common-ffi v32.0.0
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   └── libdd-crashtracker-ffi v32.0.0
      │   │       └── datadog-sidecar v0.0.1 (*)
      │   ├── (build) libdd-crashtracker v1.0.0
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   └── libdd-crashtracker-ffi v32.0.0 (*)
      │   ├── libdd-crashtracker-ffi v32.0.0 (*)
      │   ├── libdd-data-pipeline v3.0.1 (*)
      │   ├── libdd-dogstatsd-client v2.0.0
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   └── libdd-data-pipeline v3.0.1 (*)
      │   ├── libdd-shared-runtime v0.1.0
      │   │   ├── (dev) libdd-data-pipeline v3.0.1 (*)
      │   │   ├── libdd-telemetry v4.0.0
      │   │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   │   ├── libdd-crashtracker v1.0.0 (*)
      │   │   │   └── libdd-data-pipeline v3.0.1 (*)
      │   │   └── libdd-trace-stats v2.0.0 (*)
      │   ├── libdd-telemetry v4.0.0 (*)
      │   ├── libdd-trace-stats v2.0.0 (*)
      │   └── libdd-trace-utils v3.0.1 (*)
      ├── libdd-crashtracker v1.0.0 (*)
      ├── (dev) libdd-data-pipeline v3.0.1 (*)
      ├── (dev) libdd-trace-normalization v2.0.0
      │   └── libdd-trace-utils v3.0.1 (*)
      ├── (dev) libdd-trace-stats v2.0.0 (*)
      ├── libdd-trace-utils v3.0.1 (*)
      └── proptest v1.5.0
          └── (dev) libdd-tinybytes v1.1.0
              ├── datadog-ipc v0.1.0 (*)
              ├── datadog-sidecar v0.0.1 (*)
              ├── libdd-data-pipeline v3.0.1 (*)
              ├── (dev) libdd-tinybytes v1.1.0 (*)
              └── libdd-trace-utils v3.0.1 (*)

error[vulnerability]: Name constraints for URI names were incorrectly accepted
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:309:1
    │
309 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0098
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0098
    ├ Name constraints for URI names were ignored and therefore accepted.
      
      Note this library does not provide an API for asserting URI names, and URI name constraints are otherwise not implemented.  URI name constraints are now rejected unconditionally.
      
      Since name constraints are restrictions on otherwise properly-issued certificates, this bug is reachable only after signature verification and requires misissuance to exploit.
      
      This vulnerability is identified as [GHSA-965h-392x-2mh5](https://github.com/rustls/webpki/security/advisories/GHSA-965h-392x-2mh5). Thank you to @1seal for the report.
    ├ Solution: Upgrade to >=0.103.12, <0.104.0-alpha.1 OR >=0.104.0-alpha.6 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.0.0
          │       ├── datadog-ipc v0.1.0
          │       │   └── datadog-sidecar v0.0.1
          │       ├── datadog-live-debugger v0.0.1
          │       │   ├── datadog-remote-config v0.0.1
          │       │   │   ├── (dev) datadog-remote-config v0.0.1 (*)
          │       │   │   └── (dev) datadog-sidecar v0.0.1 (*)
          │       │   └── datadog-sidecar v0.0.1 (*)
          │       ├── datadog-remote-config v0.0.1 (*)
          │       ├── datadog-sidecar v0.0.1 (*)
          │       ├── libdd-capabilities-impl v1.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-data-pipeline v3.0.1
          │       │   │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   │   └── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-trace-stats v2.0.0
          │       │   │   ├── datadog-ipc v0.1.0 (*)
          │       │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   └── libdd-data-pipeline v3.0.1 (*)
          │       │   └── libdd-trace-utils v3.0.1
          │       │       ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │       ├── libdd-data-pipeline v3.0.1 (*)
          │       │       ├── libdd-trace-stats v2.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v3.0.1 (*)
          │       ├── libdd-common-ffi v32.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-crashtracker-ffi v32.0.0
          │       │       └── datadog-sidecar v0.0.1 (*)
          │       ├── (build) libdd-crashtracker v1.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-crashtracker-ffi v32.0.0 (*)
          │       ├── libdd-crashtracker-ffi v32.0.0 (*)
          │       ├── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-dogstatsd-client v2.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-shared-runtime v0.1.0
          │       │   ├── (dev) libdd-data-pipeline v3.0.1 (*)
          │       │   ├── libdd-telemetry v4.0.0
          │       │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   ├── libdd-crashtracker v1.0.0 (*)
          │       │   │   └── libdd-data-pipeline v3.0.1 (*)
          │       │   └── libdd-trace-stats v2.0.0 (*)
          │       ├── libdd-telemetry v4.0.0 (*)
          │       ├── libdd-trace-stats v2.0.0 (*)
          │       └── libdd-trace-utils v3.0.1 (*)
          ├── libdd-common v4.0.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.0.0 (*)

error[vulnerability]: Name constraints were accepted for certificates asserting a wildcard name
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:309:1
    │
309 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0099
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0099
    ├ Permitted subtree name constraints for DNS names were accepted for certificates asserting a wildcard name.
      
      This was incorrect because, given a name constraint of `accept.example.com`, `*.example.com` could feasibly allow a name of `reject.example.com` which is outside the constraint.
      This is very similar to [CVE-2025-61727](https://go.dev/issue/76442).
      
      Since name constraints are restrictions on otherwise properly-issued certificates, this bug is reachable only after signature verification and requires misissuance to exploit.
      
      This vulnerability is identified as [GHSA-xgp8-3hg3-c2mh](https://github.com/rustls/webpki/security/advisories/GHSA-xgp8-3hg3-c2mh). Thank you to @1seal for the report.
    ├ Solution: Upgrade to >=0.103.12, <0.104.0-alpha.1 OR >=0.104.0-alpha.6 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.0.0
          │       ├── datadog-ipc v0.1.0
          │       │   └── datadog-sidecar v0.0.1
          │       ├── datadog-live-debugger v0.0.1
          │       │   ├── datadog-remote-config v0.0.1
          │       │   │   ├── (dev) datadog-remote-config v0.0.1 (*)
          │       │   │   └── (dev) datadog-sidecar v0.0.1 (*)
          │       │   └── datadog-sidecar v0.0.1 (*)
          │       ├── datadog-remote-config v0.0.1 (*)
          │       ├── datadog-sidecar v0.0.1 (*)
          │       ├── libdd-capabilities-impl v1.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-data-pipeline v3.0.1
          │       │   │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   │   └── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-trace-stats v2.0.0
          │       │   │   ├── datadog-ipc v0.1.0 (*)
          │       │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   └── libdd-data-pipeline v3.0.1 (*)
          │       │   └── libdd-trace-utils v3.0.1
          │       │       ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │       ├── libdd-data-pipeline v3.0.1 (*)
          │       │       ├── libdd-trace-stats v2.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v3.0.1 (*)
          │       ├── libdd-common-ffi v32.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-crashtracker-ffi v32.0.0
          │       │       └── datadog-sidecar v0.0.1 (*)
          │       ├── (build) libdd-crashtracker v1.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-crashtracker-ffi v32.0.0 (*)
          │       ├── libdd-crashtracker-ffi v32.0.0 (*)
          │       ├── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-dogstatsd-client v2.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-shared-runtime v0.1.0
          │       │   ├── (dev) libdd-data-pipeline v3.0.1 (*)
          │       │   ├── libdd-telemetry v4.0.0
          │       │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   ├── libdd-crashtracker v1.0.0 (*)
          │       │   │   └── libdd-data-pipeline v3.0.1 (*)
          │       │   └── libdd-trace-stats v2.0.0 (*)
          │       ├── libdd-telemetry v4.0.0 (*)
          │       ├── libdd-trace-stats v2.0.0 (*)
          │       └── libdd-trace-utils v3.0.1 (*)
          ├── libdd-common v4.0.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.0.0 (*)

error[vulnerability]: Reachable panic in certificate revocation list parsing
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:309:1
    │
309 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0104
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0104
    ├ A panic was reachable when parsing certificate revocation lists via [`BorrowedCertRevocationList::from_der`]
      or [`OwnedCertRevocationList::from_der`].  This was the result of mishandling a syntactically valid empty
      `BIT STRING` appearing in the `onlySomeReasons` element of a `IssuingDistributionPoint` CRL extension.
      
      This panic is reachable prior to a CRL's signature being verified.
      
      Applications that do not use CRLs are not affected.
      
      Thank you to @tynus3 for the report.
    ├ Solution: Upgrade to >=0.103.13, <0.104.0-alpha.1 OR >=0.104.0-alpha.7 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.0.0
          │       ├── datadog-ipc v0.1.0
          │       │   └── datadog-sidecar v0.0.1
          │       ├── datadog-live-debugger v0.0.1
          │       │   ├── datadog-remote-config v0.0.1
          │       │   │   ├── (dev) datadog-remote-config v0.0.1 (*)
          │       │   │   └── (dev) datadog-sidecar v0.0.1 (*)
          │       │   └── datadog-sidecar v0.0.1 (*)
          │       ├── datadog-remote-config v0.0.1 (*)
          │       ├── datadog-sidecar v0.0.1 (*)
          │       ├── libdd-capabilities-impl v1.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-data-pipeline v3.0.1
          │       │   │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   │   └── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-trace-stats v2.0.0
          │       │   │   ├── datadog-ipc v0.1.0 (*)
          │       │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   └── libdd-data-pipeline v3.0.1 (*)
          │       │   └── libdd-trace-utils v3.0.1
          │       │       ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │       ├── libdd-data-pipeline v3.0.1 (*)
          │       │       ├── libdd-trace-stats v2.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v3.0.1 (*)
          │       ├── libdd-common-ffi v32.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-crashtracker-ffi v32.0.0
          │       │       └── datadog-sidecar v0.0.1 (*)
          │       ├── (build) libdd-crashtracker v1.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-crashtracker-ffi v32.0.0 (*)
          │       ├── libdd-crashtracker-ffi v32.0.0 (*)
          │       ├── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-dogstatsd-client v2.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-data-pipeline v3.0.1 (*)
          │       ├── libdd-shared-runtime v0.1.0
          │       │   ├── (dev) libdd-data-pipeline v3.0.1 (*)
          │       │   ├── libdd-telemetry v4.0.0
          │       │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   ├── libdd-crashtracker v1.0.0 (*)
          │       │   │   └── libdd-data-pipeline v3.0.1 (*)
          │       │   └── libdd-trace-stats v2.0.0 (*)
          │       ├── libdd-telemetry v4.0.0 (*)
          │       ├── libdd-trace-stats v2.0.0 (*)...*[Comment body truncated]*

Add dlmalloc (non-Linux) and rustix-dlmalloc (Linux) as global
allocators, a panic handler, and no-std-dev/no-std-release profiles
with panic="abort" to support building the FFI crate as
staticlib/cdylib without std.
… builds

Define minimal #[repr(C)] FFI types (Slice, CharSlice, CStr, AsBytes)
locally for no_std, matching libdd-common-ffi layout. This enables
ddog_library_configurator_new, with_local_path, with_fleet_path,
with_process_info, and drop to compile and link without std.
Add CString and Vec types to the local ffi_types module for no_std,
with proper Drop impls using alloc::ffi::CString. Un-gate the
LibraryConfig struct while keeping rs_vec_to_ffi and
logged_result_to_ffi_with_messages behind std.
@datadog-prod-us1-3
Copy link
Copy Markdown

datadog-prod-us1-3 Bot commented Mar 20, 2026

Tests

🎉 All green!

❄️ No new flaky tests detected
🧪 All tests passed

🎯 Code Coverage (details)
Patch Coverage: 57.73%
Overall Coverage: 71.82% (-0.16%)

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 313092d | Docs | Datadog PR Page | Give us feedback!

Replace the custom ffi_types::CString and Vec wrappers with a
re-export of alloc::ffi::CString. In no_std mode LibraryConfig
fields are alloc::ffi::CString (no C header generation happens
without std anyway).
@dd-octo-sts
Copy link
Copy Markdown
Contributor

dd-octo-sts Bot commented Mar 20, 2026

Artifact Size Benchmark Report

aarch64-alpine-linux-musl
Artifact Baseline Commit Change
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 83.72 MB 83.74 MB +.02% (+21.95 KB) 🔍
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.so 7.63 MB 7.63 MB 0% (0 B) 👌
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 100.05 MB 100.12 MB +.07% (+74.53 KB) 🔍
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 10.17 MB 10.17 MB +.03% (+3.50 KB) 🔍
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 25.21 MB 25.25 MB +.15% (+41.00 KB) 🔍
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 79.57 KB 79.57 KB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 184.47 MB 185.39 MB +.49% (+944.00 KB) 🔍
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 918.24 MB 920.31 MB +.22% (+2.07 MB) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 7.89 MB 7.90 MB +.09% (+7.50 KB) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 79.57 KB 79.57 KB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 23.68 MB 23.68 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 46.20 MB 46.22 MB +.04% (+21.16 KB) 🔍
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 21.69 MB 21.72 MB +.12% (+28.00 KB) 🔍
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 80.81 KB 80.81 KB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 188.62 MB 189.54 MB +.48% (+936.00 KB) 🔍
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 903.95 MB 905.99 MB +.22% (+2.03 MB) 🔍
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 6.14 MB 6.14 MB +.04% (+3.00 KB) 🔍
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 80.81 KB 80.81 KB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 25.37 MB 25.37 MB +.03% (+8.00 KB) 🔍
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 43.69 MB 43.71 MB +.05% (+24.42 KB) 🔍
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 74.50 MB 74.51 MB +0% (+5.12 KB) 👌
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 8.55 MB 8.55 MB 0% (0 B) 👌
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 92.29 MB 92.38 MB +.09% (+91.07 KB) 🔍
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 10.21 MB 10.22 MB +.10% (+11.39 KB) 🔍

@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Mar 20, 2026

Codecov Report

❌ Patch coverage is 57.73196% with 123 lines in your changes missing coverage. Please review.
✅ Project coverage is 71.82%. Comparing base (db05e1f) to head (313092d).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1770      +/-   ##
==========================================
- Coverage   71.98%   71.82%   -0.16%     
==========================================
  Files         434      435       +1     
  Lines       70450    70530      +80     
==========================================
- Hits        50710    50655      -55     
- Misses      19740    19875     +135     
Components Coverage Δ
libdd-crashtracker 65.99% <ø> (-0.06%) ⬇️
libdd-crashtracker-ffi 34.47% <ø> (-0.90%) ⬇️
libdd-alloc 98.77% <ø> (ø)
libdd-data-pipeline 85.98% <ø> (-1.03%) ⬇️
libdd-data-pipeline-ffi 72.43% <ø> (-5.77%) ⬇️
libdd-common 79.50% <37.93%> (-0.08%) ⬇️
libdd-common-ffi 73.64% <37.93%> (-0.23%) ⬇️
libdd-telemetry 69.26% <ø> (-0.03%) ⬇️
libdd-telemetry-ffi 19.37% <ø> (ø)
libdd-dogstatsd-client 82.64% <ø> (ø)
datadog-ipc 76.22% <ø> (ø)
libdd-profiling 81.61% <ø> (ø)
libdd-profiling-ffi 64.36% <ø> (ø)
datadog-sidecar 28.54% <ø> (-1.53%) ⬇️
datdog-sidecar-ffi 6.94% <ø> (-7.46%) ⬇️
spawn-worker 54.69% <ø> (ø)
libdd-tinybytes 93.16% <ø> (ø)
libdd-trace-normalization 81.71% <ø> (ø)
libdd-trace-obfuscation 87.26% <ø> (ø)
libdd-trace-protobuf 68.25% <ø> (ø)
libdd-trace-utils 89.27% <ø> (ø)
libdd-tracer-flare 86.88% <ø> (ø)
libdd-log 74.69% <ø> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@pr-commenter
Copy link
Copy Markdown

pr-commenter Bot commented Mar 20, 2026

Benchmarks

Comparison

Benchmark execution time: 2026-03-20 20:49:20

Comparing candidate commit 3243266 in PR branch pawel/no-std-library-config with baseline commit 5d5a596 in branch main.

Found 14 performance improvements and 0 performance regressions! Performance is the same for 45 metrics, 2 unstable metrics.

Explanation

This is an A/B test comparing a candidate commit's performance against that of a baseline commit. Performance changes are noted in the tables below as:

  • 🟩 = significantly better candidate vs. baseline
  • 🟥 = significantly worse candidate vs. baseline

We compute a confidence interval (CI) over the relative difference of means between metrics from the candidate and baseline commits, considering the baseline as the reference.

If the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD), the change is considered significant.

Feel free to reach out to #apm-benchmarking-platform on Slack if you have any questions.

More details about the CI and significant changes

You can imagine this CI as a range of values that is likely to contain the true difference of means between the candidate and baseline commits.

CIs of the difference of means are often centered around 0%, because often changes are not that big:

---------------------------------(------|---^--------)-------------------------------->
                              -0.6%    0%  0.3%     +1.2%
                                 |          |        |
         lower bound of the CI --'          |        |
sample mean (center of the CI) -------------'        |
         upper bound of the CI ----------------------'

As described above, a change is considered significant if the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD).

For instance, for an execution time metric, this confidence interval indicates a significantly worse performance:

----------------------------------------|---------|---(---------^---------)---------->
                                       0%        1%  1.3%      2.2%      3.1%
                                                  |   |         |         |
       significant impact threshold --------------'   |         |         |
                      lower bound of CI --------------'         |         |
       sample mean (center of the CI) --------------------------'         |
                      upper bound of CI ----------------------------------'

scenario:credit_card/is_card_number/ 3782-8224-6310-005

  • 🟩 execution_time [-3.491µs; -3.213µs] or [-4.360%; -4.013%]
  • 🟩 throughput [+523892.248op/s; +570070.617op/s] or [+4.194%; +4.564%]

scenario:credit_card/is_card_number/ 378282246310005

  • 🟩 execution_time [-15.872µs; -15.714µs] or [-18.814%; -18.627%]
  • 🟩 throughput [+2718514.960op/s; +2740916.111op/s] or [+22.932%; +23.121%]

scenario:credit_card/is_card_number/378282246310005

  • 🟩 execution_time [-5.647µs; -5.530µs] or [-8.018%; -7.853%]
  • 🟩 throughput [+1211504.087op/s; +1235522.463op/s] or [+8.532%; +8.701%]

scenario:credit_card/is_card_number/37828224631000521389798

  • 🟩 execution_time [-7.458µs; -7.420µs] or [-14.038%; -13.967%]
  • 🟩 throughput [+3056203.836op/s; +3073912.169op/s] or [+16.236%; +16.330%]

scenario:credit_card/is_card_number_no_luhn/ 378282246310005

  • 🟩 execution_time [-4.763µs; -4.710µs] or [-8.086%; -7.997%]
  • 🟩 throughput [+1476664.639op/s; +1492285.631op/s] or [+8.698%; +8.790%]

scenario:credit_card/is_card_number_no_luhn/378282246310005

  • 🟩 execution_time [-5.135µs; -5.075µs] or [-9.228%; -9.120%]
  • 🟩 throughput [+1804975.558op/s; +1825414.378op/s] or [+10.043%; +10.157%]

scenario:credit_card/is_card_number_no_luhn/37828224631000521389798

  • 🟩 execution_time [-7.428µs; -7.387µs] or [-13.979%; -13.903%]
  • 🟩 throughput [+3039350.567op/s; +3058359.021op/s] or [+16.150%; +16.251%]

Candidate

Candidate benchmark details

Group 1

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
benching deserializing traces from msgpack to their internal representation execution_time 49.114ms 49.583ms ± 1.225ms 49.458ms ± 0.076ms 49.507ms 49.631ms 57.430ms 62.017ms 25.39% 8.308 71.149 2.46% 0.087ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
benching deserializing traces from msgpack to their internal representation execution_time [49.413ms; 49.753ms] or [-0.342%; +0.342%] None None None

Group 2

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
concentrator/add_spans_to_concentrator execution_time 12.948ms 12.981ms ± 0.016ms 12.980ms ± 0.011ms 12.991ms 13.006ms 13.019ms 13.040ms 0.46% 0.411 0.176 0.12% 0.001ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
concentrator/add_spans_to_concentrator execution_time [12.979ms; 12.983ms] or [-0.017%; +0.017%] None None None

Group 3

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... execution_time 186.083µs 186.470µs ± 0.200µs 186.460µs ± 0.157µs 186.621µs 186.796µs 186.897µs 187.261µs 0.43% 0.387 0.161 0.11% 0.014µs 1 200
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... throughput 5340139.519op/s 5362797.113op/s ± 5748.120op/s 5363076.958op/s ± 4528.355op/s 5367452.800op/s 5371467.422op/s 5373211.201op/s 5373955.421op/s 0.20% -0.381 0.144 0.11% 406.453op/s 1 200
normalization/normalize_name/normalize_name/bad-name execution_time 17.882µs 17.956µs ± 0.035µs 17.954µs ± 0.021µs 17.974µs 18.017µs 18.054µs 18.073µs 0.66% 0.614 0.642 0.19% 0.002µs 1 200
normalization/normalize_name/normalize_name/bad-name throughput 55332649.192op/s 55693007.668op/s ± 107863.069op/s 55697659.997op/s ± 65174.739op/s 55768691.153op/s 55851433.879op/s 55906006.909op/s 55921000.074op/s 0.40% -0.601 0.617 0.19% 7627.071op/s 1 200
normalization/normalize_name/normalize_name/good execution_time 10.338µs 10.537µs ± 0.123µs 10.534µs ± 0.043µs 10.574µs 10.631µs 10.721µs 11.998µs 13.90% 8.298 96.366 1.17% 0.009µs 1 200
normalization/normalize_name/normalize_name/good throughput 83344224.908op/s 94915170.699op/s ± 1019481.724op/s 94928993.899op/s ± 383407.414op/s 95362493.090op/s 95958810.295op/s 96372104.864op/s 96731501.200op/s 1.90% -7.297 81.238 1.07% 72088.244op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... execution_time [186.442µs; 186.498µs] or [-0.015%; +0.015%] None None None
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... throughput [5362000.478op/s; 5363593.747op/s] or [-0.015%; +0.015%] None None None
normalization/normalize_name/normalize_name/bad-name execution_time [17.951µs; 17.960µs] or [-0.027%; +0.027%] None None None
normalization/normalize_name/normalize_name/bad-name throughput [55678058.884op/s; 55707956.452op/s] or [-0.027%; +0.027%] None None None
normalization/normalize_name/normalize_name/good execution_time [10.520µs; 10.554µs] or [-0.162%; +0.162%] None None None
normalization/normalize_name/normalize_name/good throughput [94773880.337op/s; 95056461.061op/s] or [-0.149%; +0.149%] None None None

Group 4

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
benching string interning on wordpress profile execution_time 159.525µs 160.684µs ± 0.386µs 160.639µs ± 0.202µs 160.854µs 161.367µs 161.749µs 162.426µs 1.11% 1.014 2.668 0.24% 0.027µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
benching string interning on wordpress profile execution_time [160.630µs; 160.737µs] or [-0.033%; +0.033%] None None None

Group 5

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
credit_card/is_card_number/ execution_time 3.891µs 3.913µs ± 0.003µs 3.912µs ± 0.001µs 3.914µs 3.918µs 3.920µs 3.921µs 0.21% -1.311 12.437 0.08% 0.000µs 1 200
credit_card/is_card_number/ throughput 255062089.714op/s 255570178.439op/s ± 195452.472op/s 255602181.072op/s ± 97781.372op/s 255684390.472op/s 255795574.180op/s 255840982.755op/s 256984511.382op/s 0.54% 1.340 12.664 0.08% 13820.577op/s 1 200
credit_card/is_card_number/ 3782-8224-6310-005 execution_time 74.611µs 76.708µs ± 0.874µs 76.693µs ± 0.628µs 77.317µs 78.079µs 79.230µs 79.438µs 3.58% 0.255 0.050 1.14% 0.062µs 1 200
credit_card/is_card_number/ 3782-8224-6310-005 throughput 12588500.280op/s 13038085.647op/s ± 148261.337op/s 13039046.402op/s ± 105886.017op/s 13144877.877op/s 13274049.067op/s 13331540.374op/s 13402819.278op/s 2.79% -0.189 -0.040 1.13% 10483.660op/s 1 200
credit_card/is_card_number/ 378282246310005 execution_time 68.370µs 68.568µs ± 0.074µs 68.561µs ± 0.044µs 68.613µs 68.679µs 68.713µs 69.055µs 0.72% 1.295 8.178 0.11% 0.005µs 1 200
credit_card/is_card_number/ 378282246310005 throughput 14481164.667op/s 14584149.457op/s ± 15761.225op/s 14585454.655op/s ± 9300.720op/s 14593816.241op/s 14606389.714op/s 14618270.167op/s 14626342.042op/s 0.28% -1.267 7.986 0.11% 1114.487op/s 1 200
credit_card/is_card_number/37828224631 execution_time 3.894µs 3.914µs ± 0.003µs 3.914µs ± 0.002µs 3.915µs 3.917µs 3.919µs 3.920µs 0.17% -1.998 15.114 0.07% 0.000µs 1 200
credit_card/is_card_number/37828224631 throughput 255072891.869op/s 255519590.296op/s ± 172317.122op/s 255501951.170op/s ± 107391.353op/s 255630771.555op/s 255750170.106op/s 255820726.352op/s 256828410.286op/s 0.52% 2.025 15.348 0.07% 12184.661op/s 1 200
credit_card/is_card_number/378282246310005 execution_time 64.612µs 64.838µs ± 0.156µs 64.806µs ± 0.089µs 64.907µs 65.122µs 65.381µs 65.555µs 1.16% 1.430 3.012 0.24% 0.011µs 1 200
credit_card/is_card_number/378282246310005 throughput 15254338.038op/s 15423109.014op/s ± 36911.446op/s 15430714.550op/s ± 21231.847op/s 15449721.970op/s 15468930.653op/s 15473065.402op/s 15477095.446op/s 0.30% -1.409 2.916 0.24% 2610.033op/s 1 200
credit_card/is_card_number/37828224631000521389798 execution_time 45.400µs 45.686µs ± 0.131µs 45.695µs ± 0.095µs 45.776µs 45.896µs 45.935µs 45.963µs 0.59% -0.153 -0.711 0.29% 0.009µs 1 200
credit_card/is_card_number/37828224631000521389798 throughput 21756643.302op/s 21888547.819op/s ± 62631.822op/s 21884462.109op/s ± 45304.908op/s 21933555.603op/s 21999054.708op/s 22017762.846op/s 22026405.134op/s 0.65% 0.164 -0.708 0.29% 4428.739op/s 1 200
credit_card/is_card_number/x371413321323331 execution_time 6.430µs 6.436µs ± 0.003µs 6.436µs ± 0.002µs 6.438µs 6.442µs 6.447µs 6.449µs 0.20% 0.999 1.586 0.05% 0.000µs 1 200
credit_card/is_card_number/x371413321323331 throughput 155069423.004op/s 155378556.187op/s ± 83694.159op/s 155385090.803op/s ± 51513.289op/s 155440616.634op/s 155491588.433op/s 155516760.118op/s 155522536.206op/s 0.09% -0.994 1.573 0.05% 5918.071op/s 1 200
credit_card/is_card_number_no_luhn/ execution_time 3.898µs 3.913µs ± 0.002µs 3.913µs ± 0.001µs 3.914µs 3.917µs 3.918µs 3.919µs 0.16% -0.892 7.006 0.06% 0.000µs 1 200
credit_card/is_card_number_no_luhn/ throughput 255168943.812op/s 255566246.776op/s ± 155944.121op/s 255573426.283op/s ± 89853.071op/s 255663183.419op/s 255777375.235op/s 255850615.125op/s 256557169.473op/s 0.38% 0.907 7.104 0.06% 11026.915op/s 1 200
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 execution_time 61.457µs 62.681µs ± 0.505µs 62.714µs ± 0.358µs 63.009µs 63.470µs 63.597µs 63.845µs 1.80% -0.200 -0.421 0.80% 0.036µs 1 200
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 throughput 15662866.622op/s 15954835.016op/s ± 128844.795op/s 15945455.999op/s ± 91470.929op/s 16040868.187op/s 16188204.580op/s 16262951.172op/s 16271499.983op/s 2.04% 0.237 -0.397 0.81% 9110.703op/s 1 200
credit_card/is_card_number_no_luhn/ 378282246310005 execution_time 53.950µs 54.165µs ± 0.076µs 54.163µs ± 0.045µs 54.210µs 54.295µs 54.340µs 54.369µs 0.38% 0.011 0.245 0.14% 0.005µs 1 200
credit_card/is_card_number_no_luhn/ 378282246310005 throughput 18392775.636op/s 18462268.490op/s ± 25982.182op/s 18462793.778op/s ± 15292.387op/s 18476289.379op/s 18507208.285op/s 18524449.569op/s 18535675.615op/s 0.39% -0.001 0.244 0.14% 1837.218op/s 1 200
credit_card/is_card_number_no_luhn/37828224631 execution_time 3.897µs 3.913µs ± 0.002µs 3.912µs ± 0.001µs 3.914µs 3.917µs 3.919µs 3.921µs 0.22% -0.530 8.566 0.06% 0.000µs 1 200
credit_card/is_card_number_no_luhn/37828224631 throughput 255036318.728op/s 255577507.017op/s ± 157555.171op/s 255597367.349op/s ± 83988.573op/s 255669490.968op/s 255759536.405op/s 255870573.921op/s 256591057.300op/s 0.39% 0.549 8.668 0.06% 11140.833op/s 1 200
credit_card/is_card_number_no_luhn/378282246310005 execution_time 50.313µs 50.538µs ± 0.106µs 50.525µs ± 0.059µs 50.585µs 50.721µs 50.872µs 50.990µs 0.92% 1.022 1.928 0.21% 0.007µs 1 200
credit_card/is_card_number_no_luhn/378282246310005 throughput 19611700.221op/s 19787263.316op/s ± 41307.198op/s 19792110.865op/s ± 23113.761op/s 19814976.655op/s 19840734.128op/s 19861670.598op/s 19875536.978op/s 0.42% -1.004 1.869 0.21% 2920.860op/s 1 200
credit_card/is_card_number_no_luhn/37828224631000521389798 execution_time 45.396µs 45.728µs ± 0.140µs 45.738µs ± 0.101µs 45.835µs 45.936µs 45.969µs 45.988µs 0.55% -0.279 -0.735 0.30% 0.010µs 1 200
credit_card/is_card_number_no_luhn/37828224631000521389798 throughput 21744567.656op/s 21868880.636op/s ± 66803.566op/s 21863575.284op/s ± 48344.984op/s 21911825.814op/s 21989595.426op/s 22005589.151op/s 22028365.897op/s 0.75% 0.290 -0.727 0.30% 4723.725op/s 1 200
credit_card/is_card_number_no_luhn/x371413321323331 execution_time 6.430µs 6.438µs ± 0.004µs 6.437µs ± 0.003µs 6.440µs 6.445µs 6.448µs 6.454µs 0.26% 0.641 0.886 0.06% 0.000µs 1 200
credit_card/is_card_number_no_luhn/x371413321323331 throughput 154949005.425op/s 155333051.866op/s ± 97351.367op/s 155344526.474op/s ± 63541.584op/s 155402793.370op/s 155478687.787op/s 155505433.774op/s 155529307.066op/s 0.12% -0.637 0.874 0.06% 6883.781op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
credit_card/is_card_number/ execution_time [3.912µs; 3.913µs] or [-0.011%; +0.011%] None None None
credit_card/is_card_number/ throughput [255543090.606op/s; 255597266.272op/s] or [-0.011%; +0.011%] None None None
credit_card/is_card_number/ 3782-8224-6310-005 execution_time [76.587µs; 76.829µs] or [-0.158%; +0.158%] None None None
credit_card/is_card_number/ 3782-8224-6310-005 throughput [13017538.052op/s; 13058633.243op/s] or [-0.158%; +0.158%] None None None
credit_card/is_card_number/ 378282246310005 execution_time [68.557µs; 68.578µs] or [-0.015%; +0.015%] None None None
credit_card/is_card_number/ 378282246310005 throughput [14581965.103op/s; 14586333.811op/s] or [-0.015%; +0.015%] None None None
credit_card/is_card_number/37828224631 execution_time [3.913µs; 3.914µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number/37828224631 throughput [255495708.800op/s; 255543471.791op/s] or [-0.009%; +0.009%] None None None
credit_card/is_card_number/378282246310005 execution_time [64.817µs; 64.860µs] or [-0.033%; +0.033%] None None None
credit_card/is_card_number/378282246310005 throughput [15417993.443op/s; 15428224.585op/s] or [-0.033%; +0.033%] None None None
credit_card/is_card_number/37828224631000521389798 execution_time [45.668µs; 45.704µs] or [-0.040%; +0.040%] None None None
credit_card/is_card_number/37828224631000521389798 throughput [21879867.651op/s; 21897227.987op/s] or [-0.040%; +0.040%] None None None
credit_card/is_card_number/x371413321323331 execution_time [6.435µs; 6.436µs] or [-0.007%; +0.007%] None None None
credit_card/is_card_number/x371413321323331 throughput [155366956.982op/s; 155390155.393op/s] or [-0.007%; +0.007%] None None None
credit_card/is_card_number_no_luhn/ execution_time [3.913µs; 3.913µs] or [-0.008%; +0.008%] None None None
credit_card/is_card_number_no_luhn/ throughput [255544634.421op/s; 255587859.132op/s] or [-0.008%; +0.008%] None None None
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 execution_time [62.611µs; 62.751µs] or [-0.112%; +0.112%] None None None
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 throughput [15936978.367op/s; 15972691.666op/s] or [-0.112%; +0.112%] None None None
credit_card/is_card_number_no_luhn/ 378282246310005 execution_time [54.154µs; 54.175µs] or [-0.020%; +0.020%] None None None
credit_card/is_card_number_no_luhn/ 378282246310005 throughput [18458667.609op/s; 18465869.370op/s] or [-0.020%; +0.020%] None None None
credit_card/is_card_number_no_luhn/37828224631 execution_time [3.912µs; 3.913µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/37828224631 throughput [255555671.386op/s; 255599342.648op/s] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/378282246310005 execution_time [50.523µs; 50.552µs] or [-0.029%; +0.029%] None None None
credit_card/is_card_number_no_luhn/378282246310005 throughput [19781538.536op/s; 19792988.097op/s] or [-0.029%; +0.029%] None None None
credit_card/is_card_number_no_luhn/37828224631000521389798 execution_time [45.708µs; 45.747µs] or [-0.042%; +0.042%] None None None
credit_card/is_card_number_no_luhn/37828224631000521389798 throughput [21859622.304op/s; 21878138.968op/s] or [-0.042%; +0.042%] None None None
credit_card/is_card_number_no_luhn/x371413321323331 execution_time [6.437µs; 6.438µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/x371413321323331 throughput [155319559.903op/s; 155346543.829op/s] or [-0.009%; +0.009%] None None None

Group 6

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
single_flag_killswitch/rules-based execution_time 189.970ns 192.206ns ± 1.751ns 192.055ns ± 1.247ns 193.198ns 195.589ns 196.831ns 200.229ns 4.26% 1.045 1.610 0.91% 0.124ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
single_flag_killswitch/rules-based execution_time [191.964ns; 192.449ns] or [-0.126%; +0.126%] None None None

Group 7

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
ip_address/quantize_peer_ip_address_benchmark execution_time 5.017µs 5.075µs ± 0.028µs 5.070µs ± 0.020µs 5.092µs 5.136µs 5.138µs 5.144µs 1.46% 0.818 0.080 0.56% 0.002µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
ip_address/quantize_peer_ip_address_benchmark execution_time [5.071µs; 5.079µs] or [-0.077%; +0.077%] None None None

Group 8

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
sdk_test_data/rules-based execution_time 144.066µs 146.725µs ± 1.713µs 146.419µs ± 0.592µs 147.120µs 148.560µs 152.883µs 161.733µs 10.46% 4.936 34.787 1.16% 0.121µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
sdk_test_data/rules-based execution_time [146.488µs; 146.963µs] or [-0.162%; +0.162%] None None None

Group 9

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
redis/obfuscate_redis_string execution_time 34.319µs 34.772µs ± 0.755µs 34.433µs ± 0.055µs 34.523µs 36.364µs 36.394µs 38.026µs 10.43% 1.824 1.907 2.17% 0.053µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
redis/obfuscate_redis_string execution_time [34.668µs; 34.877µs] or [-0.301%; +0.301%] None None None

Group 10

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
profile_add_sample_frames_x1000 execution_time 4.219ms 4.224ms ± 0.003ms 4.224ms ± 0.002ms 4.226ms 4.228ms 4.232ms 4.254ms 0.72% 3.861 32.638 0.08% 0.000ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
profile_add_sample_frames_x1000 execution_time [4.224ms; 4.225ms] or [-0.011%; +0.011%] None None None

Group 11

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
receiver_entry_point/report/2598 execution_time 3.402ms 3.435ms ± 0.032ms 3.424ms ± 0.007ms 3.433ms 3.520ms 3.543ms 3.556ms 3.86% 2.182 3.872 0.93% 0.002ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
receiver_entry_point/report/2598 execution_time [3.430ms; 3.439ms] or [-0.129%; +0.129%] None None None

Group 12

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
benching serializing traces from their internal representation to msgpack execution_time 13.930ms 13.973ms ± 0.025ms 13.970ms ± 0.012ms 13.983ms 14.016ms 14.067ms 14.104ms 0.96% 1.815 6.138 0.18% 0.002ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
benching serializing traces from their internal representation to msgpack execution_time [13.970ms; 13.977ms] or [-0.025%; +0.025%] None None None

Group 13

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
sql/obfuscate_sql_string execution_time 86.368µs 86.727µs ± 0.133µs 86.719µs ± 0.053µs 86.770µs 86.849µs 87.037µs 88.082µs 1.57% 5.415 53.044 0.15% 0.009µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
sql/obfuscate_sql_string execution_time [86.709µs; 86.745µs] or [-0.021%; +0.021%] None None None

Group 14

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... execution_time 495.453µs 497.119µs ± 1.855µs 496.327µs ± 0.402µs 497.004µs 500.559µs 503.511µs 506.162µs 1.98% 1.724 2.866 0.37% 0.131µs 1 200
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... throughput 1975652.931op/s 2011619.765op/s ± 7459.876op/s 2014800.839op/s ± 1632.194op/s 2016158.107op/s 2017615.917op/s 2018271.327op/s 2018356.504op/s 0.18% -1.703 2.728 0.37% 527.493op/s 1 200
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて execution_time 377.107µs 377.948µs ± 0.420µs 377.940µs ± 0.294µs 378.210µs 378.697µs 379.002µs 379.275µs 0.35% 0.425 -0.165 0.11% 0.030µs 1 200
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて throughput 2636611.134op/s 2645871.277op/s ± 2936.437op/s 2645926.134op/s ± 2063.075op/s 2648127.091op/s 2650181.783op/s 2650969.736op/s 2651765.742op/s 0.22% -0.420 -0.174 0.11% 207.637op/s 1 200
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters execution_time 168.540µs 168.878µs ± 0.133µs 168.866µs ± 0.077µs 168.961µs 169.118µs 169.229µs 169.283µs 0.25% 0.357 0.312 0.08% 0.009µs 1 200
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters throughput 5907277.450op/s 5921433.873op/s ± 4669.255op/s 5921857.646op/s ± 2683.541op/s 5924190.817op/s 5928745.128op/s 5931178.265op/s 5933307.144op/s 0.19% -0.352 0.308 0.08% 330.166op/s 1 200
normalization/normalize_service/normalize_service/[empty string] execution_time 36.827µs 37.034µs ± 0.123µs 37.067µs ± 0.103µs 37.138µs 37.199µs 37.235µs 37.247µs 0.48% -0.190 -1.455 0.33% 0.009µs 1 200
normalization/normalize_service/normalize_service/[empty string] throughput 26847786.874op/s 27002749.368op/s ± 89872.594op/s 26977882.674op/s ± 75057.453op/s 27099282.655op/s 27134688.371op/s 27141319.393op/s 27153928.466op/s 0.65% 0.195 -1.456 0.33% 6354.952op/s 1 200
normalization/normalize_service/normalize_service/test_ASCII execution_time 46.217µs 46.316µs ± 0.065µs 46.304µs ± 0.036µs 46.352µs 46.422µs 46.452µs 46.820µs 1.11% 2.710 16.959 0.14% 0.005µs 1 200
normalization/normalize_service/normalize_service/test_ASCII throughput 21358573.247op/s 21590865.579op/s ± 29993.568op/s 21596511.169op/s ± 16688.328op/s 21611003.159op/s 21625825.688op/s 21630327.091op/s 21637186.203op/s 0.19% -2.662 16.462 0.14% 2120.866op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... execution_time [496.862µs; 497.376µs] or [-0.052%; +0.052%] None None None
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... throughput [2010585.898op/s; 2012653.632op/s] or [-0.051%; +0.051%] None None None
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて execution_time [377.890µs; 378.006µs] or [-0.015%; +0.015%] None None None
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて throughput [2645464.316op/s; 2646278.239op/s] or [-0.015%; +0.015%] None None None
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters execution_time [168.860µs; 168.897µs] or [-0.011%; +0.011%] None None None
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters throughput [5920786.760op/s; 5922080.987op/s] or [-0.011%; +0.011%] None None None
normalization/normalize_service/normalize_service/[empty string] execution_time [37.017µs; 37.051µs] or [-0.046%; +0.046%] None None None
normalization/normalize_service/normalize_service/[empty string] throughput [26990293.890op/s; 27015204.845op/s] or [-0.046%; +0.046%] None None None
normalization/normalize_service/normalize_service/test_ASCII execution_time [46.307µs; 46.325µs] or [-0.019%; +0.019%] None None None
normalization/normalize_service/normalize_service/test_ASCII throughput [21586708.759op/s; 21595022.399op/s] or [-0.019%; +0.019%] None None None

Group 15

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
tags/replace_trace_tags execution_time 2.307µs 2.353µs ± 0.013µs 2.352µs ± 0.004µs 2.359µs 2.374µs 2.378µs 2.380µs 1.17% -0.982 2.559 0.56% 0.001µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
tags/replace_trace_tags execution_time [2.351µs; 2.355µs] or [-0.077%; +0.077%] None None None

Group 16

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
profile_add_sample_timestamped_x1000 execution_time 4.232ms 4.236ms ± 0.008ms 4.235ms ± 0.001ms 4.236ms 4.240ms 4.246ms 4.345ms 2.60% 11.941 154.706 0.19% 0.001ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
profile_add_sample_timestamped_x1000 execution_time [4.235ms; 4.237ms] or [-0.027%; +0.027%] None None None

Group 17

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
profile_add_sample2_frames_x1000 execution_time 728.096µs 729.441µs ± 0.612µs 729.423µs ± 0.354µs 729.797µs 730.541µs 730.960µs 732.439µs 0.41% 0.754 2.186 0.08% 0.043µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
profile_add_sample2_frames_x1000 execution_time [729.356µs; 729.526µs] or [-0.012%; +0.012%] None None None

Group 18

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
normalization/normalize_trace/test_trace execution_time 235.877ns 249.118ns ± 14.979ns 242.679ns ± 4.069ns 251.441ns 283.017ns 290.129ns 292.849ns 20.67% 1.504 0.953 6.00% 1.059ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
normalization/normalize_trace/test_trace execution_time [247.042ns; 251.194ns] or [-0.833%; +0.833%] None None None

Group 19

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
write only interface execution_time 1.207µs 3.205µs ± 1.418µs 2.982µs ± 0.030µs 3.014µs 3.684µs 13.945µs 14.734µs 394.17% 7.332 55.007 44.14% 0.100µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
write only interface execution_time [3.009µs; 3.402µs] or [-6.132%; +6.132%] None None None

Group 20

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
two way interface execution_time 18.194µs 26.725µs ± 10.111µs 18.670µs ± 0.400µs 35.281µs 45.520µs 46.194µs 70.428µs 277.22% 0.925 0.612 37.74% 0.715µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
two way interface execution_time [25.323µs; 28.126µs] or [-5.244%; +5.244%] None None None

Baseline

Omitted due to size.

cbindgen doesn't evaluate cfg(not(feature = "std")) and picks up
the ffi_types module types, causing redefinitions with common.h.
Exclude Slice_CChar, CharSlice, CStr, Error, and Vec_U8 from the
generated header since they are already provided by common.h.

Also simplify ffi_types::CString to a re-export of alloc::ffi::CString.
- Fix import ordering for rustfmt (cfg(not(...)) before cfg(feature))
- Remove ddog_CStr from cbindgen exclude list (not in common.h)
- Regenerate LICENSE-3rdparty.yml for new deps
… builds

Make the minimum subset of libdd-common-ffi work in no_std+alloc so that
libdd-library-config-ffi can use the real FFI types instead of duplicating
them in a local ffi_types module (~55 lines removed).

- Add std feature to libdd-common-ffi (default on), gating std-only modules
- Replace std:: imports with core::/alloc:: equivalents in slice.rs and cstr.rs
- Replace std::ffi::CStr with core::ffi::CStr in libdd-common cstr macros
- Make libdd-common-ffi a non-optional dependency of libdd-library-config-ffi
- Delete the duplicated ffi_types module from libdd-library-config-ffi
- Remove cbindgen exclude list (no longer needed without ffi_types)
…wn dep

BTreeMap from alloc::collections works in both std and no_std without
needing the hashbrown crate. The config maps are small, so O(log n) vs
O(1) is negligible, and deterministic iteration order is a bonus.
… YAML parsing

yaml-peg supports no_std+alloc, enabling parse_stable_config_slice to
work without std. Moved trim_bytes into parse_stable_config_slice so
all callers (including get_config_from_bytes) benefit from whitespace
trimming. Removed serde_yaml dependency.
…staticlib/cdylib compat

The staticlib/cdylib crate types require an unwinding runtime that doesn't
exist in no_std. Gate #![no_std] on the new no_std_entry feature so that
--no-default-features compiles with implicit std, while true no_std builds
use --features no_std_entry with -Zbuild-std panic=abort.
@pawelchcki pawelchcki force-pushed the pawel/no-std-library-config branch from ee51658 to e77ef42 Compare March 20, 2026 20:07
…eature to consumers

Make vec.rs no_std-compatible (core/alloc imports, gate anyhow impl).
Move vec module out of #[cfg(feature = "std")] gate since it only needs
alloc. Add features = ["std"] to all workspace crates that depend on
libdd-common-ffi with default-features = false, since they all need the
std-gated types (Handle, Result, Error, etc).
Mirrors the Phase 1 hoist so each iteration reuses the cached
Option<String> instead of re-borrowing stable_config.
Drop the generalized $err_ctor parameter, the no_std macro variant,
and the body rewrite. The only caller is itself std-gated, so the
macro just needs feature = "std" added to its existing arms.
@pawelchcki
Copy link
Copy Markdown
Contributor Author

@copilot merge in latest main branch

Copy link
Copy Markdown

Copilot AI commented Apr 29, 2026

@copilot merge in latest main branch

Done in 9383bef2: merged latest origin/main into this branch and resolved the single conflict in .github/workflows/test.yml (kept the PACKAGES-aware main flow and retained the no_std check step). Validation run: cargo check -p libdd-library-config-ffi --all-features passed.

No UI changes in this update.

Copy link
Copy Markdown
Contributor

@yannham yannham left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems there are two different motivations mentioned in this PR:

  1. Artifact size. I would claim here that no_std doesn't make a big difference (it can shave off some formatting code IIRC for errors and whatnot), at least not per se. Rather the fact that no_std basically implies an API surface that is reduced by 90% is likely to be the main contributor to the size reduction. I personally don't have anything against making the crate no_std, but if size the main motivation, similar results could probably be achieved with a minimal or whatnot feature gate that just hides most symbols (as does no_std) without much other changes, and thus be a smaller/uncontroversial change? Another variant could be to create more fine-grained features, so that we can enable a bunch of selected modules à la carte.
  2. Actually running in a no_std environment where some OS-level primitive aren't available. In that case no_std is indeed the only solution.

As far as the code goes, mostly LGTM except that maybe we could reduce the #[cfg(..)] clutter with appropriate feature-specific modules.

Comment thread libdd-common-ffi/src/slice.rs
Comment on lines +37 to +38
/// guard above). WARNING: this symbol is globally visible — this library must not be
/// linked with other Rust code compiled with `panic = "unwind"`.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This sounds like a pretty big footgun in practice. I'm not sure there's a way to enforce that/warn in any way, though...

Comment thread libdd-library-config-ffi/src/lib.rs Outdated
Comment thread libdd-library-config-ffi/src/lib.rs Outdated

impl LibraryConfig {
fn rs_vec_to_ffi(configs: Vec<lib_config::LibraryConfig>) -> anyhow::Result<ffi::Vec<Self>> {
fn vec_to_ffi(
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nitpick: name change seems unrelated to the no_std business

Comment thread libdd-library-config-ffi/src/lib.rs Outdated
})
}

#[cfg(feature = "std")]
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if we could reduce the clutter by having a std module (or another name, if that clashes with std) that is cfg-gated once and then pub use it instead of repeating the guard. As we do for platform-specific implementations

Copy link
Copy Markdown
Contributor Author

@pawelchcki pawelchcki Apr 30, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, I need to experiment a alittle with it, but I was worried it would require too many changes and baloon the PR - beyond the functionality I needed

Comment thread libdd-library-config/src/lib.rs Outdated
Comment thread libdd-library-config/src/lib.rs Outdated
Comment thread libdd-library-config/src/lib.rs Outdated
pawelchcki and others added 2 commits April 29, 2026 17:37
- Consolidate std-only items into a single `std_api` submodule, replacing
  twelve scattered `#[cfg(feature = "std")]` annotations with one gate at
  the module boundary
- Restore `rs_vec_to_ffi` name (rename was unrelated to no_std work) and
  drop the stale Centos 6 global_asm and FfiConfigurator type-alias
  comments
- Revert the config_id hoists in `get_single_source_config` and
  `get_single_source_process_config`; the inline `stable_config.config_id
  .clone()` form from main is more concise
- Document why `FfiSafeErrorMessage for SliceConversionError` is
  std-gated (the trait lives in std-only `libdd-common`)
… getters

- Drop the doc-comment on `mod std_api` (already self-evident from the
  cfg-gated module declaration) and the "defensive cleanup" what-comment
  on `clear_error`
- Collapse the two `*_stable_config_path` getters via a `static_path_cstr!`
  macro local to `std_api`, so the SAFETY rationale lives once instead of
  being copy-pasted under each function
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 22 out of 23 changed files in this pull request and generated 4 comments.

Comments suppressed due to low confidence (1)

libdd-library-config-ffi/src/lib.rs:93

  • The PR description mentions adding a ddog_library_configurator_get_from_bytes FFI entry point that works in both std and no_std, but there is no such exported function in this crate (repo-wide search for ddog_library_configurator_get_from_bytes returns no matches). Either add the function (and ensure it is available when std is disabled) or update the PR description to match the implemented API surface.
#[no_mangle]
pub extern "C" fn ddog_library_configurator_new(
    debug_logs: bool,
    language: CharSlice,
) -> Box<Configurator> {
    Box::new(Configurator {
        inner: lib_config::Configurator::new(debug_logs),

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/test.yml Outdated
Comment thread libdd-library-config/src/config_read.rs Outdated
Comment thread libdd-library-config/src/lib.rs Outdated
Comment thread libdd-library-config-ffi/src/lib.rs
@pawelchcki
Copy link
Copy Markdown
Contributor Author

@codex review

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 415115efda

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread libdd-library-config/src/lib.rs
Comment thread libdd-library-config/src/config_read.rs Outdated
…ders

- StdConfigRead: compare metadata length as u64 before casting to usize so
  oversized files can't truncate past the check on 32-bit targets, and
  re-check buf.len() after read_to_end to catch TOCTOU growth between
  metadata() and the read
- get_config_from_reader: downgrade an oversized Ok(bytes) from a custom
  ConfigRead to ConfigReadError::TooLarge so the configurator's safety-net
  contract (documented on the trait) is actually enforced
- CI: the no_std step now compiles libdd-library-config-ffi with
  no_std_entry + panic=abort scoped via --config so it actually exercises
  the no_std code path instead of a std build with --no-default-features
…iles

Replace eleven `#[cfg(feature = "std")]` annotations on `pub mod` lines in
lib.rs with a single `#![cfg(feature = "std")]` inner attribute at the top
of each std-only module file. The mod declarations stay unconditional —
when std is off, the file's inner cfg strips the contents, so the module
exists but is empty. The cfg now lives next to the std-using code instead
of being collected at the crate root.
Apply the same pattern as the previous libdd-common-ffi cleanup to the
other std-only file-backed modules in this PR: drop the
`#[cfg(feature = "std")]` from `pub mod` declarations and rely on each
file's own inner `#![cfg(feature = "std")]` instead. Covers:

- libdd-library-config: otel_process_ctx, tracer_metadata
- libdd-library-config-ffi: tracer_metadata

Also drops the redundant explanatory comments left behind in lib.rs files
from the previous pass.
The thiserror derive and the FfiSafeErrorMessage impl each carried their
own copy of the three error strings. Funnel both through a private
`message()` method that returns the c-str, then derive Display from it
(plus an empty `core::error::Error` impl, available since MSRV 1.81).

This was thiserror's only use in the crate, so drop the dependency.
Lets static c-string error messages (e.g. those returned by
`FfiSafeErrorMessage::as_ffi_str`) be converted into `Error` directly
without a manual `to_str().unwrap().to_string()` round-trip.
`to_string_lossy` keeps the conversion infallible for callers that don't
control the source bytes' UTF-8-ness.
@pawelchcki pawelchcki requested a review from yannham April 30, 2026 17:27
- Remove the doc comment on `SliceConversionError::message` — its two
  call sites within the same impl/file make the role self-evident.
- Replace the inline `--config 'profile.dev.panic="abort"'` in the no_std
  CI step with a named `[profile.no-std-dev]` in the workspace manifest.
  The CI command becomes `--profile no-std-dev`, the rationale lives next
  to the profile definition, and the override is greppable.
Copy link
Copy Markdown
Contributor

@yannham yannham left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Better separation of std/no_std boilerplate now 👍 I don't approve right now because there's the more general question of should we proceed with making some crates no_std and what's the plan here (which isn't only my call), but as far the code goes, LGTM

Comment on lines +23 to 26
#[cfg(feature = "std")]
use std::env;
#[cfg(feature = "std")]
use std::path::Path;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
#[cfg(feature = "std")]
use std::env;
#[cfg(feature = "std")]
use std::path::Path;
#[cfg(feature = "std")]
use std::{env, path::Path};

self.parse_stable_config_slice(&buffer)
}

#[cfg(feature = "std")]
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a bit less severe for this file, so it's a non-blocking suggestion, but I think the same std-specific-module technique can be used in the pure Rust API (mod no_std_api or mod std_api and then pub use -- especially since in Rust you can put different pieces of impl SomeStruct in different places, including submodules).

# shellcheck disable=SC2086
cargo build $PACKAGES --verbose
fi
- name: "[${{ steps.rust-version.outputs.version}}] cargo check no_std (library-config)"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we currently don't have a good way to test sets of features (ideally we would use cargo hack or something like that). But just to double check if it's the right place/the right move to add a bespoke step for one specific crate and features combination, or if there's a more principled way to do that @ekump ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants