Skip to content

Commit c4730da

Browse files
committed
re-work example
1 parent 8478d48 commit c4730da

File tree

1 file changed

+35
-12
lines changed

1 file changed

+35
-12
lines changed

src/libstd/env.rs

+35-12
Original file line numberDiff line numberDiff line change
@@ -495,18 +495,41 @@ pub fn temp_dir() -> PathBuf {
495495
///
496496
/// # Security
497497
///
498-
/// This function should be used with care, as its incorrect usage can cause
499-
/// security problems. Specifically, as with many operations invovling files and
500-
/// paths, you can introduce a race condition. It goes like this:
501-
///
502-
/// 1. You get the path to the current executable using `current_exe()`, and
503-
/// store it in a variable binding.
504-
/// 2. Time passes. A malicious actor removes the current executable, and
505-
/// replaces it with a malicious one.
506-
/// 3. You then use the binding to try to open that file.
507-
///
508-
/// You expected to be opening the current executable, but you're now opening
509-
/// something completely different.
498+
/// The output of this function should not be used in anything that might have
499+
/// security implications. For example:
500+
///
501+
/// ```
502+
/// fn main() {
503+
/// println!("{:?}", std::env::current_exe());
504+
/// }
505+
/// ```
506+
///
507+
/// On Linux systems, if this is compiled as `foo`:
508+
///
509+
/// ```bash
510+
/// $ rustc foo.rs
511+
/// $ ./foo
512+
/// Ok("/home/alex/foo")
513+
/// ```
514+
///
515+
/// And you make a symbolic link of the program:
516+
///
517+
/// ```bash
518+
/// $ ln foo bar
519+
/// ```
520+
///
521+
/// When you run it, you won't get the original executable, you'll get the
522+
/// symlink:
523+
///
524+
/// ```bash
525+
/// $ ./bar
526+
/// Ok("/home/alex/bar")
527+
/// ```
528+
///
529+
/// This sort of behavior has been known to [lead to privledge escalation] when
530+
/// used incorrectly, for example.
531+
///
532+
/// [lead to privledge escalation]: http://securityvulns.com/Wdocument183.html
510533
///
511534
/// # Examples
512535
///

0 commit comments

Comments
 (0)