1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
//! Securely create and manage temporary files. Temporary files created by this create are //! automatically deleted. //! //! This crate provides two temporary file variants: `TempFile` and `NamedTempFile`. When choosing //! between the variants, prefer `TempFile` unless you either need to know the file's path or to be //! able to persist it. //! //! # Differences //! //! ## Resource Leaking //! //! `TempFile` will (almost) never fail to cleanup temporary files but `NamedTempFile` will if its //! destructor doesn't run. This is because `TempFile` relies on the OS to cleanup the underlying //! file so the file while `NamedTempFile` relies on its destructor to do so. //! //! ## Security //! //! In the presence of pathological temporary file cleaner, relying on file paths is unsafe because //! a temporary file cleaner could delete the temporary file which an attacker could then replace. //! //! `TempFile` doesn't rely on file paths so this isn't an issue. However, `NamedTempFile` does //! rely on file paths. //! extern crate libc; extern crate rand; #[cfg(windows)] extern crate winapi; #[cfg(windows)] extern crate kernel32; const NUM_RETRIES: u32 = 1 << 31; const NUM_RAND_CHARS: usize = 12; mod imp; mod util; mod named; mod unnamed; pub use ::named::NamedTempFile; pub use ::unnamed::TempFile;