Skip to content

[CI] #149 ForeignBytes review fixes - #4

Closed
DenisovAV wants to merge 1 commit into
ci-verify-149-basefrom
support-uniffi-0.32
Closed

[CI] #149 ForeignBytes review fixes#4
DenisovAV wants to merge 1 commit into
ci-verify-149-basefrom
support-uniffi-0.32

Conversation

@DenisovAV

Copy link
Copy Markdown
Owner

Fork CI for Uniffi-Dart#149 head 992c32e after review fixes (empty-slice null ptr, Int32 guard, comment). Not for merge.

…gth guard

Review follow-up on the borrowed-bytes lowering:

- Empty `Uint8List`: pass `(null, 0)` instead of `calloc<Uint8>(0)`. A zero-size
  `calloc` is platform-variable — some allocators return null, which makes
  package:ffi's `calloc.allocate` throw — while Rust's `ForeignBytes::as_slice`
  reads `(null, 0)` as `&[]`. Mirrors the Kotlin/Python ByRef converters, which
  special-case zero length to a null pointer for exactly this reason.

- Guard against silent truncation: `ForeignBytes.len` is an `Int32`, so a
  `Uint8List` larger than `0x7fffffff` would wrap to a bogus (or negative)
  length and make Rust read the wrong slice or panic across the FFI boundary.
  Throw an `ArgumentError` instead.

Also reword the oracle.rs routing comment so "borrowed" (the Rust-side borrow)
isn't read as "zero-copy" on the Dart side, which still copies into native
memory (a GC `Uint8List` has no stable address).
@DenisovAV DenisovAV closed this Aug 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant