Skip to content

Commit acd99f7

Browse files
committed
test_env: Make argv0 tests compatible with Ubuntu patch
1 parent b4a4a38 commit acd99f7

File tree

1 file changed

+26
-57
lines changed

1 file changed

+26
-57
lines changed

tests/by-util/test_env.rs

Lines changed: 26 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -721,133 +721,102 @@ fn test_env_with_empty_executable_double_quotes() {
721721
.stderr_is("env: '': No such file or directory\n");
722722
}
723723

724+
// Do not assume that coreutils uses argv0
724725
#[test]
725-
#[cfg(all(unix, feature = "dirname", feature = "echo"))]
726+
#[cfg(unix)]
726727
fn test_env_overwrite_arg0() {
727728
let ts = TestScenario::new(util_name!());
728729

729-
let bin = ts.bin_path.clone();
730-
731730
ts.ucmd()
732-
.args(&["--argv0", "echo"])
733-
.arg(&bin)
734-
.args(&["-n", "hello", "world!"])
731+
.args(&["--argv0", "hijacked", "sh", "-c", "echo $0"])
735732
.succeeds()
736-
.stdout_is("hello world!")
737-
.stderr_is("");
738-
739-
ts.ucmd()
740-
.args(&["-a", "dirname"])
741-
.arg(bin)
742-
.args(&["aa/bb/cc"])
743-
.succeeds()
744-
.stdout_is("aa/bb\n")
733+
.stdout_is("hijacked\n")
745734
.stderr_is("");
746735
}
747736

737+
// Do not assume that coreutils uses argv0
748738
#[test]
749-
#[cfg(all(unix, feature = "echo"))]
739+
#[cfg(unix)]
750740
fn test_env_arg_argv0_overwrite() {
751741
let ts = TestScenario::new(util_name!());
752742

753-
let bin = &ts.bin_path;
754-
755743
// overwrite --argv0 by --argv0
756744
ts.ucmd()
757745
.args(&["--argv0", "dirname"])
758-
.args(&["--argv0", "echo"])
759-
.arg(bin)
760-
.args(&["aa/bb/cc"])
746+
.args(&["--argv0", "hijacked", "sh", "-c", "echo $0"])
761747
.succeeds()
762-
.stdout_is("aa/bb/cc\n")
748+
.stdout_is("hijacked\n")
763749
.stderr_is("");
764750

765751
// overwrite -a by -a
766752
ts.ucmd()
767753
.args(&["-a", "dirname"])
768-
.args(&["-a", "echo"])
769-
.arg(bin)
770-
.args(&["aa/bb/cc"])
754+
.args(&["-a", "hijacked", "sh", "-c", "echo $0"])
771755
.succeeds()
772-
.stdout_is("aa/bb/cc\n")
756+
.stdout_is("hijacked\n")
773757
.stderr_is("");
774758

775759
// overwrite --argv0 by -a
776760
ts.ucmd()
777761
.args(&["--argv0", "dirname"])
778-
.args(&["-a", "echo"])
779-
.arg(bin)
780-
.args(&["aa/bb/cc"])
762+
.args(&["-a", "hijacked", "sh", "-c", "echo $0"])
781763
.succeeds()
782-
.stdout_is("aa/bb/cc\n")
764+
.stdout_is("hijacked\n")
783765
.stderr_is("");
784766

785767
// overwrite -a by --argv0
786768
ts.ucmd()
787769
.args(&["-a", "dirname"])
788-
.args(&["--argv0", "echo"])
789-
.arg(bin)
790-
.args(&["aa/bb/cc"])
770+
.args(&["--argv0", "hijacked", "sh", "-c", "echo $0"])
791771
.succeeds()
792-
.stdout_is("aa/bb/cc\n")
772+
.stdout_is("hijacked\n")
793773
.stderr_is("");
794774
}
795775

776+
// Do not assume that coreutils uses argv0
796777
#[test]
797-
#[cfg(all(unix, feature = "echo"))]
778+
#[cfg(unix)]
798779
fn test_env_arg_argv0_overwrite_mixed_with_string_args() {
799780
let ts = TestScenario::new(util_name!());
800781

801-
let bin = &ts.bin_path;
802-
803782
// string arg following normal
804783
ts.ucmd()
805784
.args(&["-S--argv0 dirname"])
806-
.args(&["--argv0", "echo"])
807-
.arg(bin)
808-
.args(&["aa/bb/cc"])
785+
.args(&["--argv0", "hijacked", "sh", "-c", "echo $0"])
809786
.succeeds()
810-
.stdout_is("aa/bb/cc\n")
787+
.stdout_is("hijacked\n")
811788
.stderr_is("");
812789

813790
// normal following string arg
814791
ts.ucmd()
815792
.args(&["-a", "dirname"])
816-
.args(&["-S-a echo"])
817-
.arg(bin)
818-
.args(&["aa/bb/cc"])
793+
.args(&["-S-a hijacked sh -c 'echo $0'"])
819794
.succeeds()
820-
.stdout_is("aa/bb/cc\n")
795+
.stdout_is("hijacked\n")
821796
.stderr_is("");
822797

823798
// one large string arg
824799
ts.ucmd()
825-
.args(&["-S--argv0 dirname -a echo"])
826-
.arg(bin)
827-
.args(&["aa/bb/cc"])
800+
.args(&["-S--argv0 dirname -a hijacked sh -c 'echo $0'"])
828801
.succeeds()
829-
.stdout_is("aa/bb/cc\n")
802+
.stdout_is("hijacked\n")
830803
.stderr_is("");
831804

832805
// two string args
833806
ts.ucmd()
834807
.args(&["-S-a dirname"])
835-
.args(&["-S--argv0 echo"])
836-
.arg(bin)
837-
.args(&["aa/bb/cc"])
808+
.args(&["-S--argv0 hijacked sh -c 'echo $0'"])
838809
.succeeds()
839-
.stdout_is("aa/bb/cc\n")
810+
.stdout_is("hijacked\n")
840811
.stderr_is("");
841812

842813
// three args: normal, string, normal
843814
ts.ucmd()
844815
.args(&["-a", "sleep"])
845816
.args(&["-S-a dirname"])
846-
.args(&["-a", "echo"])
847-
.arg(bin)
848-
.args(&["aa/bb/cc"])
817+
.args(&["-a", "hijacked", "sh", "-c", "echo $0"])
849818
.succeeds()
850-
.stdout_is("aa/bb/cc\n")
819+
.stdout_is("hijacked\n")
851820
.stderr_is("");
852821
}
853822

0 commit comments

Comments
 (0)