chroot.c revision 1c9e6b1bad53486efd12564f76e960efd0d9dd61
1// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-experimental-checks -analyzer-store region -verify %s
2
3extern int chroot(const char* path);
4extern int chdir(const char* path);
5
6void foo(void) {
7}
8
9void f1(void) {
10  chroot("/usr/local"); // root changed.
11  foo(); // expected-warning {{No call of chdir("/") immediately after chroot}}
12}
13
14void f2(void) {
15  chroot("/usr/local"); // root changed.
16  chdir("/"); // enter the jail.
17  foo(); // no-warning
18}
19
20void f3(void) {
21  chroot("/usr/local"); // root changed.
22  chdir("../"); // change working directory, still out of jail.
23  foo(); // expected-warning {{No call of chdir("/") immediately after chroot}}
24}
25