| // RUN: %clang_analyze_cc1 -analyzer-checker=alpha.unix.Chroot -analyzer-store region -verify %s |
| |
| extern int chroot(const char* path); |
| extern int chdir(const char* path); |
| |
| void foo(void) { |
| } |
| |
| void f1(void) { |
| chroot("/usr/local"); // root changed. |
| foo(); // expected-warning {{No call of chdir("/") immediately after chroot}} |
| } |
| |
| void f2(void) { |
| chroot("/usr/local"); // root changed. |
| chdir("/"); // enter the jail. |
| foo(); // no-warning |
| } |
| |
| void f3(void) { |
| chroot("/usr/local"); // root changed. |
| chdir("../"); // change working directory, still out of jail. |
| foo(); // expected-warning {{No call of chdir("/") immediately after chroot}} |
| } |