Skip to content

Conversation

@coolreader18
Copy link

Also some internal changes that I think make stuff more efficient.

A lot of the times I have a fixed length byte buffer to encode, but cause encode_to_slice doesn't give you access to a str you have to do a check or use unsafe to turn it into a str. This makes it like char::encode_utf8(), where you encode into a buffer and then get to actually use the string from it right away. Also encode_fmt is nice for if something's in a Display/Debug implementation, or just if it's not necessary to allocate a whole separate string.

Comment on lines +462 to +469
for (out, byte) in output.chunks_exact_mut(2).zip(input) {
let (high, low) = byte2hex(*byte, table);
out[0] = high;
out[1] = low;
}

Ok(())
// SAFETY: output was just fully filled with only ascii characters
let output = unsafe { core::str::from_utf8_unchecked_mut(output) };
Copy link

@hkBst hkBst Dec 31, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If input is an empty slice, then the zip is an empty iterator, and no data is written to output. Thus there is no reason to assume output contains valid utf8, though the subslice that was actually written does.
The above is wrong, because it was already checked if input.len() * 2 != output.len(), but maybe expand on the safety comment.

@KokaKiwi
Copy link
Owner

KokaKiwi commented Nov 7, 2025

hex is meant to not contains any unsafe code (enforced now with #[forbid(unsafe_code)]), so I'll close it for now

@KokaKiwi KokaKiwi closed this Nov 7, 2025
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.

3 participants