Update readme; Fix soundness hole in '<Vec as Decode>::decode';

This commit is contained in:
Gabriel Bjørnager Jensen 2025-01-10 22:51:21 +01:00
parent 2197a9200d
commit d43ed46b08
7 changed files with 35 additions and 29 deletions

View file

@ -3,7 +3,12 @@
This is the changelog of [Oct](https://crates.io/crates/oct/).
See `README.md` for more information.
## 1.15.2
## 0.15.3
* Update readme
* Fix soundness hole in `<Vec as Decode>::decode`
## 0.15.2
* Clean up code
* Update docs

View file

@ -20,17 +20,17 @@ According to my runs on an AMD Ryzen 7 3700X with default settings, these benchm
| Benchmark | [Bincode] | [Borsh] | Oct | [Postcard] |
| :--------------------------------- | --------: | ------: | -----: | ---------: |
| `encode_u8` | 0.977s | 0.871s | 0.754s | 0.916s |
| `encode_u32` | 0.967s | 0.983s | 0.730s | 2.727s |
| `encode_u128` | 2.178s | 2.175s | 1.481s | 6.002s |
| `encode_struct_unit` | 0.000s | 0.000s | 0.000s | 0.000s |
| `encode_struct_unnamed` | 1.206s | 1.168s | 0.805s | 2.356s |
| `encode_struct_named` | 3.021s | 1.532s | 0.952s | 3.013s |
| `encode_enum_unit` | 0.245s | 0.294s | 0.000s | 0.294s |
| `decode_u8` | 0.952s | 0.895s | 0.885s | 0.894s |
| `decode_non_zero_u8` | 1.215s | 1.250s | 1.229s | 1.232s |
| `decode_bool` | 1.204s | 1.224s | 1.126s | 1.176s |
| **Total time** &#8594; | 11.964s | 10.392s | 7.963s | 18.609s |
| `encode_u8` | 0.977 | 0.871 | 0.754 | 0.916 |
| `encode_u32` | 0.967 | 0.983 | 0.730 | 2.727 |
| `encode_u128` | 2.178 | 2.175 | 1.481 | 6.002 |
| `encode_struct_unit` | 0.000 | 0.000 | 0.000 | 0.000 |
| `encode_struct_unnamed` | 1.206 | 1.168 | 0.805 | 2.356 |
| `encode_struct_named` | 3.021 | 1.532 | 0.952 | 3.013 |
| `encode_enum_unit` | 0.245 | 0.294 | 0.000 | 0.294 |
| `decode_u8` | 0.952 | 0.895 | 0.885 | 0.894 |
| `decode_non_zero_u8` | 1.215 | 1.250 | 1.229 | 1.232 |
| `decode_bool` | 1.204 | 1.224 | 1.126 | 1.176 |
| **Total time** &#8594; | 11.964 | 1 0.392 | 7.963 | 18.609 |
| **Total deviation (p.c.)** &#8594; | +50 | +31 | ±0 | +134 |
[Bincode]: https://crates.io/crates/bincode/

View file

@ -22,7 +22,7 @@
[package]
name = "oct-benchmarks"
version = "0.15.2"
version = "0.15.3"
edition = "2021"
description = "Oct benchmarks."
license = "MIT"

View file

@ -8,7 +8,7 @@
[package]
name = "oct-macros"
version = "0.15.2"
version = "0.15.3"
edition = "2021"
description = "Octonary transcoder. Procedural macros."
documentation = "https://docs.rs/oct-macros/"

View file

@ -8,7 +8,7 @@
[package]
name = "oct"
version = "0.15.2"
version = "0.15.3"
edition = "2021"
rust-version = "1.83"
description = "Octonary transcoder."

View file

@ -28,17 +28,17 @@
//!
//! | Benchmark | [Bincode] | [Borsh] | Oct | [Postcard] |
//! | :--------------------------------- | --------: | ------: | -----: | ---------: |
//! | `encode_u8` | 0.977s | 0.871s | 0.754s | 0.916s |
//! | `encode_u32` | 0.967s | 0.983s | 0.730s | 2.727s |
//! | `encode_u128` | 2.178s | 2.175s | 1.481s | 6.002s |
//! | `encode_struct_unit` | 0.000s | 0.000s | 0.000s | 0.000s |
//! | `encode_struct_unnamed` | 1.206s | 1.168s | 0.805s | 2.356s |
//! | `encode_struct_named` | 3.021s | 1.532s | 0.952s | 3.013s |
//! | `encode_enum_unit` | 0.245s | 0.294s | 0.000s | 0.294s |
//! | `decode_u8` | 0.952s | 0.895s | 0.885s | 0.894s |
//! | `decode_non_zero_u8` | 1.215s | 1.250s | 1.229s | 1.232s |
//! | `decode_bool` | 1.204s | 1.224s | 1.126s | 1.176s |
//! | **Total time** &#8594; | 11.964s | 10.392s | 7.963s | 18.609s |
//! | `encode_u8` | 0.977 | 0.871 | 0.754 | 0.916 |
//! | `encode_u32` | 0.967 | 0.983 | 0.730 | 2.727 |
//! | `encode_u128` | 2.178 | 2.175 | 1.481 | 6.002 |
//! | `encode_struct_unit` | 0.000 | 0.000 | 0.000 | 0.000 |
//! | `encode_struct_unnamed` | 1.206 | 1.168 | 0.805 | 2.356 |
//! | `encode_struct_named` | 3.021 | 1.532 | 0.952 | 3.013 |
//! | `encode_enum_unit` | 0.245 | 0.294 | 0.000 | 0.294 |
//! | `decode_u8` | 0.952 | 0.895 | 0.885 | 0.894 |
//! | `decode_non_zero_u8` | 1.215 | 1.250 | 1.229 | 1.232 |
//! | `decode_bool` | 1.204 | 1.224 | 1.126 | 1.176 |
//! | **Total time** &#8594; | 11.964 | 10.392 | 7.963 | 18.609 |
//! | **Total deviation (p.c.)** &#8594; | +50 | +31 | ±0 | +134 |
//!
//! [Bincode]: https://crates.io/crates/bincode/

View file

@ -26,16 +26,17 @@ impl<T: Decode, const N: usize> Decode for Vec<T, N> {
}));
}
let mut buf = [const { MaybeUninit::<T>::uninit() };N];
let mut buf = [const { MaybeUninit::<T>::uninit() }; N];
for (i, slot) in buf.iter_mut().enumerate() {
for (i, slot) in buf[..len].iter_mut().enumerate() {
let v = Decode::decode(input)
.map_err(|e| CollectionDecodeError::BadItem(ItemDecodeError { index: i, error: e }))?;
slot.write(v);
}
Ok(Self { buf, len })
let this = unsafe { Self::from_raw_parts(buf, len) };
Ok(this)
}
}