summaryrefslogtreecommitdiff
path: root/crates/tor-bytes/src/reader.rs
Commit message (Collapse)AuthorAgeFilesLines
* tor-bytes: Remove use of arrayrefNick Mathewson2023-05-251-9/+8
| | | | | Part of #872: Now that const generics are in, we have better ways to express converting slices into array-references.
* tor-bytes: defend against misuse of extract_n().Nick Mathewson2023-03-061-1/+14
| | | | | | | | | | | | | | | | | | | | | | | | Previously, if somebody wrote this code, an attacker could easily use it to cause an OOM panic: ``` let n = r.take_u64(); let items: Vec<Foo> = r.extract_n(n as usize)?; ``` The first line of defense here is not to write protocols like that: we don't actually _have_ any 32-bit counters in our protocol AFAICT. The second line of defense is to pre-check `n` for reasonableness before calling `extract_n`. Here we add a third line of defense: whereas previously we would do `Vec::with_capacity(n)` in `extract_n`, we now allocate an initial capacity of `min(n, r.remaining())`. This ensures that the size of the allocation can't exceed the remaining length of the message, which (for our cell types at least) should prevent it from overflowing or running OOM.
* tor-bytes: Clarify that Cursor is not a good thing, and could be neater.Nick Mathewson2023-03-011-2/+11
|
* clarify results of misusing cursorsIan Jackson2023-03-011-2/+2
|
* tor-bytes: Add cursor functionality to ReaderNick Mathewson2023-02-281-0/+61
| | | | | We'll use this to implement signature and MAC checking for EstablishIntro cells.
* tor-bytes: Avoid redundant allocationEmil Engler2022-10-251-1/+1
| | | | See c489e1d9118edd842f80b76a636037524a45ee45
* tor-bytes: read_nested_*: rustfmtIan Jackson2022-06-101-13/+23
| | | | I disagree with almost all of these layout decisions...
* tor-bytes: read_nested_*: Take a closureIan Jackson2022-06-101-25/+40
| | | | | | | | | | This eliminates the possibility of writing the bug of failing to call `should_be_exhausted`. As per this discussion https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/572#note_2811464 Fixes #498
* Fix typos in docs and commentsNick Mathewson2022-06-091-2/+2
|
* tor-bytes: Provide nested readersIan Jackson2022-06-091-0/+69
|
* tor-bytes: Reader: Provide take_restIan Jackson2022-06-091-0/+19
| | | | We'll want this in a moment.
* Fix/suppress a few more clippy lints in tests.Nick Mathewson2021-09-081-0/+1
| | | | | I'm alright with allowing cognitive-complexity violations in the tests.
* fix/silence clippy lints in test modulesDaniel Eades2021-09-081-0/+1
|
* Improvements to array-of-u8 handling in tor-bytes.Nick Mathewson2021-09-071-0/+28
| | | | | | | | | | | | Now that we have const generics, we can use them. We can also avoid an extra clone in the implementation for [u8; N]. Nothing in our codebase requires that we use Reader or Writer on a GenericArray holding anything other than u8, so I've switched back to the more efficient implementation there. I've added a fuzzer case for the new method, but apparently rustc nightly isn't working too well with fuzzers for me; I'm going to try it tomorrow.
* Move all crates into a `crates` subdirectory.Nick Mathewson2021-08-271-0/+433
This will cause some pain for now, but now is really the best time to do this kind of thing.