zlacker

[parent] [thread] 3 comments
1. adastr+(OP)[view] [source] 2025-08-22 23:44:12
OsStr/OsString is what you would use in those circumstances. Path/PathBuf specifically for filenames or paths, which I think uses OsStr/OsString internally. I've never looked at OsStr's internals but I wouldn't be surprised if it is a wrapper around &[u8].

Note that &[u8] would allow things like null bytes, and maybe other edge cases.

replies(1): >>kragen+f5
2. kragen+f5[view] [source] 2025-08-23 00:20:25
>>adastr+(OP)
You can't get null bytes from a command-line argument. And going by >>44991638 it's common to not use OsString when accepting command-line arguments, because std::env::args yields Strings, which means that probably most Rust programs that accept filenames on the command line have this bug.
replies(1): >>adastr+F9
◧◩
3. adastr+F9[view] [source] [discussion] 2025-08-23 01:03:08
>>kragen+f5
Rust String can contain null bytes! Rust uses explicit string lengths. Agree though that most OS wouldn't be able to pass null bytes in arguments though.
replies(1): >>kragen+pa
◧◩◪
4. kragen+pa[view] [source] [discussion] 2025-08-23 01:09:33
>>adastr+F9
Right, but it can't contain invalid UTF-8, which is valid in both command-line parameters and in filenames on Linux, FreeBSD, and other normal Unixes. See my link above for a demonstration of how this causes bugs in Rust programs.
[go to top]