StructuredData: implement Binary LLSD #33

Closed
opened 2026-08-08 08:16:57 +00:00 by hugo · 1 comment
Owner

Objective

Implement bounded binary LLSD parsing and serialization over borrowed or streaming byte interfaces.

Deliverables

  • Port exact markers, lengths, integer/real endian rules, UUID/date/URI/binary encodings, arrays, maps, headers, and whitespace handling.
  • Reject truncation, overflow, excessive depth/size, invalid markers, and malformed lengths with typed positions/context.
  • Avoid unchecked indexing and unbounded allocation.

Validation

  • All Binary LLSD golden and malformed tests pass byte-for-byte.
  • Round trips cover every OSD variant and nested structure.
  • Fuzz seed corpus includes every translated malformed case.

Prerequisite

Milestone 04 supplies implemented value types and the global API/test gates are complete.

Project constraints

  • Native Rust only; no LibreMetaverse/.NET bridge or fallback.
  • Keep mapped signatures fixed and preserve translated assertions exactly.
  • Enforce bounded parsing for untrusted input and update docs and parity status.
## Objective Implement bounded binary LLSD parsing and serialization over borrowed or streaming byte interfaces. ## Deliverables - Port exact markers, lengths, integer/real endian rules, UUID/date/URI/binary encodings, arrays, maps, headers, and whitespace handling. - Reject truncation, overflow, excessive depth/size, invalid markers, and malformed lengths with typed positions/context. - Avoid unchecked indexing and unbounded allocation. ## Validation - All Binary LLSD golden and malformed tests pass byte-for-byte. - Round trips cover every OSD variant and nested structure. - Fuzz seed corpus includes every translated malformed case. ## Prerequisite Milestone 04 supplies implemented value types and the global API/test gates are complete. ## Project constraints - Native Rust only; no LibreMetaverse/.NET bridge or fallback. - Keep mapped signatures fixed and preserve translated assertions exactly. - Enforce bounded parsing for untrusted input and update docs and parity status.
hugo added this to the 05 - StructuredData implementation milestone 2026-08-08 08:16:57 +00:00
hugo added the enhancement label 2026-08-08 08:16:57 +00:00
Author
Owner

Implemented and pushed in commit 7a4f1f2 (Implement bounded Binary LLSD codec).

Implementation:

  • Added a native bounded Binary LLSD parser over borrowed bytes plus bounded seekable-stream entry points.
  • Implemented all reference markers and scalar/container encodings, both accepted headers, exact Binary whitespace, big-endian integer/real/count fields, little-endian date payloads, UUID/URI/binary data, nested arrays, and maps.
  • Added typed parse errors with byte offsets and static context for truncation, invalid markers, malformed/oversized lengths, invalid dates/URIs, missing delimiters, and depth/node/allocation limits.
  • Added bounded serialization for every representable OSD variant, stable map-key ordering, stream overloads, endian/helper mappings, parser dispatch integration, generated API mapping updates, docs, parity status, and malformed fuzz seeds.
  • Uses native cross-platform Rust only; no .NET bridge, unsafe code, or platform-specific API.

Verification:

  • cargo test -p libremetaverse-structured-data: 14 passed.
  • Pre-created Binary LLSD compatibility suite: 26 passed, 0 failed.
  • Full StructuredData compatibility file: all 26 Binary tests pass; the remaining 52 failures are the explicitly tracked later notation/protobuf/XML milestone work.
  • Controlled red-suite audit: 110 passed, 1255 expected failures, 0 ignored, live credentials enabled.
  • Workspace build and test compilation passed.
  • Strict workspace Clippy, formatting, and warning-free Rustdoc passed.
  • API compile fixture, shim/mapping regeneration checks, API coverage, test parity, generated surface, and tool unit tests passed.

Final review against the issue confirmed every Binary golden test, every OSD variant/nested round trip, exact header/whitespace handling, streaming paths, malformed corpus coverage, and bounded rejection behavior.

Implemented and pushed in commit 7a4f1f2 (Implement bounded Binary LLSD codec). Implementation: - Added a native bounded Binary LLSD parser over borrowed bytes plus bounded seekable-stream entry points. - Implemented all reference markers and scalar/container encodings, both accepted headers, exact Binary whitespace, big-endian integer/real/count fields, little-endian date payloads, UUID/URI/binary data, nested arrays, and maps. - Added typed parse errors with byte offsets and static context for truncation, invalid markers, malformed/oversized lengths, invalid dates/URIs, missing delimiters, and depth/node/allocation limits. - Added bounded serialization for every representable OSD variant, stable map-key ordering, stream overloads, endian/helper mappings, parser dispatch integration, generated API mapping updates, docs, parity status, and malformed fuzz seeds. - Uses native cross-platform Rust only; no .NET bridge, unsafe code, or platform-specific API. Verification: - cargo test -p libremetaverse-structured-data: 14 passed. - Pre-created Binary LLSD compatibility suite: 26 passed, 0 failed. - Full StructuredData compatibility file: all 26 Binary tests pass; the remaining 52 failures are the explicitly tracked later notation/protobuf/XML milestone work. - Controlled red-suite audit: 110 passed, 1255 expected failures, 0 ignored, live credentials enabled. - Workspace build and test compilation passed. - Strict workspace Clippy, formatting, and warning-free Rustdoc passed. - API compile fixture, shim/mapping regeneration checks, API coverage, test parity, generated surface, and tool unit tests passed. Final review against the issue confirmed every Binary golden test, every OSD variant/nested round trip, exact header/whitespace handling, streaming paths, malformed corpus coverage, and bounded rejection behavior.
hugo closed this issue 2026-08-09 00:29:57 +00:00
Sign in to join this conversation.