[−][src]Crate read_restrict
read-restrict
An adaptor around Rust's standard io::Take
which instead of returning
Ok(0)
when the read limit is exceeded, instead returns an error of of the kind
ErrorKind::InvalidData
.
This is intended for enforcing explicit input limits when simply truncating with
take
could result in incorrect behaviour.
read_restrict
also offers restricted variants of
std::fs::read
and
std::fs::read_to_string
, to conveniently
prevent unbounded reads of overly-large files.
Examples
use std::io::{self, Read, ErrorKind}; use read_restrict::ReadExt; fn main() -> io::Result<()> { let f = std::fs::File::open("foo.txt")?; let mut handle = f.restrict(5); let mut buf = [0; 8]; assert_eq!(5, handle.read(&mut buf)?); // reads at most 5 bytes assert_eq!(0, handle.restriction()); // is now exhausted assert_eq!(ErrorKind::InvalidData, handle.read(&mut buf).unwrap_err().kind()); Ok(()) }
fn load_config(path: &std::path::Path) -> std::io::Result<String> { // No sensible configuration is going to exceed 640 KiB let conf = read_restrict::read_to_string(&path, 640 * 1024)?; // probably want to parse it here Ok(conf) }
Structs
Restrict | Reader adaptor which restricts the bytes read from an underlying reader,
returning an IO error of the kind |
Traits
ReadExt |
Functions
read | Read the entire contents of a file into a bytes vector, provided it fits within a specified size limit. |
read_to_string | Read the entire contents of a file into a string, provided it fits within a specified size limit. |