Update: most of the issues here are solvable with a little tweaking. I've made changes in torspec in a8455f4d1a6ef7 to define the C behavior as "right" a little more.
The one issue that will be trickiest to handle is that the Rust code stores versions in a hashset of u32, whereas the C code stores an array of (lo,hi) pairs. As such, the Rust code needs to reject 1-4000000000 as a range, or else it will fill up RAM. C accepts such a range everywhere except during voting.
I propose that we handle that last issue separately from the others.
The easier issues are solved in my branch protover_rust_compat_v3, along with a fix for #25250 (moved).
Trac: Status: assigned to needs_review Priority: Medium to High
Update: most of the issues here are solvable with a little tweaking. I've made changes in torspec in a8455f4d1a6ef7 to define the C behavior as "right" a little more.
The one issue that will be trickiest to handle is that the Rust code stores versions in a hashset of u32, whereas the C code stores an array of (lo,hi) pairs. As such, the Rust code needs to reject 1-4000000000 as a range, or else it will fill up RAM. C accepts such a range everywhere except during voting.
I propose that we handle that last issue separately from the others.